[TI]/LuminaryMicro2008. 11. 6. 16:56

Luminray Micro GPIO 관련자료

Luminray Micro GPIO 관련자료





Luminary Micro GPIO 특징
아주 특별한것은 없지만 5V호환 가능다는것, 드라이버 전류가 8mA로 적다는것 정도.
Programmable control for GPIO interrupts:
 - Interrupt generation masking
 - Edge-triggered on rising, falling, or both
 - Level-sensitive on High or Low values
5-V-tolerant input/outputs
Bit masking in both read and write operations through address lines
Programmable control for GPIO pad configuration:
 - Weak pull-up or pull-down resistors
 - 2-mA, 4-mA, and 8-mA pad drive
 - Slew rate control for the 8-mA drive
 - Open drain enables
 - Digital input enables

모든 GPIO는 디폴트 값으로 입력모드(GPIODIR=0 and GPIOAFSEL=0)로 설정된다.
예외) JTAG 핀 (PB7 and PC[3:0]. (GPIOAFSEL=1))


GPIO 블록도




주요 레지스터
GPIODIR
: 입출력 방향 설정
0: 입력
1: 출력

GPIODATA :  입출력 데이터

GPIOAFSEL : GPIO 핀 모드 설정
 0: Software control of corresponding GPIO line (GPIO mode).
 1: Hardware control of corresponding GPIO line (alternate hardware function).


초기화 방법
1) GPIO 클럭 초기화
GPIO에 클럭을 공급하기 위해 RCGC2 레지스터를 설정해야 한다.
Luminary Micro 제공함수 SysCtlPeripheralEnable()를 이용하면 쉽게 설정 가능하다.

ex) SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);

2)GPIO 입출력 방향 설정 및 모드 설정
역시 GPIOPinTypeGPIOOutput() 함수를 이용하면 쉽게 초기화 가능하다.

ex) GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, 0xFF);


GPIO Driver 정의

//LED Driver
#define LED1_BIT          BIT0
#define LED1_PORT      GPIO_PORTB_DATA_R
#define Led1Off()          Sbi(LED1_PORT, LED1_BIT)
#define Led1On()          Cbi(LED1_PORT, LED1_BIT)
#define Led1Toggle()    Tbi(LED1_PORT, LED1_BIT)

#define Led1Init()          SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);\
                                  GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, LED1_BIT)

 

Luminary Micro GPIO제어 예제 - LED제어

void main()
{
 SystemInit(); 

 Led1Init();
 Led1On();

 while(1)
 {
  Led1Toggle();
  Delay(500)
 }
}



GPIO 제어에 대한 고찰
GPIO 제어용 함수를 이요하면 쉽게 제어 가능하지만 함수이용 자체가 오버헤드가 걸린다. 
GPIOPinWrite() 함수 사용시 코드
17            GPIOPinWrite(GPIO_PORTB_BASE, BIT0, 0);
   \                     ??main_1:
   \   0000002C   0022               MOVS     R2,#+0
   \   0000002E   0121               MOVS     R1,#+1
   \   00000030   2046               MOV      R0,R4
   \   00000032   ........           BL       GPIOPinWrite
   \   00000036   F9E7               B.N      ??main_1


define 문으로 정의시 코드
16            Led1Off();
   \   0000002C   0168               LDR      R1,[R0, #+0]
   \   0000002E   41F00101           ORR      R1,R1,#0x1
   \   00000032   FAE7               B.N      ??main_1
   \                     ??main_0:

Posted by nexp

댓글을 달아 주세요

  1. 홈키파

    관리자의 승인을 기다리고 있는 댓글입니다

    2011.04.29 14:17 [ ADDR : EDIT/ DEL : REPLY ]