Microprocessor/DSP (TMS320F28x) TR28335 개발 KIT GPIO LED 제어
  • 728x90
    반응형

    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 된다.


    728x90
    반응형
상단으로