2011년 4월 30일 토요일

작업 일지

일이 안되니깐 필요 이상으로 생각이 빡빡해 진다.

내가 생각해도 못된 짓 같다.

에휴 해보는데 까지 해보고 안되면 말자.

스테이트 다이아 그램 다시 설계하고 합성해 보니 디바이스의 용량이 모자라다.

그래서 다시 구상하고 간당간당하게 합성에 성공했다.

물론 지금은 집이라 디바이스에 심어보고 해보지 안아서

많은 것이 걱정된다.

Xilinx ISE로 합성하고 나서 항상나오는 리포트의 수치들이 너무도 거슬린다.

그래서 찾아 보고 변역해 보았다.


  • Pad to Pad (tPD)


입력 패드에서 시작해서 출력 패드로 끝나는 패드와 패드사이의 경로를 보고한다.

외부 패드에서 패드까지의 경로에서 생기는 최대 시간지연.

Combinational 패드에서 패드까지의 경로는 입력 패드에서 시작하고,
하나또는 그 이상의 계층의 combinational 로직으로 전달되어,
출력 패드에서 끝난다.


combinational 경로는 또한 삼상(High, Low, Hi-z상태를 갖는)으로 제어되는 패드의 인에이블 입력을 통해 생성된다.

Combinational 경로는 클럭, 레지스터의 비동기적인 set, reset입력을 통해서 영향받지 않는다. 이 경로는 양방향 핀에서 단절된다.


  • Clock Pad to Output Pad (tCO)


외부의 클럭 패드에서 출력 패드로까지의 최대 시간 지연.

레지스터의 클럭입력으로 영향받는 입력에서 시작해서 출력 패드에서 끝난다.

경로는 레지스터의 PRE/CLR를 통해서 영향받지 말아야한다.

2011년 4월 29일 금요일

Tip for Verilog Coding

if (read_addr == write_addr)

if (~|(read_addr^write_addr))

위의 두가지를 CPLD에서 실행해 보면 차이가 확연해 짐을 느낄 수 있다.

밑의 것이 훨씬 낳은 결과를 얻을 수 있다.

왠지 모르겠다. 아마도 optimization가 아직까지 똑똑하지 않은 것 같다.

2011년 4월 20일 수요일

농진청 및 구로 유통단지 방문

  • T-ray에 관한 세미나
아직 emitter와 detector의 한계가 많지만, 관련 동향을 주시하는 차원에서 들어둠. 나에게 T-ray에 대한 관심은 아직은 시기 상조 같음. 앞으로 다른 장비와 견주어 비슷한 수준이 되면 고려해 볼만하다고 생각함. 하지만 아직은 아님.

  • FFC 케이블(0.5mm pitch, 30pin, 80mm length x 3) 샘플
