Statistics
| Branch: | Tag: | Revision:

amiro-os / modules / LightRing_1-2 / module.c @ 70dd091e

History | View | Annotate | Download (21.201 KB)

1 9ae7c4f3 Thomas Schöpping
/*
2
AMiRo-OS is an operating system designed for the Autonomous Mini Robot (AMiRo) platform.
3
Copyright (C) 2016..2019  Thomas Schöpping et al.
4

5
This program is free software: you can redistribute it and/or modify
6
it under the terms of the GNU General Public License as published by
7
the Free Software Foundation, either version 3 of the License, or
8
(at your option) any later version.
9

10
This program is distributed in the hope that it will be useful,
11
but WITHOUT ANY WARRANTY; without even the implied warranty of
12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
GNU General Public License for more details.
14

15
You should have received a copy of the GNU General Public License
16
along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
*/
18
19
/**
20
 * @file
21 034cb15a Thomas Schöpping
 * @brief   Structures and constant for the LightRing v1.2 module.
22 9ae7c4f3 Thomas Schöpping
 *
23
 * @addtogroup lightring_module
24
 * @{
25
 */
26
27
#include "module.h"
28
29
/*===========================================================================*/
30
/**
31
 * @name Module specific functions
32
 * @{
33
 */
34
/*===========================================================================*/
35
36
/** @} */
37
38
/*===========================================================================*/
39
/**
40
 * @name ChibiOS/HAL configuration
41
 * @{
42
 */
43
/*===========================================================================*/
44
45
CANConfig moduleHalCanConfig = {
46
  /* mcr  */ CAN_MCR_ABOM | CAN_MCR_AWUM | CAN_MCR_TXFP,
47
  /* btr  */ CAN_BTR_SJW(1) | CAN_BTR_TS2(2) | CAN_BTR_TS1(13) | CAN_BTR_BRP(1),
48
};
49
50 ee884101 Thomas Schöpping
I2CConfig moduleHalI2cEepromPwrmtrBreakoutConfig = {
51 9ae7c4f3 Thomas Schöpping
  /* I²C mode   */ OPMODE_I2C,
52
  /* frequency  */ 400000, // TODO: replace with some macro (-> ChibiOS/HAL)
53
  /* duty cycle */ FAST_DUTY_CYCLE_2,
54
};
55
56
SerialConfig moduleHalProgIfConfig = {
57
  /* bit rate */ 115200,
58
  /* CR1      */ 0,
59
  /* CR1      */ 0,
60
  /* CR1      */ 0,
61
};
62
63
SPIConfig moduleHalSpiLightConfig = {
64
  /* circular buffer mode        */ false,
65
  /* callback function pointer   */ NULL,
66 3106e8cc Thomas Schöpping
  /* chip select line port       */ PAL_PORT(LINE_LIGHT_XLAT),
67
  /* chip select line pad number */ PAL_PAD(LINE_LIGHT_XLAT),
68 9ae7c4f3 Thomas Schöpping
  /* CR1                         */ SPI_CR1_BR_0 | SPI_CR1_BR_1,
69
  /* CR2                         */ SPI_CR2_RXDMAEN | SPI_CR2_TXDMAEN,
70
};
71
72 0b989911 Cung Sang
#if (BOARD_DW1000_CONNECTED == true)
73
74
/*! SPI (high speed) configuration for DW1000 */
75
SPIConfig moduleHalSpiUwbHsConfig = {
76
  /* circular buffer mode        */ false,
77
  /* callback function pointer   */ NULL,
78
  /* chip select line port       */ PAL_PORT(LINE_SPI_SS_N),
79
  /* chip select line pad number */ PAL_PAD(LINE_SPI_SS_N),
80
  /* CR1                         */ 0,                                  // 36/2 Mbps
81
  /* CR2                         */ SPI_CR2_RXDMAEN | SPI_CR2_TXDMAEN,  // 0
82
};
83
/*! SPI (low speed) configuration for DW1000 */
84
SPIConfig moduleHalSpiUwbLsConfig = {
85
  /* circular buffer mode        */ false,
86
  /* callback function pointer   */ NULL,
87
  /* chip select line port       */ PAL_PORT(LINE_SPI_SS_N),
88
  /* chip select line pad number */ PAL_PAD(LINE_SPI_SS_N),
89
  /* CR1                         */ SPI_CR1_BR_1 | SPI_CR1_BR_0,        // 36/16 Mbps
90
  /* CR2                         */ SPI_CR2_RXDMAEN | SPI_CR2_TXDMAEN,  // 0
91
};
92
93
#endif /* BOARD_DW1000_CONNECTED == true */
94
95 9ae7c4f3 Thomas Schöpping
96
/*===========================================================================*/
97
/**
98
 * @name GPIO definitions
99
 * @{
100
 */
