STM8L 해보기 5

 

IAR 정의 파일을 확인 해 보겠다.

 

 

Discover-Debug 메뉴가 있는 곳에서 오른쪽 마우스를 누르면 Option 메뉴가 나온다.

 

 

Option 을 선택 하면 여러 가지 메뉴가 나오는데 중요한 순서대로 정리해보겠다.

Target에서 MCU 종류를 고르고 Code와 Data model을 고른다.

출력 파일 디렉토리를 고른다.

Library를 어떻게 쓸 것인지 정의 한다.

Printf와 Scanf를 어떻게 쓸 것인지 정의 .. 이 함수를 사용 안 할 예정이어서 Small 로 지정 예를 들어 Printf를 많이 써야 한다면 Full 등으로 변경해야 한다.

컴파일러에서 사용한 Stack 과 Heap 을 조정한다. 함수를 많이 쓰거나 내부 변수를 많이 쓸경우 Stack를 늘려주는 것이 좋고 malloc 등을 사용한다면 Heap 을 늘리는 것이 좋다.

주의 할 것은 printf등 일부 함수는 자체적으로 malloc 를 사용하므로 이런 함수 사용시 Heap용량에 주의 해야 한다.

 

C,C++ 사용과 그에 대한 Option을 선택 한다.

압축율을 결정한다.

사용중인 라이브러리의 define header의 위치를 결정해 준다.

Linker 에서 Config의 경우 따로 정의 파일을 사용할 경우 설정해주고 사용 안 하면 정의 하지 않는다.

디버깅용으로 사용한 Tool을 선택 해준다. ST-LINK를 선택 했다.

'공부 > STM8' 카테고리의 다른 글

STM8 관련 국내 사이트  (0) 2012.11.12
[STM8] STM8L 해보기 6  (3) 2012.11.12
[STM8] STM8L 해보기 4  (0) 2012.11.12
[STM8] STM8L 해보기 3  (0) 2012.11.12
[STM8] STM8L 해보기 2  (0) 2012.11.12

 

IAR을 이용한 소스를 한번 만들어서 대략 정인 설명을 해보고자 한다.

처음에 discovery 소스를 이용해서 프로젝트를 만들었다. 늘 그렇듯 이것 또한 복병이 숨어 있었다. 내가 discovery 보드가 없기 때문에 discovery 보드에 관련된 소스를 지우는 것도 …

폴더는 EWSTM8, inc, src, STM8L15x_StdPeriph_Driver, STVD 로 구성했다.

원래에서 변경한 것은 STM8L15x_StdPeriph_Driver를 이동한 것이다.

 

이유는 디렉토리를 하나 압축하면 하나의 프로젝트로 완벽하게 관리하기 위해서다.

 

폴더를 설명해 보면

EWSTM8 : IAR 관련 프로젝트 정의 파일이 있다.

Inc : 코딩중인 Header 파일이 들어 있다.

Src : 코딩중인 Source 파일이 들어 있다.

STM8L15x_StdPeriph_Driver : 표준 라이브러리 파일들이 들어 있다.

STVD : ST Visual Develop 관련 프로젝트 정의 파일이 들어 있다.

'공부 > STM8' 카테고리의 다른 글

[STM8] STM8L 해보기 6  (3) 2012.11.12
[STM8] STM8L 해보기 5  (0) 2012.11.12
[STM8] STM8L 해보기 3  (0) 2012.11.12
[STM8] STM8L 해보기 2  (0) 2012.11.12
[STM8] STM8L 해보기 1  (0) 2012.11.12

 

STM8L 해보기 3

개발 환경을 구축 해보아야 하는데 컴파일러거의 IAR을 사용하는것으로 보인다. 그 외에 ST에서 배포하는 sttoolset 을 깔수도 있다.

인스톨 하면 대표적인 프로그램 2개와 예제 소스 매뉴얼 등인 인스톨 된다.

대표적인 프로그램은 아래와 같아.

ST Visual Develop : 프로젝트 만들어 컴파일하고 디버깅을 지원하는 프로그램

 

ST Visual Programmer : MCU의 FLASH를 쓰고 읽는등 양산용으로 사용하는 프로그램

 

사실 ST Visual Develop은 사용해 보지 않았다. IAR 컴파일러가 잘되어 있어서..

ST Visual Programmer은 양산을 하려면 꼭 필요하다.

 

