Revision 0b989911 modules/LightRing_1-2/module.c
modules/LightRing_1-2/module.c | ||
---|---|---|
69 | 69 |
/* CR2 */ SPI_CR2_RXDMAEN | SPI_CR2_TXDMAEN, |
70 | 70 |
}; |
71 | 71 |
|
72 |
#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 |
|
|
72 | 95 |
|
73 | 96 |
/*===========================================================================*/ |
74 | 97 |
/** |
... | ... | |
213 | 236 |
}, |
214 | 237 |
}; |
215 | 238 |
|
239 |
#if (BOARD_DW1000_CONNECTED == true) |
|
216 | 240 |
/** |
217 |
* @brief IO_7 breakout signal GPIO.
|
|
241 |
* @brief DW1000 interrrupt input signal GPIO.
|
|
218 | 242 |
*/ |
219 |
static apalGpio_t _gpioBreakoutIo7 = { |
|
243 |
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 = { |
|
220 | 259 |
/* line */ LINE_IO_7, |
221 | 260 |
}; |
222 |
apalControlGpio_t moduleGpioBreakoutIo7 = {
|
|
223 |
/* GPIO */ &_gpioBreakoutIo7,
|
|
261 |
ROMCONST apalControlGpio_t moduleGpioDw1000Reset = {
|
|
262 |
/* GPIO */ &_gpioDw1000Reset,
|
|
224 | 263 |
/* meta */ { |
225 |
/* direction */ APAL_GPIO_DIRECTION_UNDEFINED,
|
|
264 |
/* direction */ APAL_GPIO_DIRECTION_BIDIRECTIONAL,
|
|
226 | 265 |
/* active state */ APAL_GPIO_ACTIVE_LOW, |
227 | 266 |
/* interrupt edge */ APAL_GPIO_EDGE_NONE, |
228 | 267 |
}, |
229 | 268 |
}; |
230 | 269 |
|
231 | 270 |
/** |
271 |
* @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 |
/** |
|
232 | 301 |
* @brief IO_8 breakout signal GPIO. |
233 | 302 |
*/ |
234 | 303 |
static apalGpio_t _gpioBreakoutIo8 = { |
... | ... | |
244 | 313 |
}; |
245 | 314 |
|
246 | 315 |
/** |
316 |
* @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 |
/** |
|
247 | 348 |
* @brief IO_4 breakout signal GPIO. |
248 | 349 |
*/ |
249 | 350 |
static apalGpio_t _gpioBreakoutIo4 = { |
... | ... | |
273 | 374 |
}, |
274 | 375 |
}; |
275 | 376 |
|
276 |
/** |
|
277 |
* @brief IO_2 breakout signal GPIO. |
|
278 |
*/ |
|
279 |
static apalGpio_t _gpioBreakoutIo2 = { |
|
280 |
/* line */ LINE_IO_2, |
|
281 |
}; |
|
282 |
apalControlGpio_t moduleGpioBreakoutIo2 = { |
|
283 |
/* GPIO */ &_gpioBreakoutIo2, |
|
284 |
/* meta */ { |
|
285 |
/* direction */ APAL_GPIO_DIRECTION_UNDEFINED, |
|
286 |
/* active state */ APAL_GPIO_ACTIVE_LOW, |
|
287 |
/* interrupt edge */ APAL_GPIO_EDGE_NONE, |
|
288 |
}, |
|
289 |
}; |
|
290 | 377 |
|
291 | 378 |
/** |
292 | 379 |
* @brief LED output signal GPIO. |
... | ... | |
419 | 506 |
|
420 | 507 |
/*===========================================================================*/ |
421 | 508 |
/** |
509 |
* @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 |
/** |
|
422 | 575 |
* @name Low-level drivers |
423 | 576 |
* @{ |
424 | 577 |
*/ |
... | ... | |
469 | 622 |
/* XLAT signal GPIO */ &moduleGpioLightXlat, |
470 | 623 |
}; |
471 | 624 |
|
625 |
#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 |
|
|
472 | 637 |
/** @} */ |
473 | 638 |
|
474 | 639 |
/*===========================================================================*/ |
... | ... | |
531 | 696 |
} |
532 | 697 |
AOS_SHELL_COMMAND(moduleTestTlc5947ShellCmd, "test:Lights", _testTlc5947ShellCmdCb); |
533 | 698 |
|
699 |
#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 |
|
|
534 | 711 |
/* |
535 | 712 |
* entire module |
536 | 713 |
*/ |
Also available in: Unified diff