GPIO LED 제어
SOUREC CODE .H
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | /*========================================== * * FILE : TR28335_Led.h .2017 * TITLE : TR28335 LED Control * *==========================================*/ #ifndef __TR28335_LED_H__ #define __TR28335_LED_H__ #include "main.h" #ifdef _cplusplus extern "C" { #endif /* LED Control Info */ #define LED_OFF 0 #define LED_ON 1 #define LED_TOGGLE 1 typedef enum _E_LED_NUM { LED1 = 0, /* GPIO0 */ LED2, /* GPIO1 */ LED3, /* GPIO2 */ LED4, /* GPIO3 */ LED5, /* GPIO4 */ LED6, /* GPIO5 */ LED_ALL }E_LED_NUM; void InitLed(void); /* GPIO0 ~ GPIO5 LED 설정 */ int16 CtrlLed(int16 ledNum, int16 ctrl); #ifdef _cplusplus } #endif /* extern "C" */ #endif /* __TR28335_LED_H__ */ | cs |
SOUREC CODE .C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | /*========================================== * * FILE : TR28335_Led.c .2017 * TITLE : TR28335 LED Control * *==========================================*/ #include "header/TR28335_Led.h" /*==================================== * * Name : InitLed * Type : Fucntion * Description : GPIO0 ~ GPIO5 초기화 * =====================================*/ void InitLed(void) { /* GPIO 초기화 */ EALLOW; GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; /* GPIO0, GPIO 기능으로 설정 */ GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0; /* GPIO1, GPIO 기능으로 설정 */ GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 0; /* GPIO2, GPIO 기능으로 설정 */ GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 0; /* GPIO3, GPIO 기능으로 설정 */ GpioCtrlRegs.GPAMUX1.bit.GPIO4 = 0; /* GPIO4, GPIO 기능으로 설정 */ GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 0; /* GPIO5, GPIO 기능으로 설정 */ GpioCtrlRegs.GPADIR.bit.GPIO0 = 1; /* GPI01, 출력으로 설정 */ GpioCtrlRegs.GPADIR.bit.GPIO1 = 1; /* GPI02, 출력으로 설정 */ GpioCtrlRegs.GPADIR.bit.GPIO2 = 1; /* GPI03, 출력으로 설정 */ GpioCtrlRegs.GPADIR.bit.GPIO3 = 1; /* GPI04, 출력으로 설정 */ GpioCtrlRegs.GPADIR.bit.GPIO4 = 1; /* GPI05, 출력으로 설정 */ GpioCtrlRegs.GPADIR.bit.GPIO5 = 1; /* GPI06, 출력으로 설정 */ EDIS; GpioDataRegs.GPACLEAR.all = 0x00003F; return ; } /*==================================== * * Name : CtrlLed * Type : Fucntion * Description : LED ON/OFF 제어 * =====================================*/ int16 CtrlLed(int16 ledNum, int16 ctrl) { int16 ret = OK; if(ctrl >= LED_OFF && ctrl <= LED_ON) { switch(ledNum) { case LED1 : GpioDataRegs.GPADAT.bit.GPIO0 = ctrl; break; case LED2 : GpioDataRegs.GPADAT.bit.GPIO1 = ctrl; break; case LED3 : GpioDataRegs.GPADAT.bit.GPIO2 = ctrl; break; case LED4 : GpioDataRegs.GPADAT.bit.GPIO3 = ctrl; break; case LED5 : GpioDataRegs.GPADAT.bit.GPIO4 = ctrl; break; case LED6 : GpioDataRegs.GPADAT.bit.GPIO5 = ctrl; break; case LED_ALL : if(ctrl == LED_TOGGLE) GpioDataRegs.GPATOGGLE.all = 0x0000003F; else ret = ERROR; break; default : ret = ERROR; break; } } else ret = ERROR; return ret; } | cs |
SOUREC CODE MAIN.C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | Uint16 Loop_status; /*==================================== * * Name : main * Description : Program entry point * =====================================*/ void main(void) { Loop_status = 0; /* Disable Global Interrupt */ DINT; /* 고속 CLOCK 설정 */ EALLOW; /* HSPCLK = SYSCLKOUT/(HISPCP*2) * HSPCLK = 150MHz/(1*2) = 75MHz */ SysCtrlRegs.HISPCP.bit.HSPCLK = 1; EDIS; /* 시스템 컨트롤 초기화 */ InitSysCtrl(); /* Interrupt 초기화 */ InitInt(); /* 주변 회로 최기화 */ InitDev(); EINT; /* Enable Global interrupt INTM */ ERTM; /* Enable Global realtime interrupt DBGM */ FOREVER { Loop_status++; CtrlLed(LED_ALL, LED_TOGGLE); DELAY_US(1000000); } } | cs |
TR28335 LED Schematic
총 6개의 LED가 배치되어 있으며 GPIO0 ~ GPIO5에 연결되어 있다.
TR28335 Schematic Download : Schematic_TR28335_V130.pdf
코드 분석
Step .1 GPAMUX1 : LED는 GPIO0~GPIO5에 연결되어 있음으로 GPAMUX1/2에 해당한다.
Step .2 GPAMUX1 : GPAMUX1 Register 에서 GPIO0~GPIO5에 해당하는 비트를 Gerneral purpose I/O 디폴트 세팅을 위해 상단의 표를 참고한다. 00으로 사용하면 GPIO로 사용되고, 1로하면 각 GPIO에 할당되어 있는 특수 기능을 사용한다.
Step .3 GPADIR : GPIO0~GPIO5를 LED 출력으로 사용하기위해 1을 선택하여 GPIO pin as an Output 으로 설정한다.
Step .4 GPACLEAR : Clear Register 를 이용하여 LED 초기상태를 설정한다.
Step .5 GPADAT : GPIO Port A Data Register 를 사용하여 LED ON/OFF 제어를 설정한다.
실행결과
결과 .1 Expressions 에 Loop_status 값이 일정 간격으로 증가한다.
결과 .2 LED0 ~ LED5 가 TOGGLE 된다.
TR28335 개발 KIT Switch GPIO Input (0) | 2017.06.23 |
---|---|
TR28335 개발 KIT CPU Timer 인터럽트 사용 (0) | 2017.06.23 |
TR28335 개발 KIT SCI 통신 (0) | 2017.06.22 |
TR28335 개발 KIT CAN 통신 (1) | 2017.06.21 |
F2833X General Purpose I/O (GPIO) 사용법 (0) | 2017.06.19 |