또 하나 꼭 필요 한 것이 STLINK 다. SWIM 인터페이를 통해서 디버깅을 지원하는데 그 놈 참 똘똘하다. 써본 사람을 알겠지만 소스상태에서 디버깅이 가능하고, 운영 중 메모리나 변수의 값 등을 바로 바로 보면서 디버깅 가능하다.

 

해보지는 않았지만 STM32처럼 BOOT에서 시리얼 다운로드도 지원 한다고 되어 있다.

 

준비를 대충한 상태에서 PDF와 기존 소스만 보고 하려니 참 답답했다. 이때 몇 가지 문서를 발견했는데 꼭 필요한 레퍼런스 자료로 추천한다.

기본적은 MCU 설명이 들어 있는 PDF

자세한 설명과 그 소스가 들어있는 설명서 : stm8l15x_stdperiph_lib_um.chm

 

참고로 터치 관련된 설명과 소스가 들어있는 설명서 : stm8_ts_driver_um.chm

 

전부 ST 사이트에서 받았는데 정확하게 어디서 받았는지는 생각이 안 난다.

 

ST-LINK가 있어야 하는데 V2로 선택하길 바란다. 주의 사항은 전압이나 ESD에 좀 약한 것으로 보인다. USB단자의 불량 등 으로 인해 잘 죽는다고 한다. 나도 한 개 죽여 버리고 다시 산 후에 여러 곳에 바리스터를 덕지덕지 붙였다. 죽어도 A/S 불가니..

'공부 > STM8' 카테고리의 다른 글

[STM8] STM8L 해보기 6  (3) 2012.11.12
[STM8] STM8L 해보기 5  (0) 2012.11.12
[STM8] STM8L 해보기 4  (0) 2012.11.12
[STM8] STM8L 해보기 2  (0) 2012.11.12
[STM8] STM8L 해보기 1  (0) 2012.11.12

 

STM8L 해보기 2

이번에 사용하는 MCU 는 STM8L151 이다. 저전력용이라 예를 들어 리모콘용으로 사용 된다.

스펙을 한번 보면 아래와 같다.

  • Operating conditions

– Operating power supply: 1.65 to 3.6 V

(without BOR), 1.8 to 3.6 V (with BOR)

– Temperature range: -40 to 85 or 125 °C

( 전압범위와 온도범위는 기본적으로 산업용 장비에 사용 가능 하다.)

 

  • Low power features

– 5 low power modes: Wait, Low power run, Low power wait, Active-halt with RTC, Halt

– Ultralow leakage per I/0: 50 nA

– Fast wakeup from Halt: 5 μs

( 저전력으로 사용가능하도록 성계 되어 있다.)

 

  • Advanced STM8 core

– Harvard architecture and 3-stage pipeline

– Max freq: 16 MHz, 16 CISC MIPS peak

– Up to 40 external interrupt sources

(성능 좋은 CORE 같아. 사용하다 보면 Atmega128보다 좋아보인다.)

 

  • Reset and supply management

– Low power, ultrasafe BOR reset with 5 selectable thresholds

– Ultralow power POR/PDR

– Programmable voltage detector (PVD)

 

  • Clock management

– 32 kHz and 1-16 MHz crystal oscillators

– Internal 16 MHz factory-trimmed RC

– Internal 38 kHz low consumption RC

– Clock security system

(내부 발징을 이용해서 사용중인데 생각보다 좋다.)

  • Low power RTC

– BCD calendar with alarm interrupt

– Digital calibration with +/- 0.5 ppm accuracy

– LSE security system

– Auto-wakeup from Halt w/ periodic interrupt

 

  • Memories

– Up to 8 Kbytes of Flash program memory plus 256 bytes of data EEPROM with ECC

– Flexible write/read protection modes

– 1 Kbyte of RAM

  • DMA

– 4 channels supporting ADC, SPI, I2C,

USART, timers

– 1 channel for memory-to-memory

 

  • 12-bit ADC up to 1 Msps/28 channels

– Temp. sensor and internal ref. voltage

 

  • 2 ultralow power comparators

– 1 with fixed threshold and 1 rail to rail

– Wakeup capability

 

  • Timers

– Two 16-bit timers with 2 channels (IC, OC,PWM), quadrature encoder (TIM2, TIM3)

– One 8-bit timer with 7-bit prescaler (TIM4)

