'Study/AVR ATmega128 Easy Processor Kit'에 해당되는 글 13건

Study/AVR ATmega128 Easy Processor Kit

8. AVR의 GPIO 특성 이해

안녕하세요~~!!! 오랜만에 찾아뵙네요 ㅎㅎ 2학기 시작하고 시간이 부족해서 블로그 신경을 못쓰고 있었답니다 ㅠㅠ


이제 겨울방학이고 해서 다시 새마음 새뜻으로 차근차근 AVR 관련 공부한 것을 포스팅 하려구 해요!! ^^


다시 힘을 내서!! 시작해보도록 하죠. 저번에 Easy Processor Kit에 있는 ATmega128의 외부 LED 제어를 해보았는데요


이번 시간에는 간략하게 AVR GPIO의 특성에 대해서 공부해보도록 할게요.


 - AVR GPIO 특성


 ATmega128 모두 6개의 8비트 양방향 병렬 I/O 포트(PORTA~F)1개의 5비트 양방향 병렬 I/O 포트(PORTG)를 가지고 있어요. 포트 A~E는 범용 I/O 포트로 사용될 경우 기능적으로 모두 read-modify-wirte 동작이 가능합니다!!

 그림과 같이 각 I/O 핀에는 보호용 다이오드가 붙어있으며, 스위치 작동시 내부 풀업저항의 사용 여부를 선택적으로 설정할 수도 있답니다.


 그렇다면 과연 풀업저항이란 뭘까요??

그림과 같이 스위치가 OFF일 때는 +5v라는 High 값이 A로 가게 되며, 스위치가 ON일 때는 대부분의 전류가 Ground로 빠지게 되어 A에는 Low값이 입력되는 회로에서 저항의 명칭을 말하죠.

 그럼 이것을 쓰는 이유는 무엇이냐? 바로 플로팅 상태를 해결하기 위해서 쓰이는 것입니다. 플로팅 상태는 보통 스위치 off 상태에서 나타나게 되는 현상으로 HIGH인지 LOW인지 입력 상태를 알 수 없는 상태를 말합니다.


 그럼 이러한 포트들을 제어해주는 레지스터들은 무엇이냐? Easy Processor Kit에서는 외부 메모리 사용시 CPLD라는 외부 메모리 디코더가 있어 필요 없지만 ATmega128 보드나 아두이노 보드 사용시 반드시 포트들을 초기화 해주어하는 레지스터들이에요. 알아두시는게 유용할 겁니다!


 

빨강 : DDxn, 파랑 : PORTxn, 초록 : PINxn

 각 포트에는 3개의 I/O 레지스터 영역을 가지고 있는데, 입출력의 방향을 설정하는 DDRx 레지스터, 데이터 출력에 해당하는 PORTx 레지스터, 포트 입력 핀에 해당하는 PINx 레지스터 등이 있습니다!!

 좀 더 자세히 이 레지스터들을 알아보면 DDxn은 방향설정 레지스터 DDRx의 각 비트로서 이것을 1로 주면 이 핀은 출력핀으로 설정되고, 0으로 주면 입력핀으로 설정되요. 그리고 PORTxn은 출력으로 설정된 포트에 데이터를 출력하는 레지스터 비트이며, PINxn 레지스터 비트는 그 포트 핀을 읽어들이는 것입니다^^


 그 외에도 각 포트들은 부수적인 기능을 1~2가지씩 가지고 있어요. 대략적으로 요약해 보자면 다음과 같습니다.


 

 - 포트 A : 외부 메모리를 인터페이스하기 위하여 시분할다중화된 데이터 버스 및 어드레스 버스의 하위 바이트로 동작합니다.(ALE 신호 사용) 밑의 그림과 같이 외부 메모리와 연결 시 상위 8비트(포트 C)는 그대로 연결되지만, 하위 8비트(포트 A)ALE에 의해 시간차로 어드레스 버스로 갈 건지, 데이터 버스로 갈 건지 결정하게 되요. 이 부분들이 우리가 사용하는 Kit에서는 MCUCR이라는 레지스터와 함께 CPLD를 통해 연결이 다 되어 있기 때문에 우리가 편하게 사용할 수 있는 겁니다.

 - 포트 B : 타이머/카운터나 SPI 기능을 위한 신호들로 동작합니다.

 - 포트 C : 외부 메모리를 인터페이스하기 위한 어드레스 버스의 상위 바이트로 동작합니다.(포트 A 참조)

 - 포트 D : 타이머/카운터나 외부 인터럽트 또는 USART1,TWI 직렬통신 포트 기능을 위한 신호들로 동작합니다.

 - 포트 E : 타이머/카운터나 외부 인터럽트 또는 USART0 직렬 통신 포트, 아날로그 비교기, ISP 기능을 위한 신호들로 동작합니다.

 - 포트 F : A/D 컨버터나 JTAG 인터페이스 기능을 위한 신호들로 동작합니다.

 - 포트 G : 메모리 인터페이스나 타이머/카운터 기능을 위한 신호들로 동작합니다.