101
/*===========================================================================*/
102
103
/**
104
 * @brief   LIGHT_BANK output signal GPIO.
105
 */
106
static apalGpio_t _gpioLightBlank = {
107 3106e8cc Thomas Schöpping
  /* line */ LINE_LIGHT_BLANK,
108 9ae7c4f3 Thomas Schöpping
};
109
ROMCONST apalControlGpio_t moduleGpioLightBlank = {
110
  /* GPIO */ &_gpioLightBlank,
111
  /* meta */ {
112
    /* direction      */ APAL_GPIO_DIRECTION_OUTPUT,
113
    /* active state   */ TLC5947_LLD_BLANK_ACTIVE_STATE,
114
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
115
  },
116
};
117
118
/**
119
 * @brief   RS232_R_EN_N output signal GPIO.
120
 */
121
static apalGpio_t _gpioRs232En = {
122 3106e8cc Thomas Schöpping
  /* line */ LINE_RS232_R_EN_N,
123 9ae7c4f3 Thomas Schöpping
};
124
ROMCONST apalControlGpio_t moduleGpioRs232En = {
125
  /* GPIO */ &_gpioRs232En,
126
  /* meta */ {
127
    /* direction      */ APAL_GPIO_DIRECTION_OUTPUT,
128
    /* active state   */ APAL_GPIO_ACTIVE_LOW, //TODO
129
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
130
  },
131
};
132
133
/**
134
 * @brief   SW_V33_EN output signal GPIO.
135
 */
136
static apalGpio_t _gpioSwV33En = {
137 3106e8cc Thomas Schöpping
  /* line */ LINE_SW_V33_EN,
138 9ae7c4f3 Thomas Schöpping
};
139
ROMCONST apalControlGpio_t moduleGpioSwV33En = {
140
  /* GPIO */ &_gpioSwV33En,
141
  /* meta */ {
142
    /* direction      */ APAL_GPIO_DIRECTION_OUTPUT,
143 ee884101 Thomas Schöpping
    /* active state   */ MIC9404x_LLD_EN_ACTIVE_STATE,
144 9ae7c4f3 Thomas Schöpping
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
145
  },
146
};
147
148 9acb8326 Thomas Schöpping
// The 4.2V switch is disabled due to a hardware bug.
149
///**
150
// * @brief   SW_V42_EN output signal GPIO.
151
// */
152
//static apalGpio_t _gpioSwV42En = {
153
//  /* line */ LINE_SW_V42_EN,
154
//};
155
//ROMCONST apalControlGpio_t moduleGpioSwV42En = {
156
//  /* GPIO */ &_gpioSwV42En,
157
//  /* meta */ {
158
//    /* direction      */ APAL_GPIO_DIRECTION_OUTPUT,
159
//    /* active state   */ MIC9404x_LLD_EN_ACTIVE_STATE,
160
//    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
161
//  },
162
//};
163 9ae7c4f3 Thomas Schöpping
164
/**
165
 * @brief   SW_V50_EN output signal GPIO.
166
 */
167
static apalGpio_t _gpioSwV50En = {
168 3106e8cc Thomas Schöpping
  /* line */ LINE_SW_V50_EN,
169 9ae7c4f3 Thomas Schöpping
};
170
ROMCONST apalControlGpio_t moduleGpioSwV50En = {
171
  /* GPIO */ &_gpioSwV50En,
172
  /* meta */ {
173
    /* direction      */ APAL_GPIO_DIRECTION_OUTPUT,
174 ee884101 Thomas Schöpping
    /* active state   */ MIC9404x_LLD_EN_ACTIVE_STATE,
175 9ae7c4f3 Thomas Schöpping
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
176
  },
177
};
178
179
/**
180
 * @brief   IO_3 breakout signal GPIO.
181
 */
182
static apalGpio_t _gpioBreakoutIo3 = {
183 3106e8cc Thomas Schöpping
  /* line */ LINE_IO_3,
184 9ae7c4f3 Thomas Schöpping
};
185
apalControlGpio_t moduleGpioBreakoutIo3 = {
186
  /* GPIO */ &_gpioBreakoutIo3,
187
  /* meta */ {
188
    /* direction      */ APAL_GPIO_DIRECTION_UNDEFINED,
189
    /* active state   */ APAL_GPIO_ACTIVE_LOW,
190
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
191
  },
192
};
193
194
/**
195
 * @brief   IO_5 breakout signal GPIO.
196
 */