– 1 Window and 1 independent watchdog

– Beeper timer with 1, 2 or 4 kHz frequencies

 

  • Communication interfaces

– One synchronous serial interface (SPI)

– Fast I2C 400 kHz

– One USART

 

  • Up to 41 I/Os, all mappable on interrupt vectors

 

  • Up to 20 capacitive sensing channels

– supporting touchkey, proximity touch, linear touch, and rotary touch sensors

 

  • Development support

– Fast on-chip programming and nonintrusive debugging with SWIM

– Bootloader using USART

 

  • 96-bit unique ID

(IC 별로 고유 ID가 있어서 재미있게 사용 가능 하다.)

세그먼트 LCD나 터치 등 다양한 기능이 있는다. 참 저렴한 놈이 별 기능이 다 들어 있다.

'공부 > STM8' 카테고리의 다른 글

[STM8] STM8L 해보기 6  (3) 2012.11.12
[STM8] STM8L 해보기 5  (0) 2012.11.12
[STM8] STM8L 해보기 4  (0) 2012.11.12
[STM8] STM8L 해보기 3  (0) 2012.11.12
[STM8] STM8L 해보기 1  (0) 2012.11.12

 

STM8L 해보기 1

저가의 개발이 편리하고 사이즈가 작은 MCU를 찾았다.

물론 해당하는 MCU 생각보다 많은 건 사실이다. 특히 저가로만 찾을 경우 생각보다 많다.

그런데 개발이 편리하다는 부분에서 많이 문제가 된다.

예를 들어 시리얼로 메시지를 보면서 개발하거나 Flash 등을 구울 때 복잡 하기도 하다.

이런 MCU 개발 할 때 마다 생각하는 것이 컴파일러에서 소스레벨 디버깅을 하면서 개발 하면 얼마나 좋을까 하는 것이다.

내가 MCU를 만지기 시작한 초창기에 많은 MCU들이 있었다. 그 당시 가지고 놀던 MCU는 PIC, 8051, 68xx 등인데 주로 어셈으로 프로그래밍 하고 모든 시물레이션과 디버깅은 머리로 해야 했다.

물론 좋은 점도 있다. MCU의 모든 레지스터를 마스터 하고, 머리가 훨씬 잘 돌아가게 만들어 준다.

하지만 요즘은 제조사가 주는 라이브러리에 컴파일러의 성능만 믿고 개발 하는 경우도 있다.

이번에 STM8L을 쓰게 되었다. STM8L 또한 라이브러리, 컴파일러, STLINK, 만 믿고 개발을 시작하게 되었다.

이 선택은 아직까지 잘된 것 같다는 생각을 하고 있다.

 

레퍼런스 메뉴얼 입니다.  

DM00027749.pdf

'공부 > STM8' 카테고리의 다른 글

[STM8] STM8L 해보기 6  (3) 2012.11.12
[STM8] STM8L 해보기 5  (0) 2012.11.12
[STM8] STM8L 해보기 4  (0) 2012.11.12
[STM8] STM8L 해보기 3  (0) 2012.11.12
[STM8] STM8L 해보기 2  (0) 2012.11.12

 

막 만든 부대찌개

 

부대찌개를 만들기 위해 x마트에서 부대찌개 전용 햄모듬 만 달랑 사가지고 왔다.

어떻게 만들까 고민 중에 집에 있는 모든 제료를 모아 보았다.

 

햄모듬, 라면, 양파, 먹다 얼려놓은 콩 통조림 내용물, 치즈, 고추, 파, 아주 액간의 다시마 국물,국물 제조용 무, 고추가루, 간장, 후추가루, 매실엑기스, 마늘, 생강가루, 설탕, 김치, 올리고당 ….

 

우선 야체를 준비 하고 파,마늘,양파,당근,고추)

 

소스를 준비 한다. (고추가루, 후추가루, 설탕, 생강가루)

 

 

고추가루가 잘 불어 날수 있도록 간장등에 섞어서 잠시 둔다.

(간장, 올리고 당, 매실액기스)

 

육수를 만든다. 원래 다양한 원재료를 이용해야 하나 없는 관계로 간단하게 쇠고기 다시다 와 무를 이용해 만들 었다.

 

준비된 재료를 이쁘게 배치 하고 김치가 없어서 김장하고 남은 속 재료, 총각김치, 치즈를 추가했다.

 