이러한 기능들이 있다는 것만 알아두세요 ㅎㅎ 각 기능들의 명칭들은 ATmega128 보드를 구입하신 분이나 아두이노를 구입하신 분들은 해당 포트가 어떤 용도로 이용되는지 명칭들과 함께 적혀있으니 그에 따라 사용하시면 되요.


자 이제 GPIO의 특성에 대해서 대략적으로 이해하셨나요?? 이해하셨다면 이제 실험을 해보러 가죠!! 다음 시간에는 Easy Processor Kit 외부 Dip Switch를 가지고 실험해 보겠습니다.



,
Study/AVR ATmega128 Easy Processor Kit

7. Easy Processor Kit 외부 LED 제어하기

지난번 시간에 이어 이번에도 LED를 제어 해보려 합니다.


하지만 이 LED는 ATmega128 모듈에 붙어있는 것이 아니라 외부적으로 연결되어 있는 LED를 말합니다!!


이처럼 대부분의 마이크로프로세서를 이용한 시스템에는 CPU외에 ROM, RAM, 7Segment, LCD, LED, I/O 등의 주변 소자들이 연결 되어있는 경우가 있어요.


이런 공통 버스들이 충돌되지 않게 하기 위해서는 어드레스 디코딩을 통해 선택신호를 만들게 되는데, 이때 사용되는 레지스터가 MCUCR 입니다!!


 - MCUCR


8bit로 구성되어 있는 MCUCR 레지스터는 MCU의 전체적인 시스템 기능을 설정하는 레지스터에요!


현재 저희는 여기서 맨 앞부분인 8번째 bit인 SRE로 어드레스 디코딩하여 외부 메모리 영역에 접근하게 되는것 입니다!


즉, SRE bit가 1로 셋팅이 되어 있으면 외부메모리 공간을 이용할 수 있는 것이죠.


반대로 0이 되어있으면, 기본 기능인 병렬 I/O 포트(GPIO)로 동작합니다. 


나머지 비트들은 뭐... 쓰일때 있으면 찾도록 하죠!ㅎㅎ 지금은 딱히 쓰일일은 별로 없어보입니다.


외부 메모리 공간에서 주소지정을 하는 어드레스 디코더 역할은 Easy Processor Kit에서 CPLD를 이용하여 구성합니다.


 - CPLD


CPLD는 복합 프로그래밍 논리적 소자인데... 말 그대로 프로그래밍이 가능한 소자인 것 같습니다... ㅎㅎㅎ.. 일단 이쪽으로 공부할 것이 아니고 이것을 이용하는 것이니 외부 메모리 공간에서 주소를 지정하는 어드레스 디코더 역할은 한다고만 알아둡시다!!


위의 회로도를 보게 되면 LED, KEY, LCD, DOT, FND 등등 여러개가 있는데 차근차근 하도록 하죠.


저희가 이용할 외부 LED는 LED_CS라고 적인 31번 I/O네요!!



위 표를 보게 되면 LED_CS는 0x4800에 저장되는 것을 알 수 있습니다!!


 - 외부 LED 회로도


이제 저장되는 것도 알았고 프로그래밍 하기전에 외부 LED 회로도를 살펴 볼까요?



우선 LED가 정방향이므로 이전시간에 배운것과는 반대로 1일때 ON이 된다는 사실을 알 수 있고요~


흠... SN74HC574라는 칩을 통과하네요..


이러한 칩은 무슨 역할을 하는지 알아볼까요??


 - SN74HC574 칩



칩의 블락도 및 테이블을 한번 살펴보죠~


