dRonin  adbada4
dRonin firmware
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
board_hw_defs.c
Go to the documentation of this file.
1 
16 #include <pios_config.h>
17 #include <pios_board_info.h>
18 
19 #if defined(PIOS_INCLUDE_ANNUNC)
20 
21 #include <pios_annunc_priv.h>
22 static const struct pios_annunc pios_annuncs[] = {
23  [PIOS_LED_USB] = {
24  .pin = {
25  .gpio = GPIOB,
26  .init = {
27  .GPIO_Pin = GPIO_Pin_4,
28  .GPIO_Mode = GPIO_Mode_Out_PP,
29  .GPIO_Speed = GPIO_Speed_50MHz,
30  },
31  },
32  },
33  [PIOS_LED_LINK] = {
34  .pin = {
35  .gpio = GPIOB,
36  .init = {
37  .GPIO_Pin = GPIO_Pin_5,
38  .GPIO_Mode = GPIO_Mode_Out_PP,
39  .GPIO_Speed = GPIO_Speed_50MHz,
40  },
41  },
42  },
43  [PIOS_LED_RX] = {
44  .pin = {
45  .gpio = GPIOB,
46  .init = {
47  .GPIO_Pin = GPIO_Pin_6,
48  .GPIO_Mode = GPIO_Mode_Out_PP,
49  .GPIO_Speed = GPIO_Speed_50MHz,
50  },
51  },
52  },
53  [PIOS_LED_TX] = {
54  .pin = {
55  .gpio = GPIOB,
56  .init = {
57  .GPIO_Pin = GPIO_Pin_7,
58  .GPIO_Mode = GPIO_Mode_Out_PP,
59  .GPIO_Speed = GPIO_Speed_50MHz,
60  },
61  },
62  },
63 };
64 
65 static const struct pios_annunc_cfg pios_annunc_cfg = {
66  .annunciators = pios_annuncs,
67  .num_annunciators = NELEMENTS(pios_annuncs),
68 };
69 
70 const struct pios_annunc_cfg * PIOS_BOARD_HW_DEFS_GetLedCfg (uint32_t board_revision)
71 {
72  return &pios_annunc_cfg;
73 }
74 
75 #endif /* PIOS_INCLUDE_ANNUNC */
76 
77 #if defined(PIOS_INCLUDE_SPI)
78 
79 #include <pios_spi_priv.h>
80 
81 /* OP Interface
82  *
83  * NOTE: Leave this declared as const data so that it ends up in the
84  * .rodata section (ie. Flash) rather than in the .bss section (RAM).
85  */
86 
87 static const struct pios_spi_cfg pios_spi_rfm22b_cfg =
88 {
89  .regs = SPI1,
90 
91  .init =
92  {
93  .SPI_Mode = SPI_Mode_Master,
94  .SPI_Direction = SPI_Direction_2Lines_FullDuplex,
95  .SPI_DataSize = SPI_DataSize_8b,
96  .SPI_NSS = SPI_NSS_Soft,
97  .SPI_FirstBit = SPI_FirstBit_MSB,
98  .SPI_CRCPolynomial = 0,
99  .SPI_CPOL = SPI_CPOL_Low,
100  .SPI_CPHA = SPI_CPHA_1Edge,
101  .SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16, // slowest SCLK
102  },
103  .slave_count = 1,
104  .ssel =
105  {{
106  .gpio = GPIOA,
107  .init =
108  {
109  .GPIO_Pin = GPIO_Pin_4,
110  .GPIO_Speed = GPIO_Speed_10MHz,
111  .GPIO_Mode = GPIO_Mode_Out_PP,
112  },
113  }},
114  .sclk =
115  {
116  .gpio = GPIOA,
117  .init =
118  {
119  .GPIO_Pin = GPIO_Pin_5,
120  .GPIO_Speed = GPIO_Speed_10MHz,
121  .GPIO_Mode = GPIO_Mode_AF_PP,
122  },
123  },
124  .miso =
125  {
126  .gpio = GPIOA,
127  .init =
128  {
129  .GPIO_Pin = GPIO_Pin_6,
130  .GPIO_Speed = GPIO_Speed_10MHz,
131  .GPIO_Mode = GPIO_Mode_IN_FLOATING,
132  },
133  },
134  .mosi =
135  {
136  .gpio = GPIOA,
137  .init =
138  {
139  .GPIO_Pin = GPIO_Pin_7,
140  .GPIO_Speed = GPIO_Speed_10MHz,
141  .GPIO_Mode = GPIO_Mode_AF_PP,
142  },
143  },
144 };
145 
146 pios_spi_t pios_spi_rfm22b_id;
147 
148 #endif /* PIOS_INCLUDE_SPI */
149 
150 #if defined(PIOS_INCLUDE_OPENLRS)
151 
152 #include <pios_openlrs_priv.h>
153 
154 pios_openlrs_t openlrs_handle;
155 
156 static bool openlrs_int(void) {
157  return PIOS_OpenLRS_EXT_Int(openlrs_handle);
158 }
159 
160 static const struct pios_exti_cfg pios_exti_rfm22b_cfg __exti_config = {
161  .vector = openlrs_int,
162  .line = EXTI_Line2,
163  .pin = {
164  .gpio = GPIOA,
165  .init = {
166  .GPIO_Pin = GPIO_Pin_2,
167  .GPIO_Mode = GPIO_Mode_IN_FLOATING,
168  },
169  },
170  .irq = {
171  .init = {
172  .NVIC_IRQChannel = EXTI2_IRQn,
173  .NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_LOW,
174  .NVIC_IRQChannelSubPriority = 0,
175  .NVIC_IRQChannelCmd = ENABLE,
176  },
177  },
178  .exti = {
179  .init = {
180  .EXTI_Line = EXTI_Line2,
181  .EXTI_Mode = EXTI_Mode_Interrupt,
182  .EXTI_Trigger = EXTI_Trigger_Falling,
183  .EXTI_LineCmd = ENABLE,
184  },
185  },
186 };
187 
188 const struct stm32_gpio pios_openlrs_taulink_bind_button = {
189  .gpio = GPIOB,
190  .init =
191  {
192  .GPIO_Pin = GPIO_Pin_8,
193  .GPIO_Speed = GPIO_Speed_10MHz,
194  .GPIO_Mode = GPIO_Mode_IPD,
195  },
196 };
197 
198 const struct pios_openlrs_cfg pios_openlrs_taulink_cfg = {
199  .spi_cfg = &pios_spi_rfm22b_cfg,
200  .exti_cfg = &pios_exti_rfm22b_cfg,
201  .gpio_direction = GPIO0_TX_GPIO1_RX,
202 
203  .bind_button = &pios_openlrs_taulink_bind_button,
204 
205  .bind_active_high = true,
206 };
207 
208 static const struct pios_exti_cfg pios_exti_rfm22b_cfg_module __exti_config = {
209  .vector = openlrs_int,
210  .line = EXTI_Line1,
211  .pin = {
212  .gpio = GPIOA,
213  .init = {
214  .GPIO_Pin = GPIO_Pin_1,
215  .GPIO_Mode = GPIO_Mode_IN_FLOATING,
216  },
217  },
218  .irq = {
219  .init = {
220  .NVIC_IRQChannel = EXTI1_IRQn,
221  .NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_LOW,
222  .NVIC_IRQChannelSubPriority = 0,
223  .NVIC_IRQChannelCmd = ENABLE,
224  },
225  },
226  .exti = {
227  .init = {
228  .EXTI_Line = EXTI_Line1,
229  .EXTI_Mode = EXTI_Mode_Interrupt,
230  .EXTI_Trigger = EXTI_Trigger_Falling,
231  .EXTI_LineCmd = ENABLE,
232  },
233  },
234 };
235 
236 struct pios_openlrs_cfg pios_openlrs_taulinkmodule_cfg = {
237  .spi_cfg = &pios_spi_rfm22b_cfg,
238  .exti_cfg = &pios_exti_rfm22b_cfg_module,
239  .gpio_direction = GPIO0_TX_GPIO1_RX,
240 };
241 
243 const struct pios_openlrs_cfg * PIOS_BOARD_HW_DEFS_GetOpenLRSCfg (uint32_t board_revision)
244 {
245  if (board_revision == TAULINK_VERSION_STICK)
246  return &pios_openlrs_taulink_cfg;
247  if (board_revision == TAULINK_VERSION_MODULE)
248  return &pios_openlrs_taulinkmodule_cfg;
249  return NULL;
250 }
251 
252 #endif /* PIOS_INCLUDE_OPENLRS */
253 
254 #if defined(PIOS_INCLUDE_ADC)
255 
256 /*
257  * ADC system
258  */
259 #include "pios_adc_priv.h"
260 extern void PIOS_ADC_handler(void);
261 void DMA1_Channel1_IRQHandler() __attribute__ ((alias("PIOS_ADC_handler")));
262 // Remap the ADC DMA handler to this one
263 static const struct pios_adc_cfg pios_adc_cfg = {
264  .dma = {
265  .ahb_clk = RCC_AHBPeriph_DMA1,
266  .irq = {
267  .flags = (DMA1_FLAG_TC1 | DMA1_FLAG_TE1 | DMA1_FLAG_HT1 | DMA1_FLAG_GL1),
268  .init = {
269  .NVIC_IRQChannel = DMA1_Channel1_IRQn,
270  .NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_HIGH,
271  .NVIC_IRQChannelSubPriority = 0,
272  .NVIC_IRQChannelCmd = ENABLE,
273  },
274  },
275  .rx = {
276  .channel = DMA1_Channel1,
277  .init = {
278  .DMA_PeripheralBaseAddr = (uint32_t) & ADC1->DR,
279  .DMA_DIR = DMA_DIR_PeripheralSRC,
280  .DMA_PeripheralInc = DMA_PeripheralInc_Disable,
281  .DMA_MemoryInc = DMA_MemoryInc_Enable,
282  .DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word,
283  .DMA_MemoryDataSize = DMA_MemoryDataSize_Word,
284  .DMA_Mode = DMA_Mode_Circular,
285  .DMA_Priority = DMA_Priority_High,
286  .DMA_M2M = DMA_M2M_Disable,
287  },
288  }
289  },
290  .half_flag = DMA1_IT_HT1,
291  .full_flag = DMA1_IT_TC1,
292 };
293 
294 struct pios_adc_dev pios_adc_devs[] = {
295  {
296  .cfg = &pios_adc_cfg,
297  .callback_function = NULL,
298  },
299 };
300 
301 uint8_t pios_adc_num_devices = NELEMENTS(pios_adc_devs);
302 
303 void PIOS_ADC_handler() {
304  PIOS_ADC_DMA_Handler();
305 }
306 
307 #endif /* PIOS_INCLUDE_ADC */
308 
309 #if defined(PIOS_INCLUDE_TIM)
310 
311 #include "pios_tim_priv.h"
312 
313 static const TIM_TimeBaseInitTypeDef tim_1_2_3_4_time_base = {
314  .TIM_Prescaler = (PIOS_SYSCLK / 1000000) - 1,
315  .TIM_ClockDivision = TIM_CKD_DIV1,
316  .TIM_CounterMode = TIM_CounterMode_Up,
317  .TIM_Period = ((1000000 / PIOS_SERVO_UPDATE_HZ) - 1),
318  .TIM_RepetitionCounter = 0x0000,
319 };
320 
321 static const struct pios_tim_clock_cfg tim_1_cfg = {
322  .timer = TIM1,
323  .time_base_init = &tim_1_2_3_4_time_base,
324  .irq = {
325  .init = {
326  .NVIC_IRQChannel = TIM1_CC_IRQn,
327  .NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_MID,
328  .NVIC_IRQChannelSubPriority = 0,
329  .NVIC_IRQChannelCmd = ENABLE,
330  },
331  },
332 };
333 
334 static const struct pios_tim_clock_cfg tim_2_cfg = {
335  .timer = TIM2,
336  .time_base_init = &tim_1_2_3_4_time_base,
337  .irq = {
338  .init = {
339  .NVIC_IRQChannel = TIM2_IRQn,
340  .NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_MID,
341  .NVIC_IRQChannelSubPriority = 0,
342  .NVIC_IRQChannelCmd = ENABLE,
343  },
344  },
345 };
346 
347 static const struct pios_tim_clock_cfg tim_3_cfg = {
348  .timer = TIM3,
349  .time_base_init = &tim_1_2_3_4_time_base,
350  .irq = {
351  .init = {
352  .NVIC_IRQChannel = TIM3_IRQn,
353  .NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_MID,
354  .NVIC_IRQChannelSubPriority = 0,
355  .NVIC_IRQChannelCmd = ENABLE,
356  },
357  },
358 };
359 
360 static const struct pios_tim_clock_cfg tim_4_cfg = {
361  .timer = TIM4,
362  .time_base_init = &tim_1_2_3_4_time_base,
363  .irq = {
364  .init = {
365  .NVIC_IRQChannel = TIM4_IRQn,
366  .NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_MID,
367  .NVIC_IRQChannelSubPriority = 0,
368  .NVIC_IRQChannelCmd = ENABLE,
369  },
370  },
371 };
372 
373 static const struct pios_tim_channel pios_tim_ppm_flexi_port = {
374  .timer = TIM2,
375  .timer_chan = TIM_Channel_4,
376  .pin = {
377  .gpio = GPIOB,
378  .init = {
379  .GPIO_Pin = GPIO_Pin_11,
380  .GPIO_Mode = GPIO_Mode_IPD,
381  .GPIO_Speed = GPIO_Speed_2MHz,
382  },
383  },
384  .remap = GPIO_PartialRemap2_TIM2,
385 };
386 
387 #endif /* PIOS_INCLUDE_TIM */
388 
389 #if defined(PIOS_INCLUDE_USART)
390 
391 #include <pios_usart_priv.h>
392 
393 /*
394  * SERIAL USART
395  */
396 static const struct pios_usart_cfg pios_usart_serial_cfg =
397 {
398  .regs = USART1,
399  .irq =
400  {
401  .init =
402  {
403  .NVIC_IRQChannel = USART1_IRQn,
404  .NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_HIGH,
405  .NVIC_IRQChannelSubPriority = 0,
406  .NVIC_IRQChannelCmd = ENABLE,
407  },
408  },
409  .rx =
410  {
411  .gpio = GPIOA,
412  .init =
413  {
414  .GPIO_Pin = GPIO_Pin_10,
415  .GPIO_Speed = GPIO_Speed_2MHz,
416  .GPIO_Mode = GPIO_Mode_IPU,
417  },
418  },
419  .tx =
420  {
421  .gpio = GPIOA,
422  .init =
423  {
424  .GPIO_Pin = GPIO_Pin_9,
425  .GPIO_Speed = GPIO_Speed_2MHz,
426  .GPIO_Mode = GPIO_Mode_AF_PP,
427  },
428  },
429 };
430 
431 static const struct pios_usart_cfg pios_usart_bluetooth_cfg =
432 {
433  .regs = USART2,
434  .irq =
435  {
436  .init =
437  {
438  .NVIC_IRQChannel = USART2_IRQn,
439  .NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_HIGH,
440  .NVIC_IRQChannelSubPriority = 0,
441  .NVIC_IRQChannelCmd = ENABLE,
442  },
443  },
444  .rx =
445  {
446  .gpio = GPIOA,
447  .init =
448  {
449  .GPIO_Pin = GPIO_Pin_3,
450  .GPIO_Speed = GPIO_Speed_2MHz,
451  .GPIO_Mode = GPIO_Mode_IPU,
452  },
453  },
454  .tx =
455  {
456  .gpio = GPIOA,
457  .init =
458  {
459  .GPIO_Pin = GPIO_Pin_2,
460  .GPIO_Speed = GPIO_Speed_2MHz,
461  .GPIO_Mode = GPIO_Mode_AF_PP,
462  },
463  },
464 };
465 
466 static const struct pios_usart_cfg pios_usart_sport_cfg = {
467  .regs = USART3,
468  .irq = {
469  .init = {
470  .NVIC_IRQChannel = USART3_IRQn,
471  .NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_MID,
472  .NVIC_IRQChannelSubPriority = 0,
473  .NVIC_IRQChannelCmd = ENABLE,
474  },
475  },
476  .tx = {
477  .gpio = GPIOB,
478  .init = {
479  .GPIO_Pin = GPIO_Pin_10,
480  .GPIO_Speed = GPIO_Speed_2MHz,
481  .GPIO_Mode = GPIO_Mode_AF_PP,
482  },
483  },
484 };
485 
486 #endif /* PIOS_INCLUDE_USART */
487 
488 #if defined(PIOS_INCLUDE_COM)
489 
490 #include <pios_com_priv.h>
491 
492 #endif /* PIOS_INCLUDE_COM */
493 
494 #if defined(PIOS_INCLUDE_RTC)
495 /*
496  * Realtime Clock (RTC)
497  */
498 #include <pios_rtc_priv.h>
499 
500 void PIOS_RTC_IRQ_Handler (void);
501 void RTC_IRQHandler() __attribute__ ((alias ("PIOS_RTC_IRQ_Handler")));
502 static const struct pios_rtc_cfg pios_rtc_main_cfg = {
503  .clksrc = RCC_RTCCLKSource_HSE_Div128,
504  .prescaler = 100,
505  .irq = {
506  .init = {
507  .NVIC_IRQChannel = RTC_IRQn,
508  .NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_MID,
509  .NVIC_IRQChannelSubPriority = 0,
510  .NVIC_IRQChannelCmd = ENABLE,
511  },
512  },
513 };
514 
515 void PIOS_RTC_IRQ_Handler (void)
516 {
518 }
519 
520 #endif
521 
522 /*
523  * PPM Inputs
524  */
525 #if defined(PIOS_INCLUDE_PPM)
526 #include <pios_ppm_priv.h>
527 
528 const struct pios_ppm_cfg pios_ppm_cfg = {
529  .tim_ic_init = {
530  .TIM_ICPolarity = TIM_ICPolarity_Rising,
531  .TIM_ICSelection = TIM_ICSelection_DirectTI,
532  .TIM_ICPrescaler = TIM_ICPSC_DIV1,
533  .TIM_ICFilter = 0x0,
534  },
535  .channels = &pios_tim_ppm_flexi_port,
536  .num_channels = 1,
537 };
538 
539 #endif /* PIOS_INCLUDE_PPM */
540 
541 #if defined(PIOS_INCLUDE_RCVR)
542 #include "pios_rcvr_priv.h"
543 
544 #endif /* PIOS_INCLUDE_RCVR */
545 
546 #if defined(PIOS_INCLUDE_USB)
547 #include "pios_usb_priv.h"
548 
549 static const struct pios_usb_cfg pios_usb_main_cfg = {
550  .irq = {
551  .init = {
552  .NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn,
553  .NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_LOW,
554  .NVIC_IRQChannelSubPriority = 0,
555  .NVIC_IRQChannelCmd = ENABLE,
556  },
557  },
558  .vsense = {
559  .gpio = GPIOA,
560  .init = {
561  .GPIO_Pin = GPIO_Pin_8,
562  .GPIO_Speed = GPIO_Speed_10MHz,
563  .GPIO_Mode = GPIO_Mode_AF_OD,
564  },
565  }
566 };
567 
571 
572 #endif /* PIOS_INCLUDE_USB */
573 
574 #if defined(PIOS_INCLUDE_COM_MSG)
575 
576 #include <pios_com_msg_priv.h>
577 
578 #endif /* PIOS_INCLUDE_COM_MSG */
579 
580 #if defined(PIOS_INCLUDE_USB_HID)
581 #include <pios_usb_hid_priv.h>
582 
583 const struct pios_usb_hid_cfg pios_usb_hid_cfg = {
584  .data_if = 2,
585  .data_rx_ep = 1,
586  .data_tx_ep = 1,
587 };
588 #endif /* PIOS_INCLUDE_USB_HID */
589 
590 #if defined(PIOS_INCLUDE_USB_CDC)
591 #include <pios_usb_cdc_priv.h>
592 
593 const struct pios_usb_cdc_cfg pios_usb_cdc_cfg = {
594  .ctrl_if = 0,
595  .ctrl_tx_ep = 2,
596 
597  .data_if = 1,
598  .data_rx_ep = 3,
599  .data_tx_ep = 3,
600 };
601 #endif /* PIOS_INCLUDE_USB_CDC */
602 
603 #if defined(PIOS_INCLUDE_FLASH)
604 #include "pios_flashfs_logfs_priv.h"
605 
606 static const struct flashfs_logfs_cfg flashfs_internal_settings_cfg = {
607  .fs_magic = 0x9ae1ee11,
608  .arena_size = 0x00002000, /* 32 * slot size = 8K bytes = 4 sectors */
609  .slot_size = 0x00000100, /* 256 bytes */
610 };
611 
613 
614 static const struct pios_flash_internal_cfg flash_internal_cfg = {
615 };
616 
617 #include "pios_flash_priv.h"
618 
619 static const struct pios_flash_sector_range stm32f1_sectors[] = {
620  {
621  .base_sector = 0,
622  .last_sector = 127,
623  .sector_size = FLASH_SECTOR_1KB,
624  },
625 };
626 
627 uintptr_t pios_internal_flash_id;
628 static const struct pios_flash_chip pios_flash_chip_internal = {
630  .chip_id = &pios_internal_flash_id,
631  .page_size = 16, /* 128-bit rows */
632  .sector_blocks = stm32f1_sectors,
633  .num_blocks = NELEMENTS(stm32f1_sectors),
634 };
635 
636 static const struct pios_flash_partition pios_flash_partition_table[] = {
637  {
639  .chip_desc = &pios_flash_chip_internal,
640  .first_sector = 0,
641  .last_sector = 11,
642  .chip_offset = 0,
643  .size = (11 - 0 + 1) * FLASH_SECTOR_1KB,
644  },
645 
646  {
647  .label = FLASH_PARTITION_LABEL_FW,
648  .chip_desc = &pios_flash_chip_internal,
649  .first_sector = 12,
650  .last_sector = 111,
651  .chip_offset = (12 * FLASH_SECTOR_1KB),
652  .size = (111 - 12 + 1) * FLASH_SECTOR_1KB,
653  },
654 
655  {
657  .chip_desc = &pios_flash_chip_internal,
658  .first_sector = 112,
659  .last_sector = 127,
660  .chip_offset = (112 * FLASH_SECTOR_1KB),
661  .size = (127 - 112 + 1) * FLASH_SECTOR_1KB,
662  },
663 };
664 
665 const struct pios_flash_partition * PIOS_BOARD_HW_DEFS_GetPartitionTable (uint32_t board_revision, uint32_t * num_partitions)
666 {
667  PIOS_Assert(num_partitions);
668 
669  *num_partitions = NELEMENTS(pios_flash_partition_table);
671 }
672 
673 #endif /* PIOS_INCLUDE_FLASH */
674 
struct stm32_gpio pin
#define TAULINK_VERSION_STICK
Definition: pios_board.h:33
SPI private definitions.
#define NELEMENTS(x)
Definition: pios.h:192
COM private definitions.
COM MSG private definitions.
GPIO_TypeDef * gpio
Definition: pios_stm32.h:60
ADC private definitions.
#define PIOS_LED_USB
Definition: pios_board.h:99
bool(* vector)(void)
Definition: pios_exti.h:38
Defines the API to set up the HID + CDC USB descriptor config.
#define DMA1_Channel1_IRQHandler
#define PIOS_IRQ_PRIO_MID
Definition: pios_board.h:170
USART private definitions.
#define PIOS_LED_RX
Definition: pios_board.h:89
static const struct pios_tim_clock_cfg tim_4_cfg
#define PIOS_SERVO_UPDATE_HZ
Definition: pios_board.h:209
TIM_TypeDef * timer
Definition: pios_tim_priv.h:7
SPI_TypeDef * regs
Definition: pios_spi_priv.h:44
const struct pios_annunc * annunciators
ppm private structures.
NVIC_InitTypeDef init
Definition: pios_stm32.h:36
static const struct pios_tim_clock_cfg tim_1_cfg
USART_TypeDef * regs
USB private definitions.
USB COM HID private definitions.
#define PIOS_LED_TX
Definition: pios_board.h:90
TIM_ICInitTypeDef tim_ic_init
Definition: pios_ppm_priv.h:37
Defines the API to set up the HID-only USB descriptor config.
#define FLASH_SECTOR_1KB
void PIOS_RTC_irq_handler(void)
const struct pios_flash_driver * driver
const struct pios_flash_partition pios_flash_partition_table[]
Definition: unittest_init.c:50
#define PIOS_SYSCLK
Definition: pios_board.h:143
#define PIOS_IRQ_PRIO_HIGH
Definition: pios_board.h:171
#define RTC_IRQHandler
static const struct pios_tim_clock_cfg tim_3_cfg
TIM_TypeDef * timer
Definition: pios_tim_priv.h:14
USB COM CDC private definitions.
uint32_t clksrc
Definition: pios_rtc_priv.h:37
#define PIOS_LED_LINK
Definition: pios_board.h:88
enum pios_flash_partition_labels label
board_revision
Definition: board_hw_defs.c:35
static const struct pios_tim_clock_cfg tim_2_cfg
#define PIOS_IRQ_PRIO_LOW
Definition: pios_board.h:169
#define PIOS_Assert(test)
Definition: pios_debug.h:52
#define TAULINK_VERSION_MODULE
Definition: pios_board.h:34
LED private definitions.
struct stm32_irq irq
Definition: pios_usb_priv.h:37
Implements an OpenLRS driver for the RFM22B.
const struct pios_flash_driver pios_internal_flash_driver
USART private definitions.
#define __exti_config
Definition: pios_exti.h:48
Defines the API to the board-specific USB data setup code.