Skip to content
irmusy edited this page Oct 2, 2013 · 1 revision

GPIO에 연결된 LED를 초기화하고 제어하기 위한 유틸리티 코드를 정리한 헤더 파일입니다.

구성

myCortex-LM8962 보드에는 두 개의 LED가 내장되어 있습니다.

  • Power LED : 보드에 전원이 공급되면 항상 켜집니다.
  • User LED : PG0 핀에 연결된 LED입니다.

User LED 회로도

위 회로도에서 보는 바와 같이 PG0 핀이 Low 일 때 LED가 켜집니다. 반대로 PG0 핀이 High 일 때 LED는 꺼집니다.

소스 살펴보기

42 line:

#define CUST_SYSCTL_PERIPH_LED          SYSCTL_PERIPH_GPIOG
#define CUST_GPIO_PORT_BASE             GPIO_PORTG_BASE
#define CUST_GPIO_PIN                   GPIO_PIN_0

User LED가 연결 된 GPIO 핀에 대한 정의입니다. LED는 PG0에 연결되어 있습니다.

46 line:

#define LED_INIT()      do {                                                            \
                            SysCtlPeripheralEnable(CUST_SYSCTL_PERIPH_LED);             \
                            GPIOPinTypeGPIOOutput(CUST_GPIO_PORT_BASE, CUST_GPIO_PIN);  \
                        } while(0)

LED관련 초기화 함수입니다. 코드 양이 적어서 C 함수로 만드는 대신 메크로 함수로 만들었습니다. LED를 사용하고자 하는 경우 펌웨어 초기화 부분에서 본 함수를 한번 호출해 주면 됩니다.

51 line:

#define LED_ON()        GPIOPinWrite(CUST_GPIO_PORT_BASE, CUST_GPIO_PIN, 0)
#define LED_OFF()       GPIOPinWrite(CUST_GPIO_PORT_BASE, CUST_GPIO_PIN, CUST_GPIO_PIN)

LED를 켜고 끄는 함수입니다. 역시 메크로 함수로 정의하였습니다.

LED를 켤 때에는 GPIO 핀에 Low를 출력해야 합니다. 반대로 LED를 끌 때에는 GPIO 핀에 High를 출력해야 합니다.

54 line:

#define LED_IS_ON()     (GPIOPinRead(CUST_GPIO_PORT_BASE, CUST_GPIO_PIN) != CUST_GPIO_PIN)

LED가 켜져 있는지 꺼져 있는지 상태를 확인하는 함수입니다. LED가 켜져있다면 true가 리턴되고, LED가 꺼져있다면 false가 리턴됩니다.

56 line:

#define LED_TOGGLE()                                                    \
        do {                                                            \
            if (LED_IS_ON())                                            \
                LED_OFF();                                              \
            else                                                        \
                LED_ON();                                               \
        } while(0)

LED를 토글시키는 함수입니다. 현재 LED가 켜져있다면 LED를 끄고, LED가 꺼져 있다면 켭니다.

64 line:

#define LED_DEBUG_BLINK()                       \
    do {                                        \
        unsigned long time;                     \
        time = SysCtlClockGet() / 6;            \
        IntMasterDisable();                     \
        while(1) {                              \
            LED_ON();                           \
            SysCtlDelay(time);                  \
            LED_OFF();                          \
            SysCtlDelay(time);                  \
        }                                       \
    } while(0)

디버깅 목적으로 사용되는 함수입니다. 이 함수를 만나면 LED를 깜박이면서 무한 루트를 돌게 됩니다. Assert 기능과 비슷한 목적으로 사용할 수 있습니다.

Clone this wiki locally