OE에 Low 신호가 입력되면 버퍼에 1의 값이 입력되고, 상승에지일때 D 플립플롭 값이 출력된다. 그럼 플립플롭이란 것을 알 수 있습니다!!

즉 이러한 칩을 이용하기 때문에 마지막 값이 저장되어 있을 수 있는 것이죠. Kit을 껐다 켜도 다시 되는 이유가 이러한 칩 때문입니다~~


그렇다면 이제 0x4800에 데이터를 넣어서 외부 LED를 제어할 수 있겠죠???


 - 실습


AVR Studio 4를 켜 봅시당~



참참!! 외부 LED 위치는 Kit의 중앙쪽에 위의 사진처럼 저렇게 초록색으로 된 LED에요. 그래픽 LCD 밑에 있네요ㅎㅎ



#include <avr/io.h>

#define LED_CS (*(volatile unsigned char *)0x4800) // 외부 LED 메모리 주소값 0x4800 정의


int main()

{

MCUCR = 0x80; // 외부 메모리를 사용하기 위해 MCUCR 레지스터 1000 0000으로 설정

unsigned char data =0x00; // 부호 없는 1Byte data 변수 0x00 초기화

while(1)

{

data = 0x55; // 0x55 data에 지정

LED_CS = data; // 외부 LED 메모리에 0x55 0101 0101 들어가게 되어 LED 작동

}

}


위의 소스코드는 아시겠져?? 0b01010101 이 0x4800 외부 메모리에 들어가서 LED가 아래 사진과 같이 나오게 되는 것입니다!!


이제 컴파일 하시고 USB 연결 후 장비 ON!!


이제 HEX파일 실험장비에 넣어서 프로그램 눌러주시면 아래와 같은 결과가 나오게 됩니다~~!



이렇게 외부 LED 제어를 하게 되었네요~!! 다음시간에는 AVR GPIO 특성들에 대해서 알아보겠습니다.!!


감사합니다~~!!

,
Study/AVR ATmega128 Easy Processor Kit

6. Easy Processor Kit의 ATmega128 모듈의 LED 제어

자!! 이제 실험할 준비를 다 마쳤으니 실험을 해보도록 해볼께요~~!


오늘은 Easy Processor Kit에 ATmega128 모듈에 있는 LED들을 제어해 보도록 할거에요!!


아래 그림과 같이 Easy Processor Kit의 왼쪽편에 빨간 네모부분에 보시게되면 ATmega128 모듈이 있을겁니다. 밑의 사진은 Cortex-M3인데 해당 위치에 ATmega128 모듈이 있을거에요!


 - LED 켜기


모듈에서 오른쪽에 보시게되면 PE2,3 PD4,5 PWM0,1,2,3 이라고 적힌 작은 LED가 보이죠?ㅎㅎ


아래사진에서 오른편입니다!! 이제 이 LED를 켜보도록 하죠!!



그럼 PE PD PWM은 어디있느냐??

ATmega128 핀 회로도를 한번 봅시다!!




초록색 네모상자들이 보이시나요~~? 눈치가 빠르신 분들은 알텐데 이제 이부분을 저희가 통제해주게 된다면 LED에 불이 들어오게 되는것입니다!!!


easy-pro-kit-base-v12.pdf


ATmega128_V1.1.pdf


혹시 필요하신분 있을까봐 Easy Processor Kit의 여러 소자 회로도들을 첨부해 드릴게요.


ATmega128 회로도들을 통해 알았는데 LED회로도도 옆에 있네요!! 그런데 잠깐?? 다이오드 방향이 반대네요!! 아하!! 그렇다면 저희가 LED를 ON 시키려면 0의 값인 Low 값을 주어야한다는 사실을 알게 되었군요!! ㅎㅎ


자 이제 AVR Studio4를 실행하여 소스코드를 짜도록 합시다!


#include <avr/io.h>

 

int main(void)

{

    DDRE = 0xFF;

    PORTE = 0xFF;

    DDRD = 0xFF;

    PORTD = 0xFF;

    DDRB = 0xFF;

    PORTB = 0xFF; // 포트 E, D, B 각각 출력용으로 설정 후 초기값 설정

 

    while(1)

    {

        PORTE = 0x00;

        PORTB = 0x00;

        PORTD = 0x00; // 각 포트들을 LOW로 입력하여 LED를 킴 끌 때는 0xFF로 설정

    }

}


이렇게 간단히 짜면 됩니다!! ㅎㅎ