구매처 : 엔텍 (www.ntechkorea.com, 02-2101-3316, 구로 중앙유통단지 바동 3316) 이상규 과장님. PP응대도 가능하다시며 일주일전에는 주문해야 구할 수 있다고 하심. 친절함.

  • TFT OLED LCD (1.5" )
가나테크시아(www.ganasys.co.kr, 02-2681-5616, 구로 중앙유통단지 라동 3106) 이난숙대표, 현재 유통되고 있는 물건중에는 없고 낱개나 불용자재만 있다고 하여 바로 물건은 구하지 못했지만 나중에 다른 크기의 LCD나 혹은 공부차원에서 샘플 구매에 응대해 주시겠다고 약속하심. 친절하게 응대해주어 다시 컨택해 볼것.

2011년 4월 19일 화요일

windows printer device driver

  • genprinter : 마이크로 소프트웨어에서 제고하는 프린터 드라이버 예제
 사용자 모드의 DLL인 프린터 프로세서에 관한 내용으로 스풀링된 데이터를 프린트 모니터에 전송될 수 있는 형식으로 변경하는 기능을 하고 있다.
참조 : http://msdn.microsoft.com/en-us/library/ff549907%28v=vs.85%29.aspx

  • PrintMirror : 오픈 소스로 제공되는 PDF 생성기와 같이 동작하는 가상 프린터 드라이버
참고 : http://sourceforge.net/projects/printmirror/   http://mskyt.tistory.com/16 

  • 윈도우즈 프린터 디바이스 드라이버의 소개
윈도우즈 2000 이후의 프린터 디바이스의 아키텍쳐는 스풀러와 프리터 드라이버의 모음으로 이루어진다. 디바이스에 종속적인 함수를 호출 함으로써, 응용프로그램은 프린트 작업을 생성하고 많은 디바이스에 전송할 수 있다. (레이져 프린터, 벡터 프로터, 라스터 프린터, 팩스 전송기)

프린터 드라이버는 렌더링 부분과 설정부분으로 구성되어져 있다. 렌더링 부분은 응용프로그램의 그래픽 명령을 프린터가 페이지의 영상을 렌더링하기위해서 사용하는 데이터 형식으로 변환한다. 설정 부분은 사용자가 프린터의 선택가능한 부분을 조절할 수 있도록 해주는 사용자 인터페이스 부분과 프린터의 설정과 응용프로그램의 제원을 통신할 수 있는 프로그램 인터페이스를 포함한다.

마이크로소프트사의 Win32 GDI 응용프로그램이 프린트할때, Win32 API에 있는 GDI 함수가 호출된다. 이 함수들은 정보를 GDI 그래픽 엔진에 전달한다. GDI 그래픽 엔진은 enhanded metafile (EMF) 파일로써 그리기 명령을 저장하거나, 프린터 드라이버와 함께 스풀러에 보낼 수 있는 프린트 가능한 영상으로 렌더링을 한다. 스플러 부분들은 EMF 파일을 해석하고 페이지 모양세 정보와 작업을 제어하는 지시를 데이터 흐름에 넣을 수 있다. 그런다음 스플러는 데이터 흐름을 대상 프리터의 IO 포트와 연관되는 시리얼, 병렬 혹은 네트워크 포트 드라이버에 보낸다. 게다가 XPS 장치로 프린트를 한다면, GDI 프린트 명령어들은 GDI를 통해서 XPS 변환요소로 변환된다. 프린트 작업은 XPS 프린트 경로로 보내어 진다.

윈도우 비스타와 윈도우 7상에서의 XPS 프린터 경로에있는 프린터 드라이버는 XML Paper Specivication (XPS)에 기반하여 작성된다. Microsoft Win32 XPS 응용 프로그램이 프린트를 할때, 응용프로그램은 XPS 프린트 API에 있는 XPS 함수를 호출한다. XPSDrv 프린터 드라이버와 큐로 프린트 할때, 스플러는 렌더링과 출력을 위해서 XPS 스플 파일을 드라이버로  바로 전달한다. XPS 파일은 GDI 장치로 프린트 되어 질때, XPS를 통해서 EMF 파일은 GDI Conversion Module로 변환된다. 그리고나서 Win32 GDI 응용프로그램과 비슷한 방식으로 GDI 프린트 경로로 전달된다.

윈도우 비스타와 윈도우 7에서 Windows Presentation Foundation (WPF) 응용프로그램들은 XPS 문서를 XPS 스플 파일 형식으로 스플러에 저장하기위해서 WPF 프린터 지원 함수를 호출한다. Win32 XPS 응용프로그램으로 부터 프린트 할때와 마찬가지로, 스플러가 XPSDrv 프린터 드라이버와 프린트 큐로 프린트할때, 스플러는 렌더링과 프린터로 출력하기 위해서 원본 형식으로 스플된 문서를 XPSDrv 프린터 드라이버로 전달한다. 스플러가 GDI 기반의 프린터로 프린트 할때, 버전 3 프린터 드라이버, 스플러는 XPS 스플 파일 형식으로된 데이타를 EMF파일로 변환하기우해서 GDI Conversion Module로 전송한다. 그리고나서 프린팅을 위해서 GDI 기반 프린터 드라이버로 데이터를 전송한다. 이 데이터 흐름에 대한 좀더 자세한 내용은 Microsoft Windows Vista Print Path Overview를 보라. XPS에 대한 좀더 자세한 내용은 Microsoft XPS Web 사이트를 보라.

스플러와 드라이버 요소는 대체되어질 수 있다. 그래서 하드웨어 제조사들은 쉽게 새로운 하드웨어에 대한 지원을 추가 할 수 있다. 프린트 스플러와 드라이버 요소에 대한 좀더 자세한 내용은 다음 섹션을 보라:

Print Spooler Architecture
Print Driver Architecture

새로운 프린터에 대한 지원은 보통 Microsoft가 지원하는 프린터 드라이버중 하나를 가지고 새로운 데이터를 생성하는 것만 요구한다.  좀 더 자세한 정보는 Printer Driver Overview 를 보라. Microsoft Universal Printer Driver 와 Microsoft Postscript Print Driver 의 동작을 수정할 수 있다. 좀더 자세한 내용은 Customizion Microsoft's Printer Driver를 보라. 그리고 윈도우 2000과 그 이후의 프린터 스플러를 수정할 수도 있다. Customizing Print Spooler Components.

다른 섹션들은 다음 사항을 다룬다.

Terminal Server Printing
USB Printing
Bluetooth Printing
Printer Driver Testing and Debugging

다기능 프린터(MFP)에 대한 드라이버를 작성하고자 한다면, Windows Hardware and Device Central(WHDC) 웹사이트에 있는 Multifunction Printer Design Recommendations를 보라. 전형적인 다기능 프린터는 프린트와 복사, 그리고 팩스 주고 받기, 문서 스캔을 할 수 있다. 좀더 자세한 프린터 드라이버 디자인, 개발, 테스트는  Printing Architecture and Driver Support를 보라.


참조 : http://msdn.microsoft.com/en-us/library/ff551767%28v=VS.85%29.aspx

2011년 4월 17일 일요일

이 몹쓸 몸뚱아리 같으니라구

이제는 보기힘든 구조의 플롯.

피가 난자한 칼싸움, 회심의 절권치기,

왜  훔쳤는지 으심스런 더럽게 맛없어 보이는 풍듀.

어처구니없이 재밌다.



(beastie boys - body movin)

병아리야 날아봐~

쓰리 J이라고 들어는 봤나. Jim Morrison, Janis Jopline, Jimmy Hendrix....

J로 시작하는 사람은 30세 이전에 죽는다는.

나도 이런 노래만 듣다간 30 넘기기 힘들거라 생각해서

남은 인생 착실하게 살거라 맘 먹었건만

이제는 훌쩍 넘어 버렸다.


(Jimmy Hendrix - Little Wing)

삼춘

Unkle

원래는 라디오헤드의 새 앨범 소식이 너무도 없던차에

한 곡이나마 유일하게 들을 수 있었던 그래서 기억하는 이름

이 곡의 영향으로 노숙자들을 유심히 살펴보는 버릇이 생겨서

같이 다니던 사람들이 눈 마주치치말라고 충고 하곤 했었는데.

나에게 나름 노숙자에 대한 인권신장에 일조한 곡.


Stone Roses의 까칠해 보이는 이안 브라운의 노래도 괜찬음.

뉴욕에 가서 기억나는건 꾀째재한 지하철뿐 이곡처럼 그리 음산하진 안았지만.

정말 더럽고 찝찝했던 기억이. 첨엔 엄청 쫄았다 뉴욕서 지하철 타면 목숨 내놓고

타야하나해서 심지어 흑인이라도 만나면 어쩌나 했는데

오히려 나에게 다가와서 짝퉁 시계있다고 어깨를 치며 너스레를 떨었던 기억이 있다.

안 좋았던 기억은 뭐 랩퍼 같이 생긴놈한테 공씨디 같은걸 거의 강재로 구매했었 것 정도.

프라이머스

어렸을때 이게 뭔가 싶어 무섭기 까지 했었는데.

이젠 웃음이....

매먼 퍼포먼스까지 다 계획하시는거 같던데 이제는 소식 듣기가 힘드네



the primus - mr. krinkle



Primus - Wynona's Big Brown Beaver

진화 좀 하자!

립스틱, 권총, 하이힐, 핸드백, 컴퓨터, TV, 자동차, 석유, .....

에디베더의 인디언의 우는 소리같은 목소리





(Pearl Jam - Do Evolution)

사내 자식이 울면 쓰겠니?

단순 조악한 구성의 중독성.

사우스 파크에서 우호적이었던 몇 안되는 밴드.

내 기억속의 역사에서 스모키 화장의 원조.

역시 내 기억속 필라멘트 머리의 원조.

양놈들도 사내 자식은 울면 안되나 보다.


작업일지

우선 3CCD 카메라 개발중 PCB까지 작업이 완료되었다.

앞으로 칩의 솔더링하는 작업을 마무리 하고,

카메라의 동작을 확인하기위해서 작성 해놓은 프로그램을 개선해야한다.

그리고 가장하기 싫은 글짓기 작업; 논문 쓰기도 조금씩 시작하자.

또 영어 공부도 해야 졸업도 하고 장가도 가고 취직도 하지.

지금 당장 오늘 모의 영어 시험 보고 온거 틀린 것 다시 풀어 봐야 겠다.

영어 싫다......

2011년 4월 12일 화요일

FreeRTOS on LPC17xx 분석

  • Runtime Library의 구성
    • CMSIS(Cortex Microcontroller Software Interface Standard)
    • Microcontroller Startup code for use with Red Suite
    • Main() 루틴

    • CMSIS의 구성
      • startup_LPC17xx.s
        • __cs3_heap_start, __cs3_heap_end : Heap_Size(0x00001000) 만큼 할당된 Heap 영역의 초기주소와 마지막 주소
        • __cs3_interrupt_vector_cortex_m : 스택영역의 최상위 주소, 리셋 및 인터럽트 핸들러가 정의된 vector
        • _cs3_stack_mem, __cs3_stack_size : Stack_Size(0x00000100) 만큼 할당된 Stack 영역의 초기주소와 크기
        • __cs3_reset_cortex_m : 리셋 핸들러 (rom모드일 경우 __bss_start__에서 __bss_end__까지의 영역을 0으로 초기화 한후 SystemInit() 처리와 main()으로 분기, ram모드일 경우 SystemInit() 처리와 _start로 분기)
        • Default_Handler : 지정되지 않은 (“B .”)재자리 분기의 IRQ 핸들러로써 LPC17xx내에 있는 모든 IRQ 핸들로의 초기상태가 되도록 한다.
      • system_LPC17xx.c
        • SystemInit() : Clock, PLL, Flash 설정 및 SCB(System Control Block)의 Vector table Offset설정
      • core_cm3.c
        • cortex에 관련된 정의와 cortex시스템 코어 제어루틴들 (가령 인터럽트 활성/비활성 기능과 Processor 상태 점검 기능) 이 정의되어 있으나 현재 RealView의 컴파일러만 지원한다. GCC는 cortex 관련 정의만 사용한다

    • Microcontroller Startup code for use with Red Suite
      • r_startup_lpc17.c 
        • __USE_CMSIS을 정의하여 CMSIS내에 포함된 system_LPC17xx의 기능을 사용함
        • g_pfnVectors을 .isr_vector 섹션에 생성한다. CMSIS에 존재하는 __cs3_interrupt_vector_cortex_m  벡터 테이블과 일대일 대응하는 항목으로 채워져 있다.
        • ResetISR()
          • g_pfnVectors의 리셋 핸들러 항목에 채워져 있음
          • _etext영역 이후의 데이터 영역에 해당하는 내용들을 SRAM(LPC17xx의 내부 메모리)의 _data부터 _edata까지의 영역에 복사
          • bss영역을 0으로 초기화
          • __USE_CMSIS가 정의되 있다면 CMSIS내에 포함된 SystemInit()루틴을 수행함
          • Main()루틴을 수행함

    • CMSIS와 FreeRTOS의 공생

      • 서로 동일한 내용을 담고 있는 상충되는 두 vector 테이블인 .isr_vector섹션에 있는 g_pfnVectors과 CMSIS라이브러리의 __cs3_interrupt_vector_cortex_m 벡터를 차이점을 파악하고 조정하고 대체할 수 있는 방법을 모색하자. Linker 스크립트의 수정이 반듯이 필요하다.

    • FreeRTOS와 newlib의 공생

      • FreeRTOS의 소스구조를 살펴보면 memory 할당자를 자체적으로 가지고 있다. 그레서 종종 malloc을 사용할 때 Bus-Fault를 발생시키거나 예기치 않은 동작을 할때가 있다. 이것은 컴파일러가 가지고 있는 자체 malloc이 동작하기 때문인데 FreeRTOS를 컴파일 할때는 Makefile에 CFLAGS += -DMALLOC_PROVIDED를 추가해서 newlib에 있는 malloc이 동작하지 않도록 할 수 있다. - 출처 : http://michaldemin.wordpress.com/2010/03/09/freertos-newlib-on-cortex-m3/

    • Port.c의 Macro 분석

      • portNVIC_SYSTICK_CTRL - STCTRL (System Timer Control and status register)
        • portNVIC_SYSTICK_CLK - System Tick clock source selection. (when 1, the CPU clock is selected. When 0, the external clock pin (STCLK) is selected.
        • portNVIC_SYSTICK_INT - System Tick interrupt enable
        • portNVIC_SYSTICK_ENABLE - System Tick counter enable
      • portNVIC_SYSTICK_LOAD  - STELOAD (System Timer Reload value register) 24bits register
      • portNVIC_INT_CTRL – ICSR (Interrupt Control and State Register)
        • portNVIC_PENDSVSET – PendSV set-pending bit (Write: 0 = no effect, 1 = changes PendSV exception state to pending), (Read: 0 = PendSV exception is not pending, 1 = PendSV exception is pending)
      • portNVIC_SYSPRI2 - SHPR3 (System Handler Priority Register)

    •  Port.c의 함수 분석

      • 인터럽트 핸들러
        • xPortPendSVHandler - context switching 을 위한 Task의 TCB(Tack Content Block)를 복구
        • xPortSysTickHandler - vTaskIncrementTick을 주기적으로 구동 시킴(실질적인 Task 전환이 이루어짐)
        • vPortSVCHandler
      •  인터럽트 설정 : prvSetupTimerInterrupt
        • *(portNVIC_SYSTICK_LOAD) = ( configCPU_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL; :  SysTick의 주파수를 설정하기 위한 CPU클럭 카운트 값(configTICK_RATE_HZ 값은 1000으로 설정되어 있음. 즉 1Khz = 1ms당 한번씩 SysTick이 구동됨)
        • *(portNVIC_SYSTICK_CTRL) = portNVIC_SYSTICK_CLK | portNVIC_SYSTICK_INT | portNVIC_SYSTICK_ENABLE; : SysTick 의 활성화, 인터럽트 활성화, 그리고 구동 클럭 CPU의 클럭으로 설정
      •  스택 초기화 함수: pxPortInitialiseStack – 스택에서 Task가 사용할 위한 공간을 확보한 후 스택의 주소를 되돌려줌
      • xPortStartScheduler 
        • xPortPendSVHandler 와 xPortSysTickHandler 의 우선순위를 설정
        • prvSetupTimerInterrupt : xPortSysTickHandler 구동을 위한 설정
        • uxCriticalNesting : 스케쥴링의 활성 혹은 비활성화를 위한 nesting 변수 (초기값 0)
        • vPortStartFirstTask의 구동 (스택주소 로딩, 전역 인터럽트 활성화 등의 Pumping 작업을 함)
      • vPortEndScheduler - Schedule한 후 처리작업 (Cortex M3에서는 필요없는 작업)
      • vPortYieldFromISR - 강제적으로 context 전환을 이루도록 함
      • vPortEnterCritical - 인터럽트를 비 활성화 시키고, uxCriticalNesting값을 증가 시킴
      • vPortExitCritical - 인터럽트를 활성화 시키고 uxCriticalNesting값을 감소 시킴

      2011년 4월 6일 수요일

      LPC17xx를 위한 개발 환경 구성하기

      * Java Runtime Environment (Eclipse 를 구동하기 위해서 필요함)

       버전이 1.6.0_01이상인지 확인하자
      # jave -version

      버전이 낮은 경우 Java Runtime Environment (JRE) 를 다시 설치하자

      * CodeSourcery Toolchain

       codesoucery.com에 가서 해당 컴퓨터의 시스템에 알맞은 toolchain을 내려받아 설치하자
      기본적으로 설치되는 경로는 C:/Program Files/CodeSourcery/Sourcery G++ Lite 로 되어 있는지 확인하자. 그렇지 않을 경우 해당경로를 기억하여 앞으로 설명할 경로를 변경해서 적용하도록하는 것을 염두해두자.

      * C/C++ Eclipse IDE

       Eclipse IDE for C/C++ Deverlopers라는 다운로드 항목을 선택하여 내려받고 설치하자.

      * Zylin CDT plugin for Eclipse (Eclipse를 통해서 디버깅을 하기위한 plugin)

      Eclipse를 통해서 보드와 통신해가면서 디버깅을 수행하기 위해서 필요한 플러그인이다.
      내려받은 Eclipse버전에 따라서 Zylin CDT 플러그인이 없을 경우도 있다.

      Eclipse의 Help 메뉴 밑에 버전에 따라 다르겠지만 install New Software라는 항목을 선택하자.


      "Available Software Sites"라는 문장을 선택하자.


      위의 그림과 같이 선택된 4개의 사이트가 추가 되었는지 확인하고 없다면 추가하도록 하자.
      그럼 다시 install New Software 다이얼로그 화면으로 되돌아 가서 Work with라고 이름 붙여진 Edit Box에서 --All Available Sites--라는 항목을 선택하고, 사용가능한 Software 항목들이 나열되는 것을 살펴 볼 수 있다.


      다음은 현재 설치된 플러그인 항목들이다.


      zylin CDT를 설치하기 위해서 Eclipse Update 주소를 http://www.zylin.com/zylincdt 로 변경해야한다. 바뀐것 같다.

      * Wiggler 환경 설치하기 (JTAG을 통한 하드웨어 디비깅 장비)

      Wiggler라는 프린터 포트에 연결하는 초기의 하드웨어 디버깅 장비를 사용하기 위한 환경설정이다. 요즘은 프린터 포트가 없는 컴퓨터가 많기 때문에 불필요하게 느껴질 수 있지만, 많은 부분이 다른 디버깅 장비 사용에 필요한 부분과 동일하기 때문에 도움이 될 것이다.

      OpenOCD 최신버전을 내려받자.

      http://openocd.berlios.de/web/ 사이트에 가면 최신 버전의 OpenOCD에 대한 정보를 얻을 수있다. 그리고 사이트의 우측면에 보면 Getting OpenOCD라는 항목, Repository라는 항목을 참고하면 리눅스 시스템의 경우 GIT를 통해 최신버전을 내려 받을 수 있다.

       Windows 시스템의 경우는 다음 사이트에 가면 친절하게 컴파일해서 올려놓은 것을 내려받을 수 있다. http://www.freddiechopin.info/ > Download > Software > OpenOCD 의 경로로 선택하여 들어가면 최신 OpenOCD를 내려받을 수 있다. 그 이외의 arm을 가지고 개발할 때 유용하게 사용할 수 있는 다른 툴들도 내려받을 수 있다.

       Wiggler를 사용하기 위해선 드라이버가 필요하다. OpenOCD가 설치된 디렉토리 밑의 drivers\giveio.zip\install_giveio.bat를 실행하여 Wiggler에 해당하는 드라이버를 설치하자. 참고로 USB 방식을 사용하는 다른 디버거의 경우 libusb-win32_ft2232_driver-100223.zip 드라이버 파일을 설치하자. 리눅스의 경우는 드라이버설치를 따로 해줄 필요는 없다.

      디버거를 사용하기 위한 다른 설정들은 Eclipse 환경설정에서 좀더 자세히 다루도록 하자.

      * Flash Magic (ISP를 통해서 Flash를 쓰고 읽을 수 있는 프로그램)

      FlashMagic은 NXP사에 제조하는 모든 MCU를 ISP방식으로 프로그래밍할 수 있도록 해주는 프로그램이다. LPC17xx의 경우 uart 0번 채널을 통해서 이러한 기능을 사용할 수 있다. 이 기능은 P2[10]/EINT0/NMI 핀을 GND로 묶어 주면 사용할 수 있다. 하지만 주의해야 할 것은 GND에 묶어 두면 계속 ISP 모드로 대기상태가 되기때문에 mcu를 동작시켜주기 위해서 Pull up을 넣어 주어야 한다. 결로은 프로그래밍시 GND로 묶어 주고 프로그램을 실행 시켜 볼때는  pull up을 해주어야 한다. 보통 보드에서 jumper로 연결되어 있어서 jumper를 뽑았다가 끼웠다를 반복하면 된다.

      http://www.flashmagictool.com/

      flashmagic 기능에 시리얼 포트에서 하드웨어 흐름제어에 사용하는 핀을 리셋과 P2[10]/EINT0/NMI핀에 연결하여 jumper를 사용하지 않고도 편리하게 프로그래밍과 실행을 한번에 수행할 수 있다. 간단한 회로는 다음고 같다. (olimex사의 lpc1766회로에서 따왔음을 밝힌다.)


      그리고 두핀의 시차와 세세한 조절은 flashmagic에서 할 수 있다. 편리함을 위해서 약간의 시행착오는 감수 하셔야 할 것입니다.



      * lpc17xx.cmsis.driver.library 설정

      lpc17xx mcu를 사용하기 위해 필요한 기본적인 c언어 환경, startup 코드, 내부 기능을 사용하기 위한 드라이버 코드, 그리고 예제 코드등 담고 있기 때문에 앞으로 하고자 하는 모든 작업은 이 라이브러리를 사용할 수 있다는 전제 하에서 출발한다. 해당 파일은 nxp 홈페이지의 lpc17xx에 해당하는 support 섹션에서 찾아 볼 수 있다.

      http://ics.nxp.com/support/documents/microcontrollers/?scope=LPC1768

      이 라이브러리 환경을 설정하는 것은 많이 까다로운데 앞으로 차근차근히 하나씩 알아 보도록하자.

      * Eclipse에서 프로젝트 생성하기

      우선 작업할 디렉토리는 변의상 D:\workspace\LPC1768 로 한다.


      그럼 해당 디렉토리에 프로젝트 파일이 없다면 Welcome 화면이 뜰것이고 그럼 workbench 화면으로 전환하자. 그리고 C/C++ 모드로 상용하기 위해서 Window -> Open Perspective -> Other ...를 선택하고 그 곳에서 C/C++로 선택하자.


      새로운 프로젝트를 File -> New  -> Project ...을 통해서 다음과 같이 생성하자.


      그리고 Apps라는 이름의 프로젝트를 생성하자.




      C Project 타입으로 변경하자.


      다음과 같이 C Project 타입의 Apps 프로젝트가 생성된 것을 Project Explore에서 확인 할 수 있다.


      그리고 내려받은 lpc17xx.cmsis.driver.library.zip 파일을 다음 경로에 압축해제시키자.

      D:\workspace\LPC1768\LPC1700CMSIS_26Jan2011

      버전 관리를 위해서 "_26Jan2011"은 임의로 추가하였다.
      그럼 library를 생성한 프로젝트에 적용시키기 위해서 Project Explore 탭에서 Apps 프로젝트를 선택하고 오른쪽 버튼 메뉴에서 Import ... 메뉴를 선택하자.


      내려받은 library 파일 모음으로부터 프로젝트의 내용을 복사하기 위해서 다음과 같이 설정하자.


      원본이 있는 디렉토리를 설정하고 모든 파일을 선택하도록 하자.


      그럼 다음과 같은 구조의 Apps 프로젝트가 생성된다.


      Apps 프로젝트의 절대경로를 설정하는 부분인 .\makesection\makeconfig 파일의 PROJ_ROOT 부분과 설치된 CodeSourcery의 버전에 따라서 다음과 같이 수정하자. 여기서 사용한 gcc의 버전은 4.4.1이다.

      ==================================================================================

      ############################################################
      #
      # Note:
      # Add path of "tools" directory (in this folder)
      # to the HEAD of SYSTEM PATH variable
      #
      ############################################################

      #PROJ_ROOT =C:/nxpdrv/LPC1700CMSIS
      PROJ_ROOT =D:/workspace/LPC1768/Apps
      CMCORE_TYPE =CM3
      DEVICE =LPC17xx
      MANUFACTURE =NXP
      TOOL =gnu
      DEBUG_MODE =1



      GNU_INSTALL_ROOT =C:/Program Files/CodeSourcery/Sourcery G++ Lite
      #GNU_VERSION =4.3.3
      GNU_VERSION =4.4.1
      IAR_INSTALL_ROOT =C:/Program Files/IAR Systems/Embedded Workbench 5.0 Kickstart
      KEIL_INSTALL_ROOT =C:/Keil

      ==================================================================================


      외부 Toolchain와 makesection밑의 Tools의 경로인  %PATH%;C:\Program Files\CodeSourcery\Sourcery G++ Lite\bin;D:\workspace\LPC1768\Application\makesection\tools
      를 프로젝트의 Environment에 추가하자.


      프로젝트의 루트에 있는 Makefile은 전적으로 CMSIS  library 를 사용할 수 있는 *.lib파일을 생성하도록 초점이 맞추어져 있다. 그래서 all로 되어 있는 Build 변수 값을 libs로 바꾸자.


      그리고 parser도 다음과 같이 선택하자.


      이와 같이 설정되면 CMSIS library 파일이 생성된다.


      외부 프로그램을 사용할 수 있도록 해주는 External Tool영역을 설정하자. 이 부분은  FlashMagic와 Serial Termninal 프로그램을 실행할 수 있도록 해주는 설정이다.

      Flashmagic 툴 설정하기

      Run -> External Tools -> External Tools Configuration ...의 순서로 선택하자.



      그리고 Run 메뉴 밑에 해당항목을 추가하기 위해서 External Tool 항목을 체크하자.


      Serial Terminal

      Serial Terminal도 위와 마찬가지로 실행파일의 위치와 작업 디렉토리, 그리고 External Tool항목에 노출시키도록 설정해 두면 된다.


      * 디버깅 스크립트 작성하기