육수를 넣고 그냥 끓여준다.

라면을 투여해 주고

 

 

끝…먹자

 

어찌 보면 잡탕이다.

부대 찌개가 한국 전쟁 당시 먹을 것이 없어서 이것 저것 미군부대에서 나온 것을 잡탕으로 섞어서 만들기 시작했다고 하니 잡탕이라는 표현이 맞을 듯싶다.

 

보기 좋게 전골 전용 그릇이 있으면 좋겠지만 그냥 있는 데로 먹는다.

 

배가 무지 부르다.

 

'생활 > 요리' 카테고리의 다른 글

또띠아 피자 만들기  (0) 2012.11.19
바다에서 잡은 낙지요리  (0) 2012.11.12
가오리(?) 찜 요리  (0) 2012.11.12
바다 장어 요리  (0) 2012.11.12
마이크로 캡슐 요리하기  (0) 2012.11.09

 

SOURCE 공개

 

1. I2C용 RTC S3530A 루틴

 

//-------- S3530A STATUS REG -----------

#define    S3530_REG_INT2FE_BIT    0x01        //INT2 level interrupt set

#define    S3530_REG_INT1FE_BIT    0x02        //INT1 level interrupt set

#define    S3530_REG_INT2ME_BIT    0x04        //INT2 edge interrupt

#define    S3530_REG_INT1ME_BIT    0x08        //INT2 edge interrupt

#define    S3530_REG_INT2AE_BIT    0x10 //INT2 interrupt output enable(1), disabled(0).

#define    S3530_REG_INT1AE_BIT    0x20 //INT1 interrupt output enable(1), disabled(0).

#define    S3530_REG_1224_BIT    0x40 //12(0), 24(1) time mode set

#define    S3530_REG_POWER_BIT    0x80 //Power Status, Normal(1), Fail(0)

 

typedef    struct{    

        _uchar    your;

        _uchar    mon;

        _uchar    day;

        _uchar    day_week;

        _uchar    time;

        _uchar    min;

        _uchar    sec;

        _uchar    reg;

        

}_rtc;

 

 

xdata _rtc rtc_temp;    //data를 읽은 원본,data를 저장할때 쓰는 버퍼

xdata _rtc rtc;

 

void rtc_time_read()

{

    i2c_start();

    i2c_write(0x65);      //access 1 mode

    rtc_temp.your = i2c_read(YES);

    rtc_temp.mon = i2c_read(YES);

    rtc_temp.day = i2c_read(YES);

    rtc_temp.day_week = i2c_read(YES);

    rtc_temp.time = i2c_read(YES);

    rtc_temp.min = i2c_read(YES);

    rtc_temp.sec = i2c_read(NO);

    i2c_stop();

 

    //data 가공

    rtc_temp.your = by_byte(rtc_temp.your);

    rtc_temp.mon = by_byte(rtc_temp.mon);

    rtc_temp.day = by_byte(rtc_temp.day);

    rtc_temp.day_week = by_byte(rtc_temp.day_week);

    rtc_temp.time = by_byte(rtc_temp.time);

    if(rtc_temp.time & 0x80) //상위 bit 1이면 12시간 제의 오후

    {

        rtc_temp.time = rtc_temp.time & 0x7F;

        //rtc_temp.time = rtc_temp.time + 11; //24시간 형태로 변경

        

    }

 

    rtc_temp.min = by_byte(rtc_temp.min); //Control register

    rtc_temp.sec = by_byte(rtc_temp.sec) & 0x7F; //Control register

 

    //data 버퍼에 복사

    rtc.your= rtc_temp.your;

    rtc.mon= rtc_temp.mon;

    rtc.day= rtc_temp.day;

    // //p_sts.rtc_time[3] = rtc.day_week = rtc_temp.day_week;

    rtc.time = rtc_temp.time;

    rtc.min = rtc_temp.min; //Control register

    rtc.sec = rtc_temp.sec; //Control register

 

 

}

 

/*

* 레지스터 내용

* bit 7 : 1(전원 들어옴) ,read only

* bit 6 : 0(12시간제) , 1(24시간제)

* bit 5 : /INT1 동작, 0(동작안함), 1(동작함)

* bit 4 : /INT2 동작, 0(동작안함), 1(동작함)

* bit 3 : 인터럽트 동작 설정 찾아서 해보길

* bit 2 :

* bit 1 :

* bit 0 :

*/

 

