아래 링크에서 구할 수 있는 자료를 통해서 설명하도록 하겠습니다
자료 출처 링크 : 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"이 때, 연결이 끊어집니다
자료 출처 링크 : 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 사용 설정
첨부된 소스에는 #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)