Как обновить регистр совпадения таймера в программе?
Всем привет. Хочу реализовать подобие WDT на обычной таймере в микроконтроллере LPC11u12. Суть в следующем: по прерыванию совпадения таймера, он останавливается, но по прерыванию UART приема байта, значение совпадения таймер резетится и (по идее) начинает заново и все хорошо. В чем проблема? Это не работает, к сожалению.
Есть ли вообще возможность так делать? Если да, то в чем ошибка? Если нет , то какие еще решения могут быть?
Насколько я понимаю, должен же присутствовать счетный регистр таймера. Его в прерываниии UART ставим в 0, нет ?
P.S к сожалению, с LPC11u12 не знаком. Но в AVR я сбрасываю TCNT регистр.
MaxEpt, ну тут прерывания, их в отладке очень сложно отловить
вообще в чем думаю проблема: вероятно есть какой-то конфликт между прерываниями uart и таймера. Мб пока в прерывании uart выполняется прога пресловутые тики таймера все равно идут. Но хотя остановка таймера при входе в юарт тоже не очень помогает
void timer0_wait_icc_message(uint32_t waiting_time) {
while (!tmr_flag);
while(timer0_performance_check());
}
есть вот такая функция. Когда приходит первый байт в юарт , в его хэндлере таймер запускается и ставится флаг tmr_flag
а затем (ПО ИДЕЕ) в прерывании юарта также таймер стопится, резетится и заводится, т.е. юарт не дайет таймеру зайти в свои прерывания и собственноручно отключить себя навсегда. Когда байты перестают идти, таймер себя убивает в прерывании по совпадению
MaxEpt, в общем история сложная
виновата специфика работы со смарт картами (проект в этом заключается) , так что решение не по теме. Спасибо за активное участие)