불 잘들어 오죠?ㅎㅎ



 - LED 반복점멸


이제 응용해서 LED 반복점멸을 해보도록 할까요??


위의 소스에서 딜레이만 넣어주면 되겠죠??ㅎㅎ


AVR 코딩에서 util에 delay가 있어요 ㅎㅎ delay를 편히 쓰기위해 전처리기 해놓은것이죠.


이것을 헤더에 추가해 주십다!!


#include <avr/io.h>

#include <util/delay.h> // delay를 쓰기위한 전처리기

 

int main(void)

{

    DDRE = 0xFF;

    PORTE = 0xFF;

    DDRD = 0xFF;

    PORTD = 0xFF;

    DDRB = 0xFF;

    PORTB = 0xFF; // 포트 E, D, B를 출력용으로 설정 및 초기값 설정

     

    while(1)

    {

        PORTE = 0x00;

        PORTB = 0x00;

        PORTD = 0x00;

        _delay_ms(5000); // 5초동안 LED를 킴

 

        PORTE = 0xFF;

        PORTB = 0xFF;

        PORTD = 0xFF;

        _delay_ms(5000); // 5초동안 LED를 끔

    }

}


이러면 간단하쥬??ㅎㅎ



 - LED 순차점등


자 이번엔 LED를 순차로 점등시켜 볼까요??


이번에도 딜레이와 PORTE, D B를 잘 활용해주면 되겠죠?ㅎㅎ 코드에 답은 없으니 여러분은 여러분 손을 믿고 머리를 믿고 짜시면 되요 ㅎㅎ 저같은 경우는 이렇게 짰네요~~ 참고만 하세요!!


#include <avr/io.h>

#include <util/delay.h>

 

int main(void)

{

    DDRE = 0xFF;

    PORTE = 0xFF;

    DDRD = 0xFF;

    PORTD = 0xFF;

    DDRB = 0xFF;

    PORTB = 0xFF; // 포트 B, D, E 출력용으로 설정 및 초기값 0xFF로 지정

 

    while(1)

    {

        PORTE = 0x08; // 포트 E 제일 위의 LED 켜기위해 0000 1000 지정

        PORTB = 0xFF; // 포트 B는 다 끔

        PORTD = 0xF0; // 포트 D는 다 끔

        _delay_ms(2000); // 위에서부터 1개의 LED 켜진 상태로 2초간 지연

     

        PORTE = 0x00; // 포트 E LED 다 킴

        PORTB = 0xFF;

        PORTD = 0xF0;

        _delay_ms(2000); // 위에서부터 2개의 LED 켜진 상태로 2초간 지연

     

        PORTE = 0x00;

        PORTB = 0xFF;

        PORTD = 0x20; // 포트 D 제일 위의 LED 켜기 위해 0010 0000 지정

        _delay_ms(2000); // 위에서부터 3개의 LED 켜진 상태로 2초간 지연

 

        PORTE = 0x00;

        PORTB = 0xFF;

        PORTD = 0x00; // 포트 D 다 킴

        _delay_ms(2000); // 위에서부터 4개의 LED 켜진 상태로 2초간 지연

 

        PORTE = 0x00;

        PORTB = 0xEF; // 포트 B 제일 위에 LED 켜기 위해 1110 1111 지정

        PORTD = 0x00;

        _delay_ms(2000); // 위에서부터 5개의 LED 켜진 상태로 2초간 지연

 

        PORTE = 0x00;

        PORTB = 0xCF; // 포트 B 위에서부터 2개의 LED 켜기 위해 1100 1111 지정

        PORTD = 0x00;

        _delay_ms(2000); // 위에서부터 6개의 LED 켜진 상태로 2초간 지연

 

        PORTE = 0x00;

        PORTB = 0x8F; // 포트 B 위에서부터 3개의 LED 켜기 위해 1000 1111 지정

        PORTD = 0x00;

        _delay_ms(2000); // 위에서부터 7개의 LED 켜진 상태로 2초간 지연

 

        PORTE = 0x00;

        PORTB = 0x00; // 포트 B 다 킴

        PORTD = 0x00;

        _delay_ms(2000); // 모든 LED 켜진 상태로 2초간 지연

 

        PORTE = 0xFF;

        PORTB = 0xFF;

        PORTD = 0xFF;

        _delay_ms(2000); // 모든 LED 다 끈 상태로 2초간 지연

    }

}