197
static apalGpio_t _gpioBreakoutIo5 = {
198 3106e8cc Thomas Schöpping
  /* line */ LINE_IO_5,
199 9ae7c4f3 Thomas Schöpping
};
200
apalControlGpio_t moduleGpioBreakoutIo5 = {
201
  /* GPIO */ &_gpioBreakoutIo5,
202
  /* meta */ {
203
    /* direction      */ APAL_GPIO_DIRECTION_UNDEFINED,
204
    /* active state   */ APAL_GPIO_ACTIVE_LOW,
205
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
206
  },
207
};
208
209
/**
210
 * @brief   IO_6 breakout signal GPIO.
211
 */
212
static apalGpio_t _gpioBreakoutIo6 = {
213 3106e8cc Thomas Schöpping
  /* line */ LINE_IO_6,
214 9ae7c4f3 Thomas Schöpping
};
215
apalControlGpio_t moduleGpioBreakoutIo6 = {
216
  /* GPIO */ &_gpioBreakoutIo6,
217
  /* meta */ {
218
    /* direction      */ APAL_GPIO_DIRECTION_UNDEFINED,
219
    /* active state   */ APAL_GPIO_ACTIVE_LOW,
220
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
221
  },
222
};
223
224
/**
225
 * @brief   SYS_UART_DN bidirectional signal GPIO.
226
 */
227
static apalGpio_t _gpioSysUartDn = {
228 3106e8cc Thomas Schöpping
  /* line */ LINE_SYS_UART_DN,
229 9ae7c4f3 Thomas Schöpping
};
230
ROMCONST apalControlGpio_t moduleGpioSysUartDn = {
231
  /* GPIO */ &_gpioSysUartDn,
232
  /* meta */ {
233
    /* direction      */ APAL_GPIO_DIRECTION_BIDIRECTIONAL,
234
    /* active state   */ APAL_GPIO_ACTIVE_LOW,
235
    /* interrupt edge */ APAL_GPIO_EDGE_BOTH,
236
  },
237
};
238
239 0b989911 Cung Sang
#if (BOARD_DW1000_CONNECTED == true)
240 9ae7c4f3 Thomas Schöpping
/**
241 0b989911 Cung Sang
 * @brief   DW1000 interrrupt input signal GPIO.
242 9ae7c4f3 Thomas Schöpping
 */
243 0b989911 Cung Sang
static apalGpio_t _gpioDw1000Irqn = {
244
  /* line */  LINE_IO_8,            // (GPIOB, GPIOB_IO_8),
245
};
246
ROMCONST apalControlGpio_t moduleGpioDw1000Irqn = {
247
  /* GPIO */ &_gpioDw1000Irqn,
248
  /* meta */ {
249
    /* direction      */ APAL_GPIO_DIRECTION_INPUT,
250
    /* active state   */ APAL_GPIO_ACTIVE_LOW,
251
    /* interrupt edge */ APAL_GPIO_EDGE_RISING,
252
  },
253
};
254
255
/**
256
 * @brief   DW1000 reset output signal GPIO.
257
 */
258
static apalGpio_t _gpioDw1000Reset = {
259 3106e8cc Thomas Schöpping
  /* line */ LINE_IO_7,
260 9ae7c4f3 Thomas Schöpping
};
261 0b989911 Cung Sang
ROMCONST apalControlGpio_t moduleGpioDw1000Reset = {
262
  /* GPIO */ &_gpioDw1000Reset,
263 9ae7c4f3 Thomas Schöpping
  /* meta */ {
264 0b989911 Cung Sang
    /* direction      */ APAL_GPIO_DIRECTION_BIDIRECTIONAL,
265 9ae7c4f3 Thomas Schöpping
    /* active state   */ APAL_GPIO_ACTIVE_LOW,
266
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
267
  },
268
};
269
270
/**
271 0b989911 Cung Sang
 * @brief   IO_2 breakout signal GPIO.
272
 */
273
static apalGpio_t _gpioDw1000WakeUp = {
274
  /* line */ LINE_IO_2,
275
};
276
ROMCONST apalControlGpio_t moduleGpioDw1000WakeUp = {
277
  /* GPIO */ &_gpioDw1000WakeUp,
278
  /* meta */ {
279
    /* direction      */ APAL_GPIO_DIRECTION_OUTPUT,
280
    /* active state   */ APAL_GPIO_ACTIVE_HIGH,
281
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
282
  },
283
};
284
285
/**
286
 * @brief   DW1000 SPI chip select output signal GPIO.
287
 */
288
static apalGpio_t _gpioSpiChipSelect = {
289
  /* line */ LINE_SPI_SS_N,
290
};
291
ROMCONST apalControlGpio_t moduleGpioSpiChipSelect = {
292
  /* GPIO */ &_gpioSpiChipSelect,
293
  /* meta */ {
294
    /* direction      */ APAL_GPIO_DIRECTION_OUTPUT,
295
    /* active state   */ APAL_GPIO_ACTIVE_LOW,
296
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
297
  },
298
};
299
#else
300
/**
301 9ae7c4f3 Thomas Schöpping
 * @brief   IO_8 breakout signal GPIO.
302
 */
