RTEMS  5.1
gpio-defs.h
Go to the documentation of this file.
1 
9 /*
10  * Copyright (c) 2014 Taller Technologies.
11  *
12  * @author Boretto Martin (martin.boretto@tallertechnologies.com)
13  * @author Diaz Marcos (marcos.diaz@tallertechnologies.com)
14  * @author Lenarduzzi Federico (federico.lenarduzzi@tallertechnologies.com)
15  * @author Daniel Chicco (daniel.chicco@tallertechnologies.com)
16  *
17  * The license and distribution terms for this file may be
18  * found in the file LICENSE in this distribution or at
19  * http://www.rtems.org/license/LICENSE.
20  */
21 
22 #ifndef LIBBSP_ARM_LPC176X_GPIO_DEFS_H
23 #define LIBBSP_ARM_LPC176X_GPIO_DEFS_H
24 
25 #include <bsp/common-types.h>
26 
27 #ifdef __cplusplus
28 extern "C" {
29 #endif /* __cplusplus */
30 
31 /* General Purpose Input/Output (GPIO) */
32 #define LPC176X_GPIO_BASE_ADDR 0x40028000U
33 #define LPC176X_GPIO_INTERRUPT_STATUS 0x40028080U
34 
35 #define LPC176X_IOPIN0 ( *(volatile uint32_t *) ( LPC176X_GPIO_BASE_ADDR + \
36  0x00U ) )
37 #define LPC176X_IOSET0 ( *(volatile uint32_t *) ( LPC176X_GPIO_BASE_ADDR + \
38  0x04U ) )
39 #define LPC176X_IODIR0 ( *(volatile uint32_t *) ( LPC176X_GPIO_BASE_ADDR + \
40  0x08U ) )
41 #define LPC176X_IOCLR0 ( *(volatile uint32_t *) ( LPC176X_GPIO_BASE_ADDR + \
42  0x0CU ) )
43 #define LPC176X_IOPIN1 ( *(volatile uint32_t *) ( LPC176X_GPIO_BASE_ADDR + \
44  0x10U ) )
45 #define LPC176X_IOSET1 ( *(volatile uint32_t *) ( LPC176X_GPIO_BASE_ADDR + \
46  0x14U ) )
47 #define LPC176X_IODIR1 ( *(volatile uint32_t *) ( LPC176X_GPIO_BASE_ADDR + \
48  0x18U ) )
49 #define LPC176X_IOCLR1 ( *(volatile uint32_t *) ( LPC176X_GPIO_BASE_ADDR + \
50  0x1CU ) )
51 
52 /* GPIO Interrupt Registers */
53 #define LPC176X_IO0_INT_EN_R ( *(volatile uint32_t *) ( LPC176X_GPIO_BASE_ADDR \
54  + 0x90U ) )
55 #define LPC176X_IO0_INT_EN_F ( *(volatile uint32_t *) ( LPC176X_GPIO_BASE_ADDR \
56  + 0x94U ) )
57 #define LPC176X_IO0_INT_STAT_R ( *(volatile uint32_t *) ( \
58  LPC176X_GPIO_BASE_ADDR \
59  + 0x84U ) )
60 #define LPC176X_IO0_INT_STAT_F ( *(volatile uint32_t *) ( \
61  LPC176X_GPIO_BASE_ADDR \
62  + 0x88U ) )
63 #define LPC176X_IO0_INT_CLR ( *(volatile uint32_t *) ( LPC176X_GPIO_BASE_ADDR \
64  + 0x8CU ) )
65 #define LPC176X_IO2_INT_EN_R ( *(volatile uint32_t *) ( LPC176X_GPIO_BASE_ADDR \
66  + 0xB0U ) )
67 #define LPC176X_IO2_INT_EN_F ( *(volatile uint32_t *) ( LPC176X_GPIO_BASE_ADDR \
68  + 0xB4U ) )
69 #define LPC176X_IO2_INT_STAT_R ( *(volatile uint32_t *) ( \
70  LPC176X_GPIO_BASE_ADDR \
71  + 0xA4U ) )
72 #define LPC176X_IO2_INT_STAT_F ( *(volatile uint32_t *) ( \
73  LPC176X_GPIO_BASE_ADDR \
74  + 0xA8U ) )
75 #define LPC176X_IO2_INT_CLR ( *(volatile uint32_t *) ( LPC176X_GPIO_BASE_ADDR \
76  + 0xACU ) )
77 #define LPC176X_IO_INT_STAT ( *(volatile uint32_t *) ( LPC176X_GPIO_BASE_ADDR \
78  + 0x80U ) )
79 
80 #define LPC176X_RESERVED_ISR_FUNCT_SIZE 2U
81 #define LPC176X_RESERVED_ISR_FUNCT_MAX_SIZE 5U
82 
83 #define LPC176X_MAX_PORT_NUMBER 160U
84 #define LPC176X_SET_BIT( reg, pin, value ) \
85  reg = ( reg & ~( 1U << pin ) ) | ( ( value & 1U ) << pin )
86 
87 #define LPC176X_INT_STATUS ( *(volatile uint32_t *) \
88  ( LPC176X_GPIO_INTERRUPT_STATUS ) )
89 #define LPC176X_INT_STATUS_P0 1U
90 #define LPC176X_INT_STATUS_P2 ( 1U << 2U )
91 #define LPC176X_INT_ENABLE 1U
92 #define LPC176X_INT_DISABLE 0U
93 
94 #define LPC176X_IRQ_EINT_3 21U
95 
96 #define LPC176X_PIN_BIT( pin ) ( 1U << pin )
97 
103 typedef enum {
104  LPC176X_GPIO_FUNCTION_INPUT,
105  LPC176X_GPIO_FUNCTION_OUTPUT,
106  LPC176X_GPIO_FUNCTION_COUNT
107 }
109 
115 typedef enum {
116  LPC176X_GPIO_INTERRUPT_DISABLE,
117  LPC176X_GPIO_INTERRUPT_RISING,
118  LPC176X_GPIO_INTERRUPT_FALLING,
119  LPC176X_GPIO_INTERRUPT_BOTH,
120  LPC176X_GPIO_INTERRUPT_COUNT
122 
128 typedef enum {
129  LPC176X_GPIO_PORT_0,
130  LPC176X_GPIO_PORT_1,
131  LPC176X_GPIO_PORT_2,
132  LPC176X_GPIO_PORT_3,
133  LPC176X_GPIO_PORT_4,
134  LPC176X_GPIO_PORTS_COUNT
136 
143 typedef enum {
144  LPC176X_FIO0_BASE_ADDRESS = 0x2009C000U,
145  LPC176X_FIO1_BASE_ADDRESS = 0x2009C020U,
146  LPC176X_FIO2_BASE_ADDRESS = 0x2009C040U,
147  LPC176X_FIO3_BASE_ADDRESS = 0x2009C060U,
148  LPC176X_FIO4_BASE_ADDRESS = 0x2009C080U,
150 
157 typedef enum {
158  LPC176X_IO0_INT_BASE_ADDRESS = 0x40028084U,
159  LPC176X_IO2_INT_BASE_ADDRESS = 0x400280A4U,
161 
165 typedef struct {
169  volatile uint32_t StatR;
173  volatile uint32_t StatF;
177  volatile uint32_t Clr;
181  volatile uint32_t EnR;
185  volatile uint32_t EnF;
187 
196  const lpc176x_pin_number pin,
197  const lpc176x_gpio_interrupt edge
198 );
199 
203 typedef struct {
213 
214 #ifdef __cplusplus
215 }
216 #endif /* __cplusplus */
217 
218 #endif /* LIBBSP_ARM_LPC176X_GPIO_DEFS_H */
lpc176x_gpio_address
Addresses for a GPIO.
Definition: gpio-defs.h:143
volatile uint32_t EnR
Interrupt Enable for Rising edge.
Definition: gpio-defs.h:181
volatile uint32_t StatR
Interrupt Enable for Rising edge.
Definition: gpio-defs.h:169
lpc176x_gpio_ports
The ports for a GPIO.
Definition: gpio-defs.h:128
lpc176x_gpio_interrupt
The interrupt sources edge for a GPIO.
Definition: gpio-defs.h:115
volatile uint32_t EnF
Interrupt Enable for Falling edge.
Definition: gpio-defs.h:185
Definitions types used by some devices in common.
volatile uint32_t StatF
Interrupt Enable for Falling edge.
Definition: gpio-defs.h:173
A registered interrupt function for the pin 'pin'.
Definition: gpio-defs.h:203
lpc176x_gpio_direction
The direction of the GPIO port (input or output).
Definition: gpio-defs.h:103
GPIO Interrupt register map.
Definition: gpio-defs.h:165
lpc176x_pin_number pin
Pin board.
Definition: gpio-defs.h:207
uint32_t lpc176x_pin_number
A pin of the board.
Definition: common-types.h:32
void(* lpc176x_gpio_interrupt_function)(const lpc176x_pin_number pin, const lpc176x_gpio_interrupt edge)
A function that attends an interrupt for GPIO.
Definition: gpio-defs.h:195
volatile uint32_t Clr
Interrupt Clear.
Definition: gpio-defs.h:177
lpc176x_interrupt_address
Addresses for the two interrupts.
Definition: gpio-defs.h:157