altos/stm: Interrupt priority is in the upper bits of the priority mask
[fw/altos] / src / stm / ao_timer.c
index 91ede84bcc5ee7f4e015fb46b6188412c35b6746..a641eb2a7656e147ddd216fab0c92decea12a1ab 100644 (file)
@@ -3,7 +3,8 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful, but
  * WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -42,30 +43,28 @@ volatile __data uint8_t     ao_data_count;
 void stm_systick_isr(void)
 {
        ao_validate_cur_stack();
-       if (stm_systick.csr & (1 << STM_SYSTICK_CSR_COUNTFLAG)) {
-               ++ao_tick_count;
+       ++ao_tick_count;
 #if HAS_TASK_QUEUE
-               if (ao_task_alarm_tick && (int16_t) (ao_tick_count - ao_task_alarm_tick) >= 0)
-                       ao_task_check_alarm((uint16_t) ao_tick_count);
+       if (ao_task_alarm_tick && (int16_t) (ao_tick_count - ao_task_alarm_tick) >= 0)
+               ao_task_check_alarm((uint16_t) ao_tick_count);
 #endif
 #if AO_DATA_ALL
-               if (++ao_data_count == ao_data_interval) {
-                       ao_data_count = 0;
+       if (++ao_data_count == ao_data_interval) {
+               ao_data_count = 0;
 #if HAS_FAKE_FLIGHT
-                       if (ao_fake_flight_active)
-                               ao_fake_flight_poll();
-                       else
+               if (ao_fake_flight_active)
+                       ao_fake_flight_poll();
+               else
 #endif
-                               ao_adc_poll();
+                       ao_adc_poll();
 #if (AO_DATA_ALL & ~(AO_DATA_ADC))
-                       ao_wakeup((void *) &ao_data_count);
+               ao_wakeup((void *) &ao_data_count);
 #endif
-               }
+       }
 #endif
 #ifdef AO_TIMER_HOOK
-               AO_TIMER_HOOK;
+       AO_TIMER_HOOK;
 #endif
-       }
 }
 
 #if HAS_ADC
@@ -89,6 +88,7 @@ ao_timer_init(void)
        stm_systick.csr = ((1 << STM_SYSTICK_CSR_ENABLE) |
                           (1 << STM_SYSTICK_CSR_TICKINT) |
                           (STM_SYSTICK_CSR_CLKSOURCE_HCLK_8 << STM_SYSTICK_CSR_CLKSOURCE));
+       stm_nvic.shpr15_12 |= AO_STM_NVIC_CLOCK_PRIORITY << 24;
 }
 
 #endif