저 사진은6개까지 불이 들어온 상태입니다~ 잘 되쥬??ㅎㅎ


이상 ATmega128 모듈에 있는 LED 제어였습니다!!


다음시간에는 외부 LED를 컨트롤 해보겠습니다.

,
Study/AVR ATmega128 Easy Processor Kit

5. AVR 개요 및 Easy Processor Kit 조사 및 LED 이론

이번 시간에는 AVR에 대한 간략한 개요와 실험장비인 Easy Processor Kit에 대해서 조사해 보겠습니다!!!



 - AVR에 대한 개요


AVR 시리즈 마이크로 컨트롤러는 1997년도에 처음 발표된 8비트 마이크로컨트롤러로서, Atmel사의 대표적인 컨트롤러입니다.


AVR은 Advanced Virtual RISC(Reduced Instruction Set Computer)의 약자이며, RISC 구조의 저전력 CMOS 8bit 마이크로 컨트롤러를 의미합니다.


- 마이크로 컨트롤러 구조

 - AVR의 주요특징

  • 각각 프로그램 메모리와 저장되는 데이터를 갖는 하버드 구조를 갖습니다. 프로그램을 영구적 또는 반 영구적인 메모리에 저장하고, 전압 스파크나 다른 악조건의 환경 요소에 의해 프로그램 메모리에 있는 프로그램이 지워지는 것으로부터 보호 가능하여 제어용 마이크로컨트롤러에서 많이 사용됩니다.
  • 명령어는 16비트 버스 폭의 하드웨어로 처리되지만, 데이터는 8비트 길이 기반으로 처리합니다.
  • CISC 마이크로 컨트롤러보다 10배 이상의 빠른 속도로 실행이 이루어지는 마이크로 컨트롤러입니다.
  • C언어로 제어하기에 코드 집적도가 높습니다.
  • 플래시 메모리와 파라메터 저장용의 EEPROM, 일반 데이터 변수 저장을 위한 SRAM 등이 집적되어 효율성이 높습니다.
  • ISP라는 기법을 통해 시스템 자체 내에 프로그래밍, 디버깅, 검증 등의 편리한 기능을 포함합니다.
  • 1.8 ~ 5.5V의 동작이 가능하며, 저전력 소모에 적합한 다양한 동작 모드를 제공합니다.

- AVR 구조


- 참고용 사진 ATmega128 블락도


더욱더 자세한 내용은 AVR Atmega128 마이크로컨트롤러 프로그래밍과 인터페이싱 책을 참고하세요!!



저는 우선 이책을 참고로 공부하고 있습니다!! 


이렇게 조사를 했으니 이제 실험해볼 LED에 대해서 간략하게 조사해 보겠습니다~~



 - LED에 대한 간단한 이론

 LED는 Light Emitting Diode의 약자로 발광 다이오드를 뜻하며, 반도체로 된 다이오드의 일종입니다. 다이오드는 양전극 단자에 전압을 걸면 한 방향으로만 전류가 주입되고 전자와 정공이 재결합해서 그 일부의 에너지를 빛으로 변환하는 다이오드입니다.


- LED 그림


자 이제 그렇다면 우리가 실험하게 될 Easy Processor Kit에 대해서 조사해 보도록 하죠!


 - Easy Processor Kit 이란?


  • 32bit, 8bit 마이크로프로세서 교육 및 실습용 시스템
  • Cortex-M3, AVR, 8051 프로세서 모듈의 선택 장착
  • Cortex-M3, AVR, 8051의 구조, 어셈블러 및 펌웨어 교육 실습
  • Keil MDK-ARM , WinAVR 컴파일러를 이용한 초기화 코드 분석 실습
  • Assembler 및 C 언어기반 Cortex-M3, AVR, 8051용 프로그램 실습교재 제공
  • 다양한 주변장치 제공(I/O Port, Dot Matrix, Step Motor, LCD, FND, Audio, Keypad, ADC/DAC, etc)

- Easy Processor Kit


- Easy Processor Kit 프로세서 모듈 및 구성도


- Easy Processor Kit 블락도

현재 우리가 사용할 실험장비인 Easy Processor Kit에 대한 내용이었습니다. 이러한 내용은 휴인스 사이트에도 나와있는데요. 더욱더 자세히 살펴볼 분들은 들어가 보세요. 사이트가 http://huins.com/m13.php?m=rd&no=58#cnts 입니다~