void rtc_reg_read()

{

    i2c_start();

    i2c_write(0x65);      //access 1 mode

     _nop_ ();

    rtc_temp.reg = i2c_read(NO);

    _nop_ ();

    i2c_stop();

    rtc.reg = by_byte(rtc_temp.reg); //Control register

 

}

 

//RTC 데이터 쓰기.....

void rtc_time_write()

{

 

    rtc_temp.your = by_byte(rtc_temp.your);

    rtc_temp.mon = by_byte(rtc_temp.mon);

    rtc_temp.day = by_byte(rtc_temp.day);

    //rtc_temp.day_week = by_byte(rtc_temp.day_week);

    rtc_temp.time = by_byte(rtc_temp.time);

    rtc_temp.min = by_byte(rtc_temp.min);

    rtc_temp.sec = by_byte(rtc_temp.sec);

 

 

    i2c_start();

    i2c_write(0x64);      //access 1 mode

     _nop_ ();

     _nop_ ();

    i2c_write(rtc_temp.your);

     _nop_ ();

     _nop_ ();

    i2c_write(rtc_temp.mon);

     _nop_ ();

     _nop_ ();

    i2c_write(rtc_temp.day);

     _nop_ ();

     _nop_ ();

    i2c_write(rtc_temp.day_week);     //주의 어떻게 될지 모름

     _nop_ ();

     _nop_ ();

    i2c_write(rtc_temp.time);

     _nop_ ();

     _nop_ ();

    i2c_write(rtc_temp.min);

     _nop_ ();

     _nop_ ();

    i2c_write(rtc_temp.sec);

     _nop_ ();

     _nop_ ();

    i2c_stop();

 

}

 

// RTC초기화 부분.. 상태register 에 쓰는부분....

void rtc_reg_write()

{

    rtc_temp.reg = by_byte(rtc_temp.reg);

 

    i2c_start();

    i2c_write(0x62);      //access 1 mode

     _nop_ ();

     _nop_ ();

    i2c_write(rtc_temp.reg);

     _nop_ ();

     _nop_ ();

    i2c_stop();

}

 

void rtc_init()

{

    rtc_temp.reg = S3530_REG_1224_BIT;    //rtc초기화

    rtc_reg_write();

}

 

//상위비트와 하위 비트를 바꾸어 준다.

unsigned char by_byte(unsigned char in_data)

{

    unsigned char i,temp_data, out_data = 0;

    bit k;

 

    for(i=0 ; i<8 ;i++)

    {

 

        k = ((in_data & 0x80) ? 1 : 0); //msb data

        in_data <<= 1;     // Shift the byte by one bit

        temp_data = 0;

        temp_data |= k;        //lsb data

        temp_data <<= i;

        out_data |= temp_data;

    }

 

    return out_data;

}

'공부 > 8051' 카테고리의 다른 글

[ADUC831] ADUC831 간단 매뉴얼 2  (0) 2012.11.12
[ADUC831] ADUC831 간단 매뉴얼 1  (0) 2012.11.12
[ADUC812] ADUC812 설명 7  (0) 2012.11.10
[ADUC812] ADUC812 설명 6  (0) 2012.11.10
[ADUC812] ADUC812 설명 5  (0) 2012.11.10

 

SOURCE 공개

1. 공개 I2C 처리루틴

 

#define HIGH                1

#define LOW                0

 

#define TRUE                1

#define FALSE                0

 

//------------------------------------------------------------------------------

// I2C Functions - Master

//------------------------------------------------------------------------------

//------------------------------------------------------------------------------

//     Routine:    i2c_init

//    Inputs:    none

//    Outputs:    none

//    Purpose:    Initialize I2C for the ADu812C

//------------------------------------------------------------------------------

void i2c_init (void)

{

                    // To initialize we need the output

                    // data high, the clock high, and

                    // the I2C system in Master mode

    I2CM = HIGH;            // Set master mode

    MDO = HIGH;            // Set the data bit to HIGH

    MDE = FALSE;            // We are not using the pin yet

    MCO = HIGH;            // Set the clock bit to HIGH

}

 

//------------------------------------------------------------------------------

//     Routine:    i2c_start

//    Inputs:        none

//    Outputs:    none

//    Purpose:    Sends I2C Start Trasfer - State "B"