303
static apalGpio_t _gpioBreakoutIo8 = {
304 3106e8cc Thomas Schöpping
  /* line */ LINE_IO_8,
305 9ae7c4f3 Thomas Schöpping
};
306
apalControlGpio_t moduleGpioBreakoutIo8 = {
307
  /* GPIO */ &_gpioBreakoutIo8,
308
  /* meta */ {
309
    /* direction      */ APAL_GPIO_DIRECTION_UNDEFINED,
310
    /* active state   */ APAL_GPIO_ACTIVE_LOW,
311
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
312
  },
313
};
314
315
/**
316 0b989911 Cung Sang
 * @brief   IO_7 breakout signal GPIO.
317
 */
318
static apalGpio_t _gpioBreakoutIo7 = {
319
  /* line */ LINE_IO_7,
320
};
321
apalControlGpio_t moduleGpioBreakoutIo7 = {
322
  /* GPIO */ &_gpioBreakoutIo7,
323
  /* meta */ {
324
    /* direction      */ APAL_GPIO_DIRECTION_UNDEFINED,
325
    /* active state   */ APAL_GPIO_ACTIVE_LOW,
326
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
327
  },
328
};
329
330
/**
331
 * @brief   IO_2 breakout signal GPIO.
332
 */
333
static apalGpio_t _gpioBreakoutIo2 = {
334
  /* line */ LINE_IO_2,
335
};
336
apalControlGpio_t moduleGpioBreakoutIo2 = {
337
  /* GPIO */ &_gpioBreakoutIo2,
338
  /* meta */ {
339
    /* direction      */ APAL_GPIO_DIRECTION_UNDEFINED,
340
    /* active state   */ APAL_GPIO_ACTIVE_LOW,
341
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
342
  },
343
};
344
#endif  /* BOARD_DW1000_CONNECTED == true */
345
346
347
/**
348 9ae7c4f3 Thomas Schöpping
 * @brief   IO_4 breakout signal GPIO.
349
 */
350
static apalGpio_t _gpioBreakoutIo4 = {
351 3106e8cc Thomas Schöpping
  /* line */ LINE_IO_4,
352 9ae7c4f3 Thomas Schöpping
};
353
apalControlGpio_t moduleGpioBreakoutIo4 = {
354
  /* GPIO */ &_gpioBreakoutIo4,
355
  /* meta */ {
356
    /* direction      */ APAL_GPIO_DIRECTION_UNDEFINED,
357
    /* active state   */ APAL_GPIO_ACTIVE_LOW,
358
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
359
  },
360
};
361
362
/**
363
 * @brief   IO_1 breakout signal GPIO.
364
 */
365
static apalGpio_t _gpioBreakoutIo1 = {
366 3106e8cc Thomas Schöpping
  /* line */ LINE_IO_1,
367 9ae7c4f3 Thomas Schöpping
};
368
apalControlGpio_t moduleGpioBreakoutIo1 = {
369
  /* GPIO */ &_gpioBreakoutIo1,
370
  /* meta */ {
371
    /* direction      */ APAL_GPIO_DIRECTION_UNDEFINED,
372
    /* active state   */ APAL_GPIO_ACTIVE_LOW,
373
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
374
  },
375
};
376
377
378
/**
379
 * @brief   LED output signal GPIO.
380
 */
381
static apalGpio_t _gpioLed = {
382 3106e8cc Thomas Schöpping
  /* line */ LINE_LED,
383 9ae7c4f3 Thomas Schöpping
};
384
ROMCONST apalControlGpio_t moduleGpioLed = {
385
  /* GPIO */ &_gpioLed,
386
  /* meta */ {
387
    /* direction      */ APAL_GPIO_DIRECTION_OUTPUT,
388 4c72a54c Thomas Schöpping
    /* active state   */ APAL_GPIO_ACTIVE_LOW,
389 9ae7c4f3 Thomas Schöpping
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
390
  },
391
};
392
393
/**
394 c930aa01 Thomas Schöpping
 * @brief   LIGHT_XLAT output signal GPIO.
395
 */
396
static apalGpio_t _gpioLightXlat = {
397
  /* line */ LINE_LIGHT_XLAT,
398
};
399
ROMCONST apalControlGpio_t moduleGpioLightXlat = {
400
  /* GPIO */ &_gpioLightXlat,
401
  /* meta */ {
402
    /* direction      */ APAL_GPIO_DIRECTION_OUTPUT,
403
    /* active state   */ (TLC5947_LLD_XLAT_UPDATE_EDGE == APAL_GPIO_EDGE_RISING) ? APAL_GPIO_ACTIVE_HIGH : APAL_GPIO_ACTIVE_LOW,
404
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
405
  },
406
};
407
408
/**
409 9ae7c4f3 Thomas Schöpping
 * @brief   SW_V18_EN output signal GPIO.
410
 */
