jenya7 0 27 апреля, 2020 Опубликовано 27 апреля, 2020 · Жалоба Все мне нравиться в кинетис за исключением их убогих таймеров. Настраиваю таймер как счетчик милисекунд void LPTMR_Setup(void) { lptmr_config_t lptmr_config; lptmr_config.timerMode = kLPTMR_TimerModeTimeCounter; lptmr_config.pinSelect = kLPTMR_PinSelectInput_0; lptmr_config.pinPolarity = kLPTMR_PinPolarityActiveHigh; lptmr_config.enableFreeRunning = true; lptmr_config.bypassPrescaler = true; lptmr_config.prescalerClockSource = kLPTMR_PrescalerClock_1; //1Khz - 1ms lptmr_config.value = kLPTMR_Prescale_Glitch_0; LPTMR_Init(LPTMR0, &lptmr_config); LPTMR_SetTimerPeriod(LPTMR0, 0xFFFF); LPTMR_EnableInterrupts(LPTMR0, kLPTMR_TimerInterruptEnable); EnableIRQ(LPTMR0_IRQn); LPTMR_StartTimer(LPTMR0); } uint32_t LPTMR_GetCount(void) { uint32_t count = LPTMR_GetCurrentTimerCount(LPTMR0); uint32_t total_ms = count + added_val; return total_ms; } void LPTMR0_IRQHandler(void) { LPTMR_ClearStatusFlags(LPTMR0, kLPTMR_TimerCompareFlag); added_val += 0xFFFF; /* Workaround for TWR-KV58: because write buffer is enabled, adding memory barrier instructions to make sure clearing interrupt flag completed before go out ISR */ __DSB(); __ISB(); } Проверяю while(1) { time_stamp = LPTMR_GetCount(); if (time_stamp >= t1) { t1 = time_stamp + PERIOD_1; GPIO_PortToggle(LED_PORT, (1<<LEDR_PIN)); } } LED красиво мигает... до первого прерывания. и все. поначалу я подумал что прерывание отсыхает. поставил брекпоинт на added_val += 0xFFFF; вижу на каждое прерывание на added_val апдейтируется правильно. поставил брекпоинт на uint32_t count = LPTMR_GetCurrentTimerCount(LPTMR0); вижу count не апдейтируется. LPTMR_GetCurrentTimerCount тоже хитромудрая функция static inline uint32_t LPTMR_GetCurrentTimerCount(LPTMR_Type *base) { /* Must first write any value to the CNR. This synchronizes and registers the current value * of the CNR into a temporary register which can then be read */ base->CNR = 0U; return (uint32_t)((base->CNR & LPTMR_CNR_COUNTER_MASK) >> LPTMR_CNR_COUNTER_SHIFT); } Вобщем непонятно как то с этим таймером. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 42 27 апреля, 2020 Опубликовано 27 апреля, 2020 · Жалоба А volatile нигде не забыли ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 27 апреля, 2020 Опубликовано 27 апреля, 2020 · Жалоба 1 hour ago, dimka76 said: А volatile нигде не забыли ? добавил. но не помогло. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться