Revision 1e5f7648 modules/LightRing_1-0/module.c

View differences:

modules/LightRing_1-0/module.c
18 18

  
19 19
#include "module.h"
20 20

  
21
#include <amiroos.h>
22

  
21 23
/*===========================================================================*/
22 24
/**
23 25
 * @name Module specific functions
24 26
 * @{
25 27
 */
26 28
/*===========================================================================*/
27
#include <amiroos.h>
28

  
29
/**
30
 * @brief   Interrupt service routine callback for I/O interrupt signals.
31
 *
32
 * @param   args      Channel on which the interrupt was encountered.
33
 */
34
static void _modulePalIsrCallback(void *args) {
35
  chSysLockFromISR();
36
  chEvtBroadcastFlagsI(&aos.events.io, (1 << (*(uint16_t*)args)));
37
  chSysUnlockFromISR();
38

  
39
  return;
40
}
41 29

  
42 30
/** @} */
43 31

  
......
53 41
  /* btr  */ CAN_BTR_SJW(1) | CAN_BTR_TS2(2) | CAN_BTR_TS1(13) | CAN_BTR_BRP(1),
54 42
};
55 43

  
56
aos_interrupt_cfg_t moduleIntConfig[6] = {
57
    /* channel  1 */ { // SYS_INT_N/SYS_SYNC_N: automatic interrupt on event
58
      /* port     */ GPIOD,
59
      /* pad      */ GPIOD_SYS_INT_N,
60
      /* flags    */ AOS_INTERRUPT_AUTOSTART,
61
      /* mode     */ PAL_EVENT_MODE_BOTH_EDGES,
62
      /* callback */ _modulePalIsrCallback,
63
      /* cb arg   */ 1,
64
    },
65
    /* channel  2 */ { // LASER_OC_N: must be enabled explicitely
66
      /* port     */ GPIOB,
67
      /* pad      */ GPIOB_LASER_OC_N,
68
      /* flags    */ 0,
69
      /* mode     */ PAL_EVENT_MODE_FALLING_EDGE,
70
      /* callback */ _modulePalIsrCallback,
71
      /* cb arg   */ 2,
72
    },
73
    /* channel  3 */ { // SYS_UART_DN: automatic interrupt on event
74
      /* port     */ GPIOB,
75
      /* pad      */ GPIOB_SYS_UART_DN,
76
      /* flags    */ AOS_INTERRUPT_AUTOSTART,
77
      /* mode     */ PAL_EVENT_MODE_BOTH_EDGES,
78
      /* callback */ _modulePalIsrCallback,
79
      /* cb arg   */ 3,
80
    },
81
    /* channel  4 */ { // WL_GDO0: must be enabled explicitely
82
      /* port     */ GPIOB,
83
      /* pad      */ GPIOB_WL_GDO0,
84
      /* flags    */ 0,
85
      /* mode     */ PAL_EVENT_MODE_BOTH_EDGES,
86
      /* callback */ _modulePalIsrCallback,
87
      /* cb arg   */ 4,
88
    },
89
    /* channel  5 */ { // WL_GDO2: must be enabled explicitely
90
      /* port     */ GPIOB,
91
      /* pad      */ GPIOB_WL_GDO2,
92
      /* flags    */ 0,
93
      /* mode     */ PAL_EVENT_MODE_BOTH_EDGES,
94
      /* callback */ _modulePalIsrCallback,
95
      /* cb arg   */ 5,
96
    },
97
    /* channel  6 */ { // SYS_PD_N: automatic interrupt on event
98
      /* port     */ GPIOC,
99
      /* pad      */ GPIOC_SYS_PD_N,
100
      /* flags    */ AOS_INTERRUPT_AUTOSTART,
101
      /* mode     */ PAL_EVENT_MODE_FALLING_EDGE,
102
      /* callback */ _modulePalIsrCallback,
103
      /* cb arg   */ 6,
104
    },
105
};
106

  
107
aos_interrupt_driver_t moduleIntDriver = {
108
  /* config     */ NULL,
109
  /* interrupts */ 6,
110
};
111

  
112 44
I2CConfig moduleHalI2cEepromConfig = {
113 45
  /* I²C mode   */ OPMODE_I2C,
114 46
  /* frequency  */ 400000, // TODO: replace with some macro (-> ChibiOS/HAL)
......
138 70
 */
139 71
/*===========================================================================*/
140 72

  
141
apalGpio_t moduleGpioLightBlank = {
73
/**
74
 * @brief   LIGHT_BANK output signal GPIO.
75
 */
76
static apalGpio_t _gpioLightBlank = {
142 77
  /* port */ GPIOA,
143 78
  /* pad  */ GPIOA_LIGHT_BLANK,
144 79
};
80
apalControlGpio_t moduleGpioLightBlank = {
81
  /* GPIO */ &_gpioLightBlank,
82
  /* meta */ {
83
    /* direction      */ APAL_GPIO_DIRECTION_OUTPUT,
84
    /* active state   */ TLC5947_LLD_BLANK_ACTIVE_STATE,
85
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
86
  },
87
};
145 88

  
146
apalGpio_t moduleGpioLaserEn = {
89
/**
90
 * @brief   LASER_EN output signal GPIO.
91
 */
92
static apalGpio_t _gpioLaserEn = {
147 93
  /* port */ GPIOB,
148 94
  /* pad  */ GPIOB_LASER_EN,
149 95
};
96
apalControlGpio_t moduleGpioLaserEn = {
97
  /* GPIO */ &_gpioLaserEn,
98
  /* meta */ {
99
    /* direction      */ APAL_GPIO_DIRECTION_OUTPUT,
100
    /* active state   */ TPS2051B_LLD_ENABLE_ACTIVE_STATE,
101
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
102
  },
103
};
150 104

  
151
apalGpio_t moduleGpioLaserOc = {
105
/**
106
 * @brief   LASER_OC input signal GPIO.
107
 */
108
static apalGpio_t _gpioLaserOc = {
152 109
  /* port */ GPIOB,
153 110
  /* pad  */ GPIOB_LASER_OC_N,
154 111
};
112
apalControlGpio_t moduleGpioLaserOc = {
113
  /* GPIO */ &_gpioLaserOc,
114
  /* meta */ {
115
    /* direction      */ APAL_GPIO_DIRECTION_INPUT,
116
    /* active state   */ TPS2051B_LLD_OVERCURRENT_ACTIVE_STATE,
117
    /* interrupt edge */ APAL_GPIO_EDGE_BOTH,
118
  },
119
};
155 120

  
156
apalGpio_t moduleGpioSysUartDn = {
121
/**
122
 * @brief   SYS_UART_DN bidirectional signal GPIO.
123
 */
124
static apalGpio_t _gpioSysUartDn = {
157 125
  /* port */ GPIOB,
158 126
  /* pad  */ GPIOB_SYS_UART_DN,
159 127
};
128
apalControlGpio_t moduleGpioSysUartDn = {
129
  /* GPIO */ &_gpioSysUartDn,
130
  /* meta */ {
131
    /* direction      */ APAL_GPIO_DIRECTION_BIDIRECTIONAL,
132
    /* active state   */ APAL_GPIO_ACTIVE_LOW,
133
    /* interrupt edge */ APAL_GPIO_EDGE_BOTH,
134
  },
135
};
160 136

  
161
apalGpio_t moduleGpioWlGdo2 = {
137
/**
138
 * @brief   WL_GDO2 input signal GPIO.
139
 */
140
static apalGpio_t _gpioWlGdo2 = {
162 141
  /* port */ GPIOB,
163 142
  /* pad  */ GPIOB_WL_GDO2,
164 143
};
144
apalControlGpio_t moduleGpioWlGdo2 = {
145
  /* GPIO */ &_gpioWlGdo2,
146
  /* meta */ {
147
    /* direction      */ APAL_GPIO_DIRECTION_INPUT,
148
    /* active state   */ APAL_GPIO_ACTIVE_HIGH,
149
    /* interrupt edge */ APAL_GPIO_EDGE_BOTH,
150
  },
151
};
165 152

  
166
apalGpio_t moduleGpioWlGdo0= {
153
/**
154
 * @brief   WL_GDO0 input signal GPIO.
155
 */
156
static apalGpio_t _gpioWlGdo0= {
167 157
  /* port */ GPIOB,
168 158
  /* pad  */ GPIOB_WL_GDO0,
169 159
};
160
apalControlGpio_t moduleGpioWlGdo0 = {
161
  /* GPIO */ &_gpioWlGdo0,
162
  /* meta */ {
163
    /* direction      */ APAL_GPIO_DIRECTION_INPUT,
164
    /* active state   */ APAL_GPIO_ACTIVE_HIGH,
165
    /* interrupt edge */ APAL_GPIO_EDGE_BOTH,
166
  },
167
};
170 168

  
171
apalGpio_t moduleGpioLightXlat = {
169
/**
170
 * @brief   LIGHT_XLAT output signal GPIO.
171
 */
172
static apalGpio_t _gpioLightXlat = {
172 173
  /* port */ GPIOC,
173 174
  /* pad  */ GPIOC_LIGHT_XLAT,
174 175
};
176
apalControlGpio_t moduleGpioLightXlat = {
177
  /* GPIO */ &_gpioLightXlat,
178
  /* meta */ {
179
    /* direction      */ APAL_GPIO_DIRECTION_OUTPUT,
180
    /* active state   */ TLC5947_LLD_XLAT_ACTIVE_STATE,
181
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
182
  },
183
};
175 184

  
176
apalGpio_t moduleGpioSysPd = {
185
/**
186
 * @brief   SYS_PD bidirectional signal GPIO.
187
 */
188
static apalGpio_t _gpioSysPd = {
177 189
  /* port */ GPIOC,
178 190
  /* pad  */ GPIOC_SYS_PD_N,
179 191
};
192
apalControlGpio_t moduleGpioSysPd = {
193
  /* GPIO */ &_gpioSysPd,
194
  /* meta */ {
195
    /* direction      */ APAL_GPIO_DIRECTION_BIDIRECTIONAL,
196
    /* active state   */ APAL_GPIO_ACTIVE_LOW,
197
    /* interrupt edge */ APAL_GPIO_EDGE_BOTH,
198
  },
199
};
180 200

  
181
apalGpio_t moduleGpioSysSync = {
201
/**
202
 * @brief   SYS_SYNC bidirectional signal GPIO.
203
 */
204
static apalGpio_t _gpioSysSync = {
182 205
  /* port */ GPIOD,
183 206
  /* pad  */ GPIOD_SYS_INT_N,
184 207
};
208
apalControlGpio_t moduleGpioSysSync = {
209
  /* GPIO */ &_gpioSysSync,
210
  /* meta */ {
211
    /* direction      */ APAL_GPIO_DIRECTION_BIDIRECTIONAL,
212
    /* active state   */ APAL_GPIO_ACTIVE_LOW,
213
    /* interrupt edge */ APAL_GPIO_EDGE_BOTH,
214
  },
215
};
185 216

  
186 217
/** @} */
187 218

  
......
205 236
 */
206 237
/*===========================================================================*/
207 238

  
208
apalControlGpio_t moduleSsspGpioPd = {
209
  /* GPIO */ &moduleGpioSysPd,
210
  /* meta */ {
211
    /* active state */ APAL_GPIO_ACTIVE_LOW,
212
    /* edge         */ APAL_GPIO_EDGE_FALLING,
213
    /* direction    */ APAL_GPIO_DIRECTION_BIDIRECTIONAL,
214
  },
215
};
216

  
217
apalControlGpio_t moduleSsspGpioSync = {
218
  /* GPIO */ &moduleGpioSysSync,
219
  /* meta */ {
220
    /* active state */ APAL_GPIO_ACTIVE_LOW,
221
    /* edge         */ APAL_GPIO_EDGE_FALLING,
222
    /* direction    */ APAL_GPIO_DIRECTION_BIDIRECTIONAL,
223
  },
224
};
225

  
226
apalControlGpio_t moduleSsspGpioDn = {
227
  /* GPIO */ &moduleGpioSysUartDn,
228
  /* meta */ {
229
    /* active state */ APAL_GPIO_ACTIVE_LOW,
230
    /* edge         */ APAL_GPIO_EDGE_FALLING,
231
    /* direction    */ APAL_GPIO_DIRECTION_BIDIRECTIONAL,
232
  },
233
};
234

  
235 239
/** @} */
236 240

  
237 241
/*===========================================================================*/
......
248 252

  
249 253
TLC5947Driver moduleLldLedPwm = {
250 254
  /* SPI driver         */ &MODULE_HAL_SPI_LIGHT,
251
  /* BLANK signal GPIO  */ {
252
    /* GPIO */ &moduleGpioLightBlank,
253
    /* meta */ {
254
      /* active state */ TLC5947_LLD_BLANK_ACTIVE_STATE,
255
      /* edge         */ APAL_GPIO_EDGE_NONE,
256
      /* direction    */ APAL_GPIO_DIRECTION_OUTPUT,
257
    },
258
  },
259
  /* XLAT signal GPIO   */ {
260
    /* GPIO */ &moduleGpioLightXlat,
261
    /* meta */ {
262
      /* active state */ TLC5947_LLD_XLAT_ACTIVE_STATE,
263
      /* edge         */ APAL_GPIO_EDGE_NONE,
264
      /* direction    */ APAL_GPIO_DIRECTION_OUTPUT,
265
    },
266
  },
255
  /* BLANK signal GPIO  */ &moduleGpioLightBlank,
256
  /* XLAT signal GPIO   */ &moduleGpioLightXlat,
267 257
};
268 258

  
269 259
TPS2051BDriver moduleLldPowerSwitchLaser = {
270
  /* laser enable gpio */ {
271
    /* GPIO */ &moduleGpioLaserEn,
272
    /* meta */ {
273
      /* active state */ APAL_GPIO_ACTIVE_HIGH,
274
      /* edge         */ APAL_GPIO_EDGE_NONE,
275
      /* direction    */ APAL_GPIO_DIRECTION_OUTPUT,
276
    },
277
  },
278
  /* laser overcurrent gpio */ {
279
    /* GPIO         */ &moduleGpioLaserOc,
280
    /* meta */ {
281
      /* active state */ APAL_GPIO_ACTIVE_LOW,
282
      /* edge         */ APAL_GPIO_EDGE_NONE,
283
      /* direction    */ APAL_GPIO_DIRECTION_INPUT,
284
    },
285
  },
260
  /* laser enable GPIO      */ &moduleGpioLaserEn,
261
  /* laser overcurrent GPIO */ &moduleGpioLaserOc,
286 262
};
287 263

  
288 264
/** @} */

Also available in: Unified diff