411
static apalGpio_t _gpioSwV18En = {
412 3106e8cc Thomas Schöpping
  /* line */ LINE_SW_V18_EN,
413 9ae7c4f3 Thomas Schöpping
};
414
ROMCONST apalControlGpio_t moduleGpioSwV18En = {
415
  /* GPIO */ &_gpioSwV18En,
416
  /* meta */ {
417
    /* direction      */ APAL_GPIO_DIRECTION_OUTPUT,
418 ee884101 Thomas Schöpping
    /* active state   */ MIC9404x_LLD_EN_ACTIVE_STATE,
419 9ae7c4f3 Thomas Schöpping
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
420
  },
421
};
422
423
/**
424
 * @brief   SW_VSYS_EN output signal GPIO.
425
 */
426
static apalGpio_t _gpioSwVsysEn = {
427 3106e8cc Thomas Schöpping
  /* line */ LINE_SW_VSYS_EN,
428 9ae7c4f3 Thomas Schöpping
};
429
ROMCONST apalControlGpio_t moduleGpioSwVsysEn = {
430
  /* GPIO */ &_gpioSwVsysEn,
431
  /* meta */ {
432
    /* direction      */ APAL_GPIO_DIRECTION_OUTPUT,
433 ee884101 Thomas Schöpping
    /* active state   */ APAL_GPIO_ACTIVE_HIGH,
434 9ae7c4f3 Thomas Schöpping
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
435
  },
436
};
437
438
/**
439
 * @brief   SYS_UART_UP bidirectional signal GPIO.
440
 */
441
static apalGpio_t _gpioSysUartUp = {
442 3106e8cc Thomas Schöpping
  /* line */ LINE_SYS_UART_UP,
443 9ae7c4f3 Thomas Schöpping
};
444
ROMCONST apalControlGpio_t moduleGpioSysUartUp = {
445
  /* GPIO */ &_gpioSysUartUp,
446
  /* meta */ {
447
    /* direction      */ APAL_GPIO_DIRECTION_BIDIRECTIONAL,
448
    /* active state   */ APAL_GPIO_ACTIVE_LOW,
449
    /* interrupt edge */ APAL_GPIO_EDGE_BOTH,
450
  },
451
};
452
453
/**
454
 * @brief   SYS_PD bidirectional signal GPIO.
455
 */
456
static apalGpio_t _gpioSysPd = {
457 3106e8cc Thomas Schöpping
  /* line */ LINE_SYS_PD_N,
458 9ae7c4f3 Thomas Schöpping
};
459
ROMCONST apalControlGpio_t moduleGpioSysPd = {
460
  /* GPIO */ &_gpioSysPd,
461
  /* meta */ {
462
    /* direction      */ APAL_GPIO_DIRECTION_BIDIRECTIONAL,
463
    /* active state   */ APAL_GPIO_ACTIVE_LOW,
464
    /* interrupt edge */ APAL_GPIO_EDGE_BOTH,
465
  },
466
};
467
468
/**
469
 * @brief   SYS_SYNC bidirectional signal GPIO.
470
 */
471
static apalGpio_t _gpioSysSync = {
472 3106e8cc Thomas Schöpping
  /* line */ LINE_SYS_INT_N,
473 9ae7c4f3 Thomas Schöpping
};
474
ROMCONST apalControlGpio_t moduleGpioSysSync = {
475
  /* GPIO */ &_gpioSysSync,
476
  /* meta */ {
477
    /* direction      */ APAL_GPIO_DIRECTION_BIDIRECTIONAL,
478
    /* active state   */ APAL_GPIO_ACTIVE_LOW,
479
    /* interrupt edge */ APAL_GPIO_EDGE_BOTH,
480
  },
481
};
482
483
/** @} */
484
485
/*===========================================================================*/
486
/**
487
 * @name AMiRo-OS core configurations
488
 * @{
489
 */
490
/*===========================================================================*/
491
492
#if (AMIROOS_CFG_SHELL_ENABLE == true) || (AMIROOS_CFG_TESTS_ENABLE == true) || defined(__DOXYGEN__)
493
ROMCONST char* moduleShellPrompt = "LightRing";
494
#endif /* (AMIROOS_CFG_SHELL_ENABLE == true) || (AMIROOS_CFG_TESTS_ENABLE == true) */
495
496
/** @} */
497
498
/*===========================================================================*/
499
/**
500
 * @name Startup Shutdown Synchronization Protocol (SSSP)
501
 * @{
502
 */
