Revision 0b989911 modules/LightRing_1-2/module.c

View differences:

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