RTEMS  5.1
io.h
Go to the documentation of this file.
1 
9 /*
10  * Copyright © 2013 Eugeniy Meshcheryakov <eugen@debian.org>
11  *
12  * The license and distribution terms for this file may be
13  * found in the file LICENSE in this distribution or at
14  * http://www.rtems.org/license/LICENSE.
15  */
16 
17 #ifndef LIBBSP_ARM_LM3S69XX_IO_H
18 #define LIBBSP_ARM_LM3S69XX_IO_H
19 #include <bspopts.h>
20 #include <stdbool.h>
21 
30 typedef enum {
31  LM3S69XX_GPIO_DIRECTION_INPUT,
32  LM3S69XX_GPIO_DIRECTION_OUTPUT
33 } lm3s69xx_gpio_direction;
34 
35 typedef enum {
36  LM3S69XX_GPIO_OTYPE_PUSH_PULL,
37  LM3S69XX_GPIO_OTYPE_OPEN_DRAIN
38 } lm3s69xx_gpio_otype;
39 
40 typedef enum {
41  LM3S69XX_GPIO_DRIVE_2MA,
42  LM3S69XX_GPIO_DRIVE_4MA,
43  LM3S69XX_GPIO_DRIVE_8MA
44 } lm3s69xx_gpio_drive;
45 
46 typedef enum {
47  LM3S69XX_GPIO_NO_PULL,
48  LM3S69XX_GPIO_PULL_UP,
49  LM3S69XX_GPIO_PULL_DOWN
50 } lm3s69xx_gpio_pull;
51 
52 typedef enum {
53  LM3S69XX_GPIO_DIGITAL_DISABLE,
54  LM3S69XX_GPIO_DIGITAL_ENABLE,
55 } lm3s69xx_gpio_digital;
56 
57 typedef enum {
58  LM3S69XX_GPIO_AF_DISABLE,
59  LM3S69XX_GPIO_AF_ENABLE
60 } lm3s69xx_gpio_af;
61 
62 typedef enum {
63  LM3S69XX_GPIO_ANALOG_DISABLE,
64  LM3S69XX_GPIO_ANALOG_ENABLE
65 } lm3s69xx_gpio_analog;
66 
67 typedef enum {
68  LM3S69XX_GPIO_NO_SLEW_RATE_CONTROL,
69  LM3S69XX_GPIO_SLEW_RATE_CONTROL
70 } lm3s69xx_gpio_slew_rate_control;
71 
72 typedef struct {
73  unsigned int pin_first : 8;
74  unsigned int pin_last : 8;
75  unsigned int digital : 1;
76  unsigned int alternate : 1;
77  unsigned int analog : 1;
78  unsigned int dir : 1;
79  unsigned int otype : 1;
80  unsigned int drive : 2;
81  unsigned int pull : 2;
82  unsigned int slr : 1;
84 
85 typedef enum {
86  LM3S69XX_PORT_A,
87  LM3S69XX_PORT_B,
88  LM3S69XX_PORT_C,
89  LM3S69XX_PORT_D,
90  LM3S69XX_PORT_E,
91  LM3S69XX_PORT_F,
92  LM3S69XX_PORT_G,
93 #if LM3S69XX_NUM_GPIO_BLOCKS > 7
94  LM3S69XX_PORT_H
95 #endif
96 } lm3s69xx_gpio_port;
97 
98 #define LM3S69XX_GPIO_PIN(port, idx) (((port) << 3) | (idx))
99 #define LM3S69XX_GPIO_PORT_OF_PIN(pin) (((pin) >> 3) & 0xf)
100 #define LM3S69XX_GPIO_INDEX_OF_PIN(pin) ((pin) & 0x7)
101 
102 #define LM3S69XX_PIN_UART_TX(port, idx) \
103  { \
104  .pin_first = LM3S69XX_GPIO_PIN(port, idx), \
105  .pin_last = LM3S69XX_GPIO_PIN(port, idx), \
106  .digital = LM3S69XX_GPIO_DIGITAL_ENABLE, \
107  .alternate = LM3S69XX_GPIO_AF_ENABLE, \
108  .analog = LM3S69XX_GPIO_ANALOG_DISABLE, \
109  .dir = LM3S69XX_GPIO_DIRECTION_OUTPUT, \
110  .otype = LM3S69XX_GPIO_OTYPE_PUSH_PULL, \
111  .drive = LM3S69XX_GPIO_DRIVE_2MA, \
112  .pull = LM3S69XX_GPIO_NO_PULL, \
113  .slr = LM3S69XX_GPIO_NO_SLEW_RATE_CONTROL \
114  }
115 
116 #define LM3S69XX_PIN_UART_RX(port, idx) \
117  { \
118  .pin_first = LM3S69XX_GPIO_PIN(port, idx), \
119  .pin_last = LM3S69XX_GPIO_PIN(port, idx), \
120  .digital = LM3S69XX_GPIO_DIGITAL_ENABLE, \
121  .alternate = LM3S69XX_GPIO_AF_ENABLE, \
122  .analog = LM3S69XX_GPIO_ANALOG_DISABLE, \
123  .dir = LM3S69XX_GPIO_DIRECTION_INPUT, \
124  .otype = LM3S69XX_GPIO_OTYPE_PUSH_PULL, \
125  .drive = LM3S69XX_GPIO_DRIVE_2MA, \
126  .pull = LM3S69XX_GPIO_PULL_UP, \
127  .slr = LM3S69XX_GPIO_NO_SLEW_RATE_CONTROL \
128  }
129 
130 #define LM3S69XX_PIN_UART_RTS(port, idx) \
131  { \
132  .pin_first = LM3S69XX_GPIO_PIN(port, idx), \
133  .pin_last = LM3S69XX_GPIO_PIN(port, idx), \
134  .digital = LM3S69XX_GPIO_DIGITAL_ENABLE, \
135  .alternate = LM3S69XX_GPIO_AF_ENABLE, \
136  .analog = LM3S69XX_GPIO_ANALOG_DISABLE, \
137  .dir = LM3S69XX_GPIO_DIRECTION_OUTPUT, \
138  .otype = LM3S69XX_GPIO_OTYPE_PUSH_PULL, \
139  .drive = LM3S69XX_GPIO_DRIVE_2MA, \
140  .pull = LM3S69XX_GPIO_NO_PULL, \
141  .slr = LM3S69XX_GPIO_NO_SLEW_RATE_CONTROL \
142  }
143 
144 #define LM3S69XX_PIN_UART_CTS(port, idx) \
145  { \
146  .pin_first = LM3S69XX_GPIO_PIN(port, idx), \
147  .pin_last = LM3S69XX_GPIO_PIN(port, idx), \
148  .digital = LM3S69XX_GPIO_DIGITAL_ENABLE, \
149  .alternate = LM3S69XX_GPIO_AF_ENABLE, \
150  .analog = LM3S69XX_GPIO_ANALOG_DISABLE, \
151  .dir = LM3S69XX_GPIO_DIRECTION_INPUT, \
152  .otype = LM3S69XX_GPIO_OTYPE_PUSH_PULL, \
153  .drive = LM3S69XX_GPIO_DRIVE_2MA, \
154  .pull = LM3S69XX_GPIO_PULL_UP, \
155  .slr = LM3S69XX_GPIO_NO_SLEW_RATE_CONTROL \
156  }
157 
158 #define LM3S69XX_PIN_LED(port, idx) \
159  { \
160  .pin_first = LM3S69XX_GPIO_PIN(port, idx), \
161  .pin_last = LM3S69XX_GPIO_PIN(port, idx), \
162  .digital = LM3S69XX_GPIO_DIGITAL_ENABLE, \
163  .alternate = LM3S69XX_GPIO_AF_DISABLE, \
164  .analog = LM3S69XX_GPIO_ANALOG_DISABLE, \
165  .dir = LM3S69XX_GPIO_DIRECTION_OUTPUT, \
166  .otype = LM3S69XX_GPIO_OTYPE_PUSH_PULL, \
167  .drive = LM3S69XX_GPIO_DRIVE_8MA, \
168  .pull = LM3S69XX_GPIO_NO_PULL, \
169  .slr = LM3S69XX_GPIO_SLEW_RATE_CONTROL \
170  }
171 
172 #define LM3S69XX_PIN_SSI_TX(port, idx) LM3S69XX_PIN_UART_TX(port, idx)
173 #define LM3S69XX_PIN_SSI_RX(port, idx) LM3S69XX_PIN_UART_RX(port, idx)
174 
175 #ifdef __cplusplus
176 extern "C" {
177 #endif
178 
179 void lm3s69xx_gpio_set_config(const lm3s69xx_gpio_config *config);
180 void lm3s69xx_gpio_set_config_array(const lm3s69xx_gpio_config *configs, unsigned int count);
181 void lm3s69xx_gpio_digital_enable(unsigned int pin, bool enable);
182 void lm3s69xx_gpio_analog_mode_select(unsigned int pin, bool enable);
183 
184 void lm3s69xx_gpio_set_pin(unsigned int pin, bool set);
185 bool lm3s69xx_gpio_get_pin(unsigned int pin);
186 
187 #ifdef __cplusplus
188 }
189 #endif
190 
191 #endif /* LIBBSP_ARM_LM3S69XX_IO_H */
Definition: deflate.c:115
void lm3s69xx_gpio_digital_enable(unsigned int pin, bool enable)
Definition: io.c:99
Definition: io.h:72
void lm3s69xx_gpio_analog_mode_select(unsigned int pin, bool enable)
Definition: io.c:114