503
/*===========================================================================*/
504
505
/** @} */
506
507
/*===========================================================================*/
508
/**
509 0b989911 Cung Sang
 * @name Hardware specific wrappers Functions
510
 * @{
511
 */
512
/*===========================================================================*/
513
514
#if (BOARD_DW1000_CONNECTED == true)
515
/*! @brief Manually reset the DW1000 module  */
516
void reset_DW1000(void){
517
518
  // Set the pin as output
519
  palSetLineMode(moduleGpioDw1000Reset.gpio->line, APAL_GPIO_DIRECTION_OUTPUT);
520
521
  //drive the RSTn pin low
522
  apalGpioWrite(moduleGpioDw1000Reset.gpio, APAL_GPIO_LOW);
523
524
  //put the pin back to tri-state ... as input
525
//  palSetLineMode(moduleGpioDw1000Reset.gpio->line, APAL_GPIO_DIRECTION_INPUT); // TODO:
526
527
  aosThdMSleep(2);
528
}
529
530
/*! @brief entry point to the IRQn event in DW1000 module
531
 *
532
 * */
533
void process_deca_irq(void){
534
  do{
535
    dwt_isr();
536
   //while IRS line active (ARM can only do edge sensitive interrupts)
537
  }while(port_CheckEXT_IRQ() == 1);
538
}
539
540
/*! @brief Check the current value of GPIO pin and return the value */
541
apalGpioState_t port_CheckEXT_IRQ(void) {
542
  apalGpioState_t  val;
543
  apalGpioRead(moduleGpioDw1000Irqn.gpio, &val);
544
  return val;
545
}
546
547
/*! @brief Manually set the chip select pin of the SPI */
548
void set_SPI_chip_select(void){
549
  apalGpioWrite(moduleGpioSpiChipSelect.gpio, APAL_GPIO_HIGH);
550
}
551
552
/*! @brief Manually reset the chip select pin of the SPI */
553
void clear_SPI_chip_select(void){
554
  apalGpioWrite(moduleGpioSpiChipSelect.gpio, APAL_GPIO_LOW);
555
}
556
557
/*! @brief Change the SPI speed configuration on the fly */
558
void setHighSpeed_SPI(bool speedValue, DW1000Driver* drv){
559
560
  spiStop(drv->spid);
561
562
  if (speedValue == FALSE){
563
    spiStart(drv->spid, &moduleHalSpiUwbLsConfig);  // low speed spi configuration
564
  }
565
  else{
566
    spiStart(drv->spid, &moduleHalSpiUwbHsConfig); // high speed spi configuration
567
  }
568
}
569
#endif /* (BOARD_DW1000_CONNECTED == true) */
570
/** @} */
571
572
573
/*===========================================================================*/
574
/**
575 9ae7c4f3 Thomas Schöpping
 * @name Low-level drivers
576
 * @{
577
 */
578
/*===========================================================================*/
579
580
AT24C01BDriver moduleLldEeprom = {
581 ee884101 Thomas Schöpping
  /* I2C driver   */ &MODULE_HAL_I2C_EEPROM_PWRMTR_BREAKOUT,
582 9ae7c4f3 Thomas Schöpping
  /* I2C address  */ 0x00u,
583
};
584
585 ee884101 Thomas Schöpping
INA219Driver moduleLldPowerMonitorVled = {
586
  /* I2C Driver       */ &MODULE_HAL_I2C_EEPROM_PWRMTR_BREAKOUT,
587
  /* I²C address      */ INA219_LLD_I2C_ADDR_FIXED,
588
  /* current LSB (uA) */ 0x00u,
589
  /* configuration    */ NULL,
590
};
591
592
LEDDriver moduleLldStatusLed = {
593
  /* LED enable Gpio */ &moduleGpioLed,
594
};
595
596
MIC9404xDriver moduleLldPowerSwitchV18 = {
597
  /* power enable GPIO  */ &moduleGpioSwV18En,
598
};
599
600
MIC9404xDriver moduleLldPowerSwitchV33 = {
601
  /* power enable GPIO  */ &moduleGpioSwV33En,
602
};
603
604 9acb8326 Thomas Schöpping
// The 4.2V switch is disabled due to a hardware bug.
605
//MIC9404xDriver moduleLldPowerSwitchV42 = {
606
//  /* power enable GPIO  */ &moduleGpioSwV42En,
607
//};
608 ee884101 Thomas Schöpping
609
MIC9404xDriver moduleLldPowerSwitchV50 = {
610
  /* power enable GPIO  */ &moduleGpioSwV50En,
611
};
612
613
MIC9404xDriver moduleLldPowerSwitchVsys = {
614
  /* power enable GPIO  */ &moduleGpioSwVsysEn,
615
};
616
617 4c72a54c Thomas Schöpping
// TODO: add SNx5C3221E
618
619 9ae7c4f3 Thomas Schöpping
TLC5947Driver moduleLldLedPwm = {
620
  /* SPI driver         */ &MODULE_HAL_SPI_LIGHT,
621
  /* BLANK signal GPIO  */ &moduleGpioLightBlank,
622 c930aa01 Thomas Schöpping
  /* XLAT signal GPIO   */ &moduleGpioLightXlat,
623 9ae7c4f3 Thomas Schöpping
};
624
625 0b989911 Cung Sang
#if (BOARD_DW1000_CONNECTED == true)
626
DW1000Driver moduleLldDw1000 = {
627
  /* SPI driver         */ &MODULE_HAL_SPI_UWB,
628
  /* ext interrupt      */ &moduleGpioDw1000Irqn,
629
  /* RESET DW1000       */ &moduleGpioDw1000Reset,
630
};
631
632
MIC9404xDriver moduleLldPowerSwitchDw1000 = {
633
  /* power enable GPIO  */ &moduleGpioSwVsysEn,
634
};
635
#endif /* (BOARD_DW1000_CONNECTED == true) */
636
637 9ae7c4f3 Thomas Schöpping
/** @} */
638
639
/*===========================================================================*/
640
/**
641 4c72a54c Thomas Schöpping
 * @name Tests
642 9ae7c4f3 Thomas Schöpping
 * @{
643
 */
