본문 바로가기

[FreeScale]/M9

[OSBDM]을 이용한 MC9S08QG4제어 - LED제어

OSBDM을 이용한 MC9S08QG4제어 - LED제어
 
OSBDM에는 기본적으로 RS08KA2 8pin 2KB MCU가 있는데 코드워리어에서 C언어를 제공하지 않고 있고(SRAM이 적어 스텍생성에 문제가 있어 그런것 같은데...) 새롭게 출시된 MC9S08QG4로 교체 해서 C언어를 이용한 LED제어를 해 보도록 하겠습니다.

소스코드:




MC9S08QG4교체
먼저 MCU를 MC9S08QG4로 교체 합니다.
 
 
MC9S08QG4는 8k FLASH/512 SRAM로 메모리가 훨씬 크며 SPI/I2C/SCI/ADC/ 등 강력한 프리페럴 등을 제공하고 있습니다.
 
보드의 LED는 PTA3에 연결되어 있고 JP4를 연결해야 합니다. PTA3이 0이면 LED On되는 구조 입니다.
 
 
 
 
프로그램 다운로드 및 디버깅
코드워리어에서 디버깅 버튼을 클릭하면 디버거 모드 프로그램이 실행 됩니다.
 
 
디버깅 모드 프로그램이 실행되면서 작성한 프로램은 다운로드 됩니다.
실행을 해 보면 LED가 대략 150ms 간격으로 깜박이는 것을 확인 할 수 있습니다.
 
 
 
무료로 제공받은 디버깅 툴 이지만  C코드및 ASM코드도 동시에 보면서 한 스텝씩 실행 가능하고 레지스터 및 메모리를 확인 가능한 정말 강력한 개발 장비임을 확인 할 수 있었습니다.



LED제어 예제 소스코드

//=============================================================================

// FreeScale ODBM Test Program

//

// by nexp76(nexp76@naver.com)     

// http://cafe.naver.com/elab.cafe

// [main.h]

//=============================================================================

#include <hidef.h>

#include "derivative.h"

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

// Utility Function

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

void Delay(unsigned int Time)

{

    unsigned int i, j;

   

        for(j=0;j<200;j++)

    for (i = 0; i < Time; i++) {};

}

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

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

// LED Function

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

#define Led1Init()                  (PTADD_PTADD3 = 1)

#define Led1On()                    (PTAD_PTAD3 = 0)

#define Led1Off()                   (PTAD_PTAD3 = 1)

#define Led1Toggle()                (PTAD_PTAD3 ^= 1)

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

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

//Main Routine

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

void main(void)

{

    //enable interrupts

    EnableInterrupts;

 

    Led1Init();

    Led1On();

   

    for(;;)

    {

        __RESET_WATCHDOG(); /* feeds the dog */

   

        Led1Toggle();

        Delay(150);

       

    } /* loop forever */

    /* please make sure that you never leave main */

}


반응형