mbed library sources for GR-PEACH rev.B.
Fork of mbed-src by
Diff: targets/hal/TARGET_STM/TARGET_NUCLEO_L152RE/us_ticker.c
- Revision:
- 96:c359415e941f
- Parent:
- 92:05f19f05c134
- Child:
- 100:0412b5443284
--- a/targets/hal/TARGET_STM/TARGET_NUCLEO_L152RE/us_ticker.c Tue Feb 18 14:15:05 2014 +0000 +++ b/targets/hal/TARGET_STM/TARGET_NUCLEO_L152RE/us_ticker.c Tue Feb 18 15:45:07 2014 +0000 @@ -36,8 +36,8 @@ static int us_ticker_inited = 0; static volatile uint32_t SlaveCounter = 0; -static uint32_t oc_int_part = 0; -static uint16_t oc_rem_part = 0; +static volatile uint32_t oc_int_part = 0; +static volatile uint16_t oc_rem_part = 0; void set_compare(uint16_t count) { // Set new output compare value @@ -58,20 +58,19 @@ // Output compare interrupt: used by interrupt system if (TIM_GetITStatus(TIM_MST, TIM_IT_CC1) == SET) { TIM_ClearITPendingBit(TIM_MST, TIM_IT_CC1); - } - - if (oc_rem_part > 0) { - set_compare(oc_rem_part); // Finish the remaining time left - oc_rem_part = 0; - } - else { - if (oc_int_part > 0) { - set_compare(0xFFFF); - oc_rem_part = cval; // To finish the counter loop the next time - oc_int_part--; + if (oc_rem_part > 0) { + set_compare(oc_rem_part); // Finish the remaining time left + oc_rem_part = 0; } else { - us_ticker_irq_handler(); + if (oc_int_part > 0) { + set_compare(0xFFFF); + oc_rem_part = cval; // To finish the counter loop the next time + oc_int_part--; + } + else { + us_ticker_irq_handler(); + } } } }