Просмотр исходного кода

disable systick when running freertos on other stm families

hathach 4 лет назад
Родитель
Сommit
6159252692
4 измененных файлов с 18 добавлено и 4 удалено
  1. 5 1
      hw/bsp/stm32f0/family.c
  2. 3 0
      hw/bsp/stm32f4/family.c
  3. 9 1
      hw/bsp/stm32f7/family.c
  4. 1 2
      hw/bsp/stm32h7/family.c

+ 5 - 1
hw/bsp/stm32f0/family.c

@@ -55,10 +55,14 @@ void board_init(void)
   // Enable UART Clock
   UART_CLK_EN();
 
+#if CFG_TUSB_OS == OPT_OS_NONE
   // 1ms tick timer
   SysTick_Config(SystemCoreClock / 1000);
 
-#if CFG_TUSB_OS == OPT_OS_FREERTOS
+#elif CFG_TUSB_OS == OPT_OS_FREERTOS
+  // Explicitly disable systick to prevent its ISR runs before scheduler start
+  SysTick->CTRL &= ~1U;
+
   // If freeRTOS is used, IRQ priority is limit by max syscall ( smaller is higher )
   NVIC_SetPriority(USB_IRQn, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY );
 #endif

+ 3 - 0
hw/bsp/stm32f4/family.c

@@ -50,6 +50,9 @@ void board_init(void)
   // 1ms tick timer
   SysTick_Config(SystemCoreClock / 1000);
 #elif CFG_TUSB_OS == OPT_OS_FREERTOS
+  // Explicitly disable systick to prevent its ISR runs before scheduler start
+  SysTick->CTRL &= ~1U;
+
   // If freeRTOS is used, IRQ priority is limit by max syscall ( smaller is higher )
   NVIC_SetPriority(OTG_FS_IRQn, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY );
 #endif

+ 9 - 1
hw/bsp/stm32f7/family.c

@@ -70,9 +70,17 @@ void board_init(void)
 
   UART_CLK_EN();
 
-#if CFG_TUSB_OS  == OPT_OS_NONE
+#if CFG_TUSB_OS == OPT_OS_NONE
   // 1ms tick timer
   SysTick_Config(SystemCoreClock / 1000);
+
+#elif CFG_TUSB_OS == OPT_OS_FREERTOS
+  // Explicitly disable systick to prevent its ISR runs before scheduler start
+  SysTick->CTRL &= ~1U;
+
+  // If freeRTOS is used, IRQ priority is limit by max syscall ( smaller is higher )
+  NVIC_SetPriority(OTG_FS_IRQn, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY );
+  NVIC_SetPriority(OTG_HS_IRQn, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY );
 #endif
 
   GPIO_InitTypeDef  GPIO_InitStruct;

+ 1 - 2
hw/bsp/stm32h7/family.c

@@ -80,13 +80,12 @@ void board_init(void)
   SysTick_Config(SystemCoreClock / 1000);
 
 #elif CFG_TUSB_OS == OPT_OS_FREERTOS
-  // Explicitly disable systick to prevent it is trigger before scheduler start
+  // Explicitly disable systick to prevent its ISR runs before scheduler start
   SysTick->CTRL &= ~1U;
 
   // If freeRTOS is used, IRQ priority is limit by max syscall ( smaller is higher )
   NVIC_SetPriority(OTG_FS_IRQn, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY );
   NVIC_SetPriority(OTG_HS_IRQn, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY );
-
 #endif
   
   GPIO_InitTypeDef  GPIO_InitStruct;