644
/*===========================================================================*/
645
#if (AMIROOS_CFG_TESTS_ENABLE == true) || defined(__DOXYGEN__)
646
647
/*
648 4c72a54c Thomas Schöpping
 * AT24C01BN-SH-B (EEPROM)
649 9ae7c4f3 Thomas Schöpping
 */
650 4c72a54c Thomas Schöpping
#include <module_test_AT24C01B.h>
651
static int _testAt24co1bShellCmdCb(BaseSequentialStream* stream, int argc, char* argv[])
652 9ae7c4f3 Thomas Schöpping
{
653 4c72a54c Thomas Schöpping
  return moduleTestAt24c01bShellCb(stream, argc, argv, NULL);
654 9ae7c4f3 Thomas Schöpping
}
655 4c72a54c Thomas Schöpping
AOS_SHELL_COMMAND(moduleTestAt24c01bShellCmd, "test:EEPROM", _testAt24co1bShellCmdCb);
656 9ae7c4f3 Thomas Schöpping
657
/*
658 ee884101 Thomas Schöpping
 * INA219 (power monitor)
659
 */
660 4c72a54c Thomas Schöpping
#include <module_test_INA219.h>
661
static int _testIna219ShellCmdCb(BaseSequentialStream* stream, int argc, char* argv[])
662 ee884101 Thomas Schöpping
{
663 4c72a54c Thomas Schöpping
  return moduleTestIna219ShellCb(stream, argc, argv, NULL);
664 ee884101 Thomas Schöpping
}
665 4c72a54c Thomas Schöpping
AOS_SHELL_COMMAND(moduleTestIna219ShellCmd, "test:PowerMonitor", _testIna219ShellCmdCb);
666 ee884101 Thomas Schöpping
667
/*
668
 * Status LED
669
 */
670 4c72a54c Thomas Schöpping
#include <module_test_LED.h>
671
static int _testLedShellCmdCb(BaseSequentialStream* stream, int argc, char* argv[])
672 ee884101 Thomas Schöpping
{
673 4c72a54c Thomas Schöpping
  return moduleTestLedShellCb(stream, argc, argv, NULL);
674 ee884101 Thomas Schöpping
}
675 4c72a54c Thomas Schöpping
AOS_SHELL_COMMAND(moduleTestLedShellCmd, "test:StatusLED", _testLedShellCmdCb);
676 ee884101 Thomas Schöpping
677
/*
678 4c72a54c Thomas Schöpping
 * MIC9404x (power switch)
679 ee884101 Thomas Schöpping
 */
680 4c72a54c Thomas Schöpping
#include <module_test_MIC9404x.h>
681
static int _testMic9404xShellCmdCb(BaseSequentialStream* stream, int argc, char* argv[])
682 ee884101 Thomas Schöpping
{
683 4c72a54c Thomas Schöpping
  return moduleTestMic9404xShellCb(stream, argc, argv, NULL);
684 ee884101 Thomas Schöpping
}
685 4c72a54c Thomas Schöpping
AOS_SHELL_COMMAND(moduleTestMic9404xShellCmd, "test:PowerSwitch", _testMic9404xShellCmdCb);
686
687
// TODO: add SNx5C3221E
688
689
/*
690
 * TLC5947 (24 channel PWM LED driver)
691
 */
