Merge pull request #173 from bcostm/master

[NUCLEO_xxx] Fix issue with ticker + add volatile
pull/176/head
Emilio Monti 2014-02-18 15:43:40 +00:00
commit 94a1bdc84b
4 changed files with 19 additions and 20 deletions

View File

@ -37,8 +37,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

View File

@ -37,8 +37,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

View File

@ -40,8 +40,8 @@ static TIM_HandleTypeDef TimMasterHandle;
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

View File

@ -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 @@ static void tim_update_oc_irq_handler(void) {
// 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();
}
}
}
}