본문 바로가기

Architecture/LM3S8962

[LM3s8962] GPIO


아래 링크에서 구할 수 있는 자료를 통해서 설명하도록 하겠습니다
자료 출처 링크 : http://www.zlgmcu.com/luminary/exploitation_guide.asp



※ GPIO port (Port A, Port B, Port C, Port D, Port E, Port F, Port G) 총 7개의 포트가 있으며 총 42개의 핀이 사용 가능합니다


GPIO 핀을 세 종류의 모드를 포함한 다양한, 대한 더 많이 구성할 수있습니다

1. Input 모드

2. Output 모드

3. OutputOD (Output OpenDrain)
 
입력 전압 및 IC의 동작 전압과 다른 출력 전압을 얻고 싶을 때 주로 사용됩니다
 스위치 출력이 "1"이 때, 연결이 끊어집니다

4. 클램핑 다이오드
 역할은 외부 핀에서 전압이 너무 높거나 너무 낮게 입력하지 않도록하는 것입니다



※  GPIO 설정

1.
GPIO 사용 설정
 예) SysCtlPeripheralEnable (SYSCTL_PERIPH_GPIOB);  // GPIOB 포트를 사용
 첨부된 소스에는 #define SysCtlPeriEnable SysCtlPeripheralEnable 선언이 되어 있어서 SysCtlPeriEnable로 사용합니다

2. GPIO 사용 기본 설정
 사용가능한 GPIO 핀 번호를 설정하는데 사용합니다

 예) GPIODirModeSet(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_DIR_MODE_OUT)
 GPIO_PORTC_BASE 대신에 GPIO_PORTC_AHB_BASE를 사용할 수 있는데     
 SysCtlGPIOAHBEnable(SYSCTL_PERIPH_GPIOB)를 통해서 AHB를 활성화 시켜야됩니다
 AHB는 메모리와 DMA 인터페이스입니다

 예) GPIODirModeGet(GPIO_PORTC_BASE, GPIO_PIN_4) 
 unsigned long형이 리턴 됨(GPIO_DIR_MODE_OUT, GPIO_DIR_MODE_IN, GPIO_DIR_MODE_HW 중에서)

 예) GPIOPadConfigSet(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD)

 GPIO_PIN_TYPE_STD : push-pull pin
 GPIO_PIN_TYPE_OD : open-drain pin
 ∗_WPU : weak pull-up
 ∗_WPD : weak pull-down
 GPIO_PIN_TYPE_ANALOG : analoginput 비교기
 레지스터로 출력전류를 제어할 수 있는것 같습니다

 예) GPIOPadConfigGet(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_STRENGTH, GPIO_PIN_TYPE)
 3번째, 4번째 인자는 포인터 값이고 거기에 값을 저장합니다

3. GPIO 핀 설정
 소스에는 아래와 같이 define 되어 있습니다
 #define  GPIOPinTypeIn      GPIOPinTypeGPIOInput
 #define  GPIOPinTypeOut      GPIOPinTypeGPIOOutput
 #define  GPIOPinTypeOD     GPIOPinTypeGPIOOutputOD 

 예) GPIOPinTypeGPIOInput(GPIO_PORTC_BASE, GPIO_PIN_4)

 예) GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, GPIO_PIN_4)

 예) GPIOPinTypeGPIOOutputOD(GPIO_PORTC_BASE, GPIO_PIN_4)

 예) GPIOPinTypeADC(GPIO_PORTC_BASE, GPIO_PIN_4)
 ADC input pin에만 사용

 예) GPIOPinTypeCAN(GPIO_PORTC_BASE, GPIO_PIN_4)
 CAN pin에만 사용

 예) GPIOPinTypeComparator(GPIO_PORTC_BASE, GPIO_PIN_4)
 analog comparator(비교기) input pin에만 사용

 예) GPIOPinTypeI2C(GPIO_PORTC_BASE, GPIO_PIN_4)
 I2C pin에만 사용

 예) GPIOPinTypePWM(
GPIO_PORTC_BASE, GPIO_PIN_4)
 PWM pin에만 사용

 예) GPIOPinTypeQEI(GPIO_PORTC_BASE, GPIO_PIN_4)
 QEI pin에만 사용
 Quadrature Encoder는 회전에 따라 클럭 펄스가 발생하는 구조이고 T/4의 위상차로 움직이는 두개의 펄스 출력을 냅니다. 따라서 두 클럭 펄스 조합의 변화가 축의 회전 방향을 알려줍니다.

 예) GPIOPinTypeSSI(GPIO_PORTC_BASE, GPIO_PIN_4)
 SSI(SynchronousSerialInterface) pin에만 사용

 예) GPIOPinTypeTimer(GPIO_PORTC_BASE, GPIO_PIN_4)
 
 예) GPIOPinTypeUART(GPIO_PORTC_BASE, GPIO_PIN_4)

 예) GPIOPinTypeUSBDigital(GPIO_PORTC_BASE, GPIO_PIN_4)

4. GPIO 핀 읽기 및 쓰기
 예) GPIOPinRead(GPIO_PORTC_BASE, GPIO_PIN_4)
 현재 핀의 값을 long형으로 리턴

 예) GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_4, 0x00)

5. GPIO 인터럽트
 예) GPIOIntTypeSet(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_FALLING_EDGE)
 3번째 인자값에 따라서 인터럽트가 발생하는 시점이 다름
 GPIO_FALLING_EDGE 
 GPIO_RISING_EDGE 
 GPIO_BOTH_EDGES 
 GPIO_LOW_LEVEL    
 GPIO_HIGH_LEVEL

 예) GPIOIntTypeGet(GPIO_PORTC_BASE, GPIO_PIN_4)
 unsigned long형 리턴(GPIO_FALLING_EDGE, GPIO_RISING_EDGE, GPIO_BOTH_EDGES, GPIO_LOW_LEVEL, GPIO_HIGH_LEVEL)

 예) GPIOPinIntEnable(GPIO_PORTC_BASE, GPIO_PIN_4)

 예) GPIOPinIntDisable(GPIO_PORTC_BASE, GPIO_PIN_4)

 예) GPIOPinIntStatus(GPIO_PORTC_BASE, true)
 If bMasked is set as true, then the masked interrupt status is returned; otherwise, the raw interrupt status will be returned. (long형 리턴, 두번째인자가(bMasked) true이면 masked된 인터럽트 상태를 리턴하고 false이면 초기 인터럽트 상태를 리턴)

 예) GPIOPinIntClear(GPIO_PORTC_BASE, GPIO_PIN_4)
 플래그 제거

 예) GPIOPortIntRegister(GPIO_PORTC_BASE, IntDefaultHandler)

 예) GPIOPortIntUnregister(GPIO_PORTC_BASE, IntDefaultHandler)