전반적으로 이런 장비만 있다면 우리가 이것 저것 실험하는데 엄청 편리 하겠죠??


대학교에서 수업시간에 이러한 장비를 가지고 수업을 할 수도 있으니 참고하세요~!


저도 이 실험장비 가지고 실험을 해서 앞으로 포스팅 하겠습니다!! 물론 J-MOD-128인 ATmega128 모듈도 있으니 이것 가지고도 실험해 볼거에요~


그럼 다음번 포스팅 때 뵙죠!! 아직까지는 더운날씨 조심하시구요~ 안녕~


,
Study/AVR ATmega128 Easy Processor Kit

4. 프로테우스 사용법 (ATmega128 이용)

안녕하세요~~


무더운 여름에 그나마 오늘은 비가와서 날씨가 좀 낫네요ㅎㅎ 날씨가 좋은관계로 이렇게 포스팅하고자 합니다.


이번에는 프로테우스 사용법에 대해서 배워볼껀데요 간단한 LED 예제를 가지고 해보겠습니다.


우선 처음에 저번시간에 깔았던 프로테우스를 실행시켜 주세요!


왼쪽화면에 보시게 되면 p와 L로 되어있는 칸이 보입니다.



자 확대해서 보도록 하죠 ㅎㅎ

여기서 P를 눌러주세요!


그러면 아래와 같은 화면이 뜨게 되는데 우선 Keywords에 ATmega128을 쳐주세요 ㅎㅎ 

그런 다음 해당하는 ATmega128을 더블클릭!


마찬가지로 LED도 검색해서 추가하면 됩니다. 참! LED는 그냥 LED보다는 LED-YELLOW, GREEN 다양하게 있는데 알아서 추가해 주세요 ㅎㅎ



밑의 그림처름 회로도를 구성해 주세요!



여기서 그라운드나 VCC의 위치를 모르겠다 하시는분은 다시 왼쪽 화면에서 빨갛게 표시된 5각형이라고 해야하나? ㅎㅎ 아래 그림에 표시된 아이콘을 눌러줍니다. 그럼 그림과 같은 화면이 뜨게 되는데 여기서 그라운드와 파워를 회로도에 포함시킬수 있어요!



그리고 이제 ATMEGA128에 마우스를 올려 오른쪽클릭 한번! 누르면 빨갛게 표시가 되는데 이제 왼쪽클릭을 해줍니다.


그러면 아래 그림과 같은 설정창이 뜨게 되는데요~ 여기서 Program File에다가 AVR studio에 컴파일했던 HEX 파일의 경로를 넣어줍니다!



이렇게 다 되고 OK!를 누르시고~ 화면 왼쪽 하단에 아래 그림과 같은 것이 있을겁니다.

이제 플레이 버튼을 눌러봅시다!



짠!!! 시뮬레이션이 동작되고 위의 두개 LED에만 불이들어오는 것을 확인할 수 있습니다.


여기서 정지버튼을 눌러야만 회로도를 수정할 수 있어요!!!



참고로 소스코드는

#include <avr/io.h>  // AVR 기본 입출력 관련 헤더파일 포함


int main(void)

{

unsigned char LED_ON; // 변수 LED_ON 선언


DDRB = 0xFF; /* DDRX는 X포트가 출력을 할 것인지 입력을 할 것인지 결정하는 것으로 1값이면 출력, 0값이면 입력. 즉, 이것은 B포트의 모든비트를 출력으로 설정 */

PORTB = 0xFF; // B포트 모든비트를 1로 초기화


while(1) // 반복루프

{

LED_ON = 0x03; // LED_ON이라는 변수에 0000 0011 값 지정

PORTB = LED_ON; // B포트의 LED가 0000 0011으로 변경되어 LED가 0,1번 LED 켜짐

}

}


요런 간단한 것입니다~~ㅎㅎ


이상 프로테우스 간단 사용법이었습니다!!








,
 [ 1 ]  [ 2 ]  [ 3 ] 

최근 댓글

최근 트랙백

알림

이 블로그는 구글에서 제공한 크롬에 최적화 되어있고, 네이버에서 제공한 나눔글꼴이 적용되어 있습니다.

링크

Yuria

카운터

Today :
Yesterday :
Total :