EM-X270: WinCE: GPIOs Programming
Contents
- 1 GPIO Sample Application
- 2 GPIO Driver API
- 2.1 Data Types
- 2.2 Functions
- 2.2.1 HANDLE GPIOOpen()
- 2.2.2 void GPIOClose(HANDLE hDevice)
- 2.2.3 BOOL GPIOSetValue(HANDLE hDevice,DWORD num, GPIO_VALUE val)
- 2.2.4 BOOL GPIOGetValue(HANDLE hDevice,DWORD num,GPIO_VALUE *gpioVal)
- 2.2.5 void GPIOSetAsInput(HANDLE hDevice, DWORD num)
- 2.2.6 BOOL GPIOSetAsOutput(HANDLE hDevice,DWORD num, GPIO_VALUE val)
- 2.2.7 DWORD GPIORegisterInterrupt(HANDLE hDevice,GPIO_INTERRUPT interrupt)
- 2.2.8 BOOL GPIOInterruptDone(HANDLE hDevice, DWORD num)
- 2.2.9 DWORD GPIOUnRegisterInterrupt(HANDLE hDevice, DWORD num)
GPIO Sample Application
Overview
This GPIOSample application demonstrates basic functionality of EM-X270 GPIOs under Windows CE:
- How to configure a GPIO pin as output and manipulate it.
- How to configure a GPIO pin as input and respond to changes in signal level.
- How to setup an edge triggered event.
Application Behavior
Prerequisites for the application:
- A demo keypad provided with the EM-X270 evaluation kit.
The GPIOSample manipulates the following GPIOs:
- GPIO 22 (pin 10 of P2 connector on the Keypad Demo Board) - Set as output
- GPIO 36 (pin 9 of P2 connector on the Keypad Demo Board) - Set as input
- GPIO 96 (pin 8 of P2 connector on the Keypad Demo Board) - Set as input
- GPIO 107 (pin 5 of P2 connector on the Keypad Demo Board) - Set as input
GPIO22 voltage level may be monitored with a DVM or an oscilloscope. GPIO36, GPIO96 and GPIO107 may be controlled by an external switch or button.
The GPIOSample performs the following actions:
- Edge detection on GPIO107 . Event handler is registered with GPIORegisterInterrupt. The handler calls GPIOInterruptDone to indicate interrupt completion.
- Clock simulation on GPIO22 with a period of 3 seconds.
- Input voltage level monitoring on GPIO36.
- Polling on GPIO96 until it is asserted.
Available GPIOs
The following table specifies GPIOs available on the EM-X270 platform:
GPIO# | PXA27X Alternate Function | Conflicts with EM-X270 demo keypad driver | Pin# on keypad extender (P2) |
22 | KP_MKOUT<7> | No | 10 |
34 | KP_MKIN<3> | No | 1 |
36 | KP_MKIN<7> | No | 9 |
39 | KP_MKIN<4> | No | 3 |
91 | KP_MKIN<6> | No | 7 |
96 | KP_MKOUT<6> | No | 8 |
99 | KP_MKIN<5> | No | 5 |
106 | KP_MKOUT<3> | No | 2 |
107 | KP_MKOUT<4> | No | 4 |
108 | KP_MKOUT<5> | No | 6 |
100 | KP_MKIN<0> | Yes | - |
101 | KP_MKIN<1> | Yes | - |
102 | KP_MKIN<2> | Yes | - |
103 | KP_MKOUT<0> | Yes | - |
104 | KP_MKOUT<1> | Yes | - |
105 | KP_MKOUT<2> | Yes | - |
![]() |
If your application does not require keypad, you can remove EM-X270 Keypad driver from the Catalog and reuse GPIO100-GPIO105. |
GPIO Driver API
Data Types
GPIO_VALUE
GPIO state enumeration
Values
- GPIO_LOW
- GPIO_HIGH
GPIO_EDGE_SETTINGS
Values
- GPIO_REACT_ON_FALLING
- GPIO_REACT_ON_RISING
- GPIO_REACT_ON_BOTH
- GPIO_DONT_REACT
GPIO_INTERRUPT
Fields
Name |
Description
|
---|---|
DWORD dwGpioNum | |
GPIO_EDGE_SETTINGS Edge | |
HANDLE Event |
|
Functions
HANDLE GPIOOpen()
Opens an instance of the GPIO Driver.
Return Values
- Returns a handle that should be used to access the driver. Nonzero indicates success.
void GPIOClose(HANDLE hDevice)
Closes the driver handle
Parameters
- hDevice - Handle to an open driver instance
BOOL GPIOSetValue(HANDLE hDevice,DWORD num, GPIO_VALUE val)
Sets the state of a GPIO.
Parameters
- hDevice - Handle to an open driver instance
- num - GPIO number.
- val - The desired logical state.
Return Values
- TRUE - indicates success
- FALSE - indicates failure
Remarks
- Make sure the GPIO direction is setup as output.
BOOL GPIOGetValue(HANDLE hDevice,DWORD num,GPIO_VALUE *gpioVal)
Return the logical state of a GPIO.
Parameters
- hDevice - Handle to an open driver instance
- num - GPIO number.
- gpioVal - pointer to the GPIO state variable
Return Values
- TRUE - indicates success
- FALSE - indicates failure
Remarks
- Make sure the GPIO direction is setup as input. Returned value for an output GPIO is undefined
void GPIOSetAsInput(HANDLE hDevice, DWORD num)
Configures a GPIO as an input.
Parameters
- hDevice - Handle to an open driver instance.
- num - GPIO number.
Return Values
- TRUE - indicates success
- FALSE - indicates failure
BOOL GPIOSetAsOutput(HANDLE hDevice,DWORD num, GPIO_VALUE val)
Configures a GPIO as an output and sets its logical state.
Parameters
- hDevice - Handle to an open driver instance
- num - GPIO number.
- val - The initial GPIO value
Return Values
- TRUE - indicates success
- FALSE - indicates failure
DWORD GPIORegisterInterrupt(HANDLE hDevice,GPIO_INTERRUPT interrupt)
Registers a GPIO as an interrupt source. The interrupt is triggered according to the configuration in GPIO_INTERRUPT.Edge member settings.
Parameters
- hDevice - Handle to an open driver instance
- interrupt- data structure that defines parameters for the interrupt registration
struct gpio_intr_t{ DWORD dwGpioNum; GPIO_EDGE_SETTINGS Edge; HANDLE Event; } GPIO_INTERRUPT;
Return Values
- TRUE - indicates success. The handle for the interrupt event is stored in GPIO_INTERRUPT.Event
Remarks
- This function must be called before using the GPIO_INTERRUPT.Event parameter.
- The GPIO_INTERRUPT.Event parameter may only be used in a WaitForSingleObject call. A WaitForMultipleObjects call with GPIO_INTERRUPT.Event will fail.
- If you use GPIO_INTERRUPT.Event in a call to WaitForSingleObject before you call GPIOInterruptInitialize, GPIOInterruptInitialize will fail.
BOOL GPIOInterruptDone(HANDLE hDevice, DWORD num)
Signals to the kernel that GPIO interrupt processing is complete.
Parameters
- hDevice - Handle to an open driver instance
- num - GPIO number.
Return Values
- TRUE- indicates success.
Remarks
- A program calls GPIOInterruptDone when it has completed the interrupt processing and is ready for another interrupt.
DWORD GPIOUnRegisterInterrupt(HANDLE hDevice, DWORD num)
Disables the GPIO hardware interrupt.
Parameters
- hDevice - Handle to an open driver instance
- num - GPIO number.
Return Values
- TRUE - indicates success.
Remarks
- A program calls GPIOUnRegisterInterrupt to disable the hardware interrupt and to unregister the event that was registered by GPIOInterruptInitialize.
![]() |
The exact definition of GPIO API is located in the gpio.h file in the GPIOSample project. |