692
#include <module_test_TLC5947.h>
693
static int _testTlc5947ShellCmdCb(BaseSequentialStream* stream, int argc, char* argv[])
694
{
695
  return moduleTestTlc5947ShellCb(stream, argc, argv, NULL);
696
}
697
AOS_SHELL_COMMAND(moduleTestTlc5947ShellCmd, "test:Lights", _testTlc5947ShellCmdCb);
698 ee884101 Thomas Schöpping
699 0b989911 Cung Sang
#if (BOARD_DW1000_CONNECTED == true) || defined(__DOXYGEN__)
700
/*
701
 * UwB Driver (DW1000)
702
 */
703
#include <module_test_DW1000.h>
704
static int _testDw1000ShellCmdCb(BaseSequentialStream* stream, int argc, char* argv[])
705
{
706
  return moduleTestDw1000ShellCb(stream, argc, argv, NULL);
707
}
708
AOS_SHELL_COMMAND(moduleTestDw1000ShellCmd, "test:DW1000", _testDw1000ShellCmdCb);
709
#endif /* (BOARD_DW1000_CONNECTED == true) */
710
711 ee884101 Thomas Schöpping
/*
712 4c72a54c Thomas Schöpping
 * entire module
713 9ae7c4f3 Thomas Schöpping
 */
714 4c72a54c Thomas Schöpping
static int _testAllShellCmdCb(BaseSequentialStream* stream, int argc, char* argv[])
715 9ae7c4f3 Thomas Schöpping
{
716
  (void)argc;
717
  (void)argv;
718 4c72a54c Thomas Schöpping
719
  int status = AOS_OK;
720
  char* targv[AMIROOS_CFG_SHELL_MAXARGS] = {NULL};
721
  aos_testresult_t result_test = {0, 0};
722
  aos_testresult_t result_total = {0, 0};
723
724
  /* AT24C01B (EEPROM) */
725
  status |= moduleTestAt24c01bShellCb(stream, 0, targv, &result_test);
726
  result_total = aosTestResultAdd(result_total, result_test);
727
728
  /* INA219 (power monitor) */
729
  status |= moduleTestIna219ShellCb(stream, 0, targv, &result_test);
730
  result_total = aosTestResultAdd(result_total, result_test);
731
732
  /* Status LED */
733
  status |= moduleTestLedShellCb(stream, 0, targv, &result_test);
734
  result_total = aosTestResultAdd(result_total, result_test);
735
736
  /* MIC9404x (power switch) */
737
  // 1.8V
738
  targv[1] = "1.8V";
739
  status |= moduleTestMic9404xShellCb(stream, 2, targv, &result_test);
740
  result_total = aosTestResultAdd(result_total, result_test);
741
  // 3.3V
742
  targv[1] = "3.3V";
743
  status |= moduleTestMic9404xShellCb(stream, 2, targv, &result_test);
744
  result_total = aosTestResultAdd(result_total, result_test);
745
// The 4.2V switch is disabled due to a hardware bug.
746
//  // 4.2V
747
//  targv[1] = "4.2V";
748
//  status |= moduleTestMic9404xShellCb(stream, 2, targv, &result_test);
749
//  result_total = aosTestResultAdd(result_total, result_test);
750
  // 5.0V
751
  targv[1] = "5.0V";
752
  status |= moduleTestMic9404xShellCb(stream, 2, targv, &result_test);
753
  result_total = aosTestResultAdd(result_total, result_test);
754
  //VSYS
755
  targv[1] = "VSYS";
756
  status |= moduleTestMic9404xShellCb(stream, 2, targv, &result_test);
757
  result_total = aosTestResultAdd(result_total, result_test);
758
  targv[1] = "";
759
760
  // TODO: add SNx5C3221E
761
762
  /* TLC5947 (24 channel PWM LED driver) */
763
  status |= moduleTestTlc5947ShellCb(stream, 0, targv, &result_test);
764
  result_total = aosTestResultAdd(result_total, result_test);
765
766
  // print total result
767
  chprintf(stream, "\n");
768
  aosTestResultPrintSummary(stream, &result_total, "entire module");
769
770
  return status;
771 9ae7c4f3 Thomas Schöpping
}
772 4c72a54c Thomas Schöpping
AOS_SHELL_COMMAND(moduleTestAllShellCmd, "test:all", _testAllShellCmdCb);
773
774 9ae7c4f3 Thomas Schöpping
#endif /* (AMIROOS_CFG_TESTS_ENABLE == true) */
775
776
/** @} */
777
/** @} */