//------------------------------------------------------------------------------

void i2c_start (void)

{

                // An I2C start sequence is defined as

                // a High to Low Transistino on the data

                // line as the CLK pin is high

    MDE = TRUE;        // Master Mode Data Output Enable: ON

    MDO = HIGH;

    MCO = HIGH;

    MDO = LOW;        // Master Mode Data Output: LOW

    MDO = LOW;        // Repeat for delay

    MCO = LOW;        // Master Mode Clock Output: LOW

}

 

//------------------------------------------------------------------------------

//     Routine:    i2c_stop

//    Inputs:        none

//    Outputs:    none

//    Purpose:    Sends I2C Stop Trasfer - State "C"

//------------------------------------------------------------------------------

void i2c_stop (void)

{

                // An I2C start sequence is defined as

                // a Low to High Transistino on the data

                // line as the CLK pin is high

    MDE = TRUE;        // Master Mode Data Output Enable: ON

    MDO = LOW;        // Master Mode Data Output: LOW

    MCO = HIGH;        // Master Mode Clock Output: HIGH

    MCO = HIGH;        // Repeat for delay

    MDO = HIGH;        // Master Mode Data Output: LOW

}

 

//------------------------------------------------------------------------------

//     Routine:    i2c_write

//    Inputs:        output byte

//    Outputs:    none

//    Purpose:    Writes data over the I2C bus MSB -> LSB write

//------------------------------------------------------------------------------

bit i2c_write (unsigned char output_data)

{

    unsigned char index;

                    // An I2C output byte is bits 7-0

                    // (MSB to LSB). Shift one bit at a time

                    // to the MDO output, and then clock the

                    // data to the I2C Slave

 

    MDE = TRUE;            // Master Mode Data Output Enable: ON

    for(index = 0; index < 8; index++)     // Send 8 bits out the port

    {

    // Output the data bit to the EEPROM

        MDO = ((output_data & 0x80) ? 1 : 0);

        output_data <<= 1;     // Shift the byte by one bit

        MCO = HIGH;         // Clock the data into the EEPROM

        MCO = HIGH;         // Repeat for delay

        MCO = LOW;                    

    }

 

    MDE = FALSE;            // Put data pin into read mode

    MCO = HIGH;            // Get ACK bit

    if (!MDI)

    {

        MCO = LOW;        // Clock Low

        return TRUE;        // ACK from slave

    }

    else

    {

        MCO = LOW;        // Clock Low

        return FALSE;        // No ACK

    }

}

 

//------------------------------------------------------------------------------

//     Routine:    i2c_read

//    Inputs:        send_ack (if TRUE send the ACK signal)

//    Outputs:    input byte

//    Purpose:    Reads data from the I2C bus MSB -> LSB read

//------------------------------------------------------------------------------

unsigned char i2c_read (bit send_ack)

{

    unsigned char index, input_data;

 

    input_data = 0x00;

 

    MDE = FALSE;                // Put data pin into read mode

    MCO = LOW;                // Set clock LOW

 

    for(index = 0; index < 8; index++)     // Get 8 bits from the device

    {

    input_data <<= 1;            // Shift the data right 1 bit

        MCO = HIGH;            // Clock the data into the register

        MCO = HIGH;            // Repeat for delay

        MCO = LOW;                            

        input_data |= MDI;        // Read the data bit

    }

    

    MDE = TRUE;                // Put data pin into write mode

    if (send_ack) MDO = LOW;        // Set data pin LOW to Ack the read

    else MDO = HIGH;            // Set data pin HIGH to Not Ack the read

 

    MCO = HIGH;                // Set the clock pin HIGH

    MCO = HIGH;                // Repeat for delay

    MCO = LOW;                // Set the clock pin LOW

    MDO = LOW;                // Set the data pin LOW

    MDO = LOW;                // Repeat for delay

    MDE = LOW;                // Put data pin into read mode

 

    return input_data;

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'공부 > 8051' 카테고리의 다른 글

[ADUC831] ADUC831 간단 매뉴얼 1  (0) 2012.11.12
[ADUC812] ADUC812 설명 8  (0) 2012.11.10
[ADUC812] ADUC812 설명 6  (0) 2012.11.10
[ADUC812] ADUC812 설명 5  (0) 2012.11.10
[ADUC812] ADUC812 설명 4  (0) 2012.11.10

+ Recent posts