|
Обработчик прерывания срабатывает сразу после запуска таймера |
|
|
|
Apr 18 2014, 13:11
|

Местный
  
Группа: Участник
Сообщений: 253
Регистрация: 15-04-10
Из: Волгоград
Пользователь №: 56 658

|
Запрограммировал таймер на отчет временных интервалов: Код /* Настройка таймера TIM2 на событие: Прерывание при совпадении с р-ром TIM2_ARR */ TIM2->ARR=(8000); // загрузка рег-ра для сравнения 366/8000=0,046 Hz TIM2->PSC=(65536-1); // предделитель CK_CNT=24000000/65536=366 Hz TIM2->DIER|=(TIM_DIER_UIE); // разрешаем прерывание по срабатыванию таймера TIM2->CNT=1; TIM2->CR1|=(TIM_CR1_CEN); // Запуск Таймера
/* Разрешение прерывания TIM2 */ NVIC_EnableIRQ(TIM2_IRQn); Период србатывания ~21сек. В обработчике поставил маркер срабатывания: Код void TIM2_IRQHandler (void) { u32 i; TIM2->SR &=~(TIM_SR_UIF);// сброс ф.прерывания SWITCH_PIN(PC8); } При запуске программы почемуто сразу срабатывает прерывание. С какого это оно срабатывает , если событие не наступило? Как сделать чтобы первое срабатывание было только по совпадению с рег-ом ARR ?
|
|
|
|
|
 |
Ответов
|
Apr 20 2014, 05:24
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(MaxiMuz @ Apr 18 2014, 19:11)  При запуске программы почемуто сразу срабатывает прерывание. С какого это оно срабатывает , если событие не наступило? Регистр PSC обновляется только при update event. Если ARPE = 1, то ARR тоже обновляется только при update event (иначе сразу). Добавьте перед запуском таймера: Код // generate an update event to load the PSC and ARR values immediately TIM3->EGR = TIM_EGR_UG;
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Apr 22 2014, 07:44
|

Местный
  
Группа: Участник
Сообщений: 253
Регистрация: 15-04-10
Из: Волгоград
Пользователь №: 56 658

|
Цитата(AHTOXA @ Apr 20 2014, 08:24)  Добавьте перед запуском таймера: Код // generate an update event to load the PSC and ARR values immediately TIM3->EGR = TIM_EGR_UG; пробывал вот так: Код /* Настройка таймера TIM2 на событие: Прерывание при совпадении с р-ром TIM2_ARR */ TIM2->ARR=(6500); // загрузка рег-ра для сравнения 366,2109375/350=1 Hz TIM2->PSC=(65535-1); // предделитель CK_CNT=24000000/65536=366,2109375 Hz TIM2->DIER|=(TIM_DIER_UIE); // разрешаем прерывание по срабатыванию таймера TIM2->EGR = TIM_EGR_UG; TIM2->SR =~(TIM_SR_UIF);// сброс ф.прерывания TIM2->CR1|=(TIM_CR1_CEN); // Запуск Таймера
/* Разрешение прерывания TIM2 */ NVIC_EnableIRQ(TIM2_IRQn); Не работает, таймер также запускается при ресет
|
|
|
|
|
Apr 22 2014, 09:17
|

Местный
  
Группа: Участник
Сообщений: 253
Регистрация: 15-04-10
Из: Волгоград
Пользователь №: 56 658

|
Цитата(AHTOXA @ Apr 22 2014, 11:32)  Надо сгенерировать событие обновления, потом сбросить флаг, а уже потом разрешать прерывания: Код TIM2->ARR = 6500; TIM2->PSC = 65535-1; TIM2->EGR = TIM_EGR_UG; TIM2->SR = ~TIM_SR_UIF; TIM2->DIER |= TIM_DIER_UIE; TIM2->CR1 |= TIM_CR1_CEN; тоже самое Похоже что TIM2->SR =~(TIM_SR_UIF); не сбразывает сам "запрос" на прерывание
Сообщение отредактировал MaxiMuz - Apr 22 2014, 09:35
|
|
|
|
|
Apr 22 2014, 09:56
|
Знающий
   
Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725

|
Цитата(MaxiMuz @ Apr 22 2014, 10:17)  тоже самое Похоже что TIM2->SR =~(TIM_SR_UIF); не сбразывает сам "запрос" на прерывание Попробуйте еще добавить: CODE TIM2->ARR = 6500; TIM2->PSC = 65535-1; TIM2->EGR = TIM_EGR_UG; TIM2->SR = ~TIM_SR_UIF; NVIC_ClearPendingIRQ(TIM2_IRQn); TIM2->DIER |= TIM_DIER_UIE; TIM2->CR1 |= TIM_CR1_CEN;
Сообщение отредактировал KnightIgor - Apr 22 2014, 09:57
|
|
|
|
Сообщений в этой теме
MaxiMuz Обработчик прерывания срабатывает сразу после запуска таймера Apr 18 2014, 13:11 KnightIgor Цитата(MaxiMuz @ Apr 18 2014, 14:11) При ... Apr 18 2014, 15:18 MaxiMuz Цитата(KnightIgor @ Apr 18 2014, 18:18) С... Apr 21 2014, 11:15 Golikov A. ЦитатаTIM2->SR &=~(TIM_SR_UIF);
и это стои... Apr 19 2014, 14:31 KnightIgor Цитата(Golikov A. @ Apr 19 2014, 15:31) и... Apr 19 2014, 19:03 Golikov A. я к тому что надо писать не
TIM2->SR &= ~(... Apr 19 2014, 21:18 aaarrr Цитата(Golikov A. @ Apr 20 2014, 01:18) п... Apr 19 2014, 21:42  Golikov A. Цитата(aaarrr @ Apr 20 2014, 01:42) Оно н... Apr 20 2014, 05:53   aaarrr Цитата(Golikov A. @ Apr 20 2014, 09:53) м... Apr 20 2014, 09:33    adnega Цитата(aaarrr @ Apr 20 2014, 13:33) Для о... Apr 20 2014, 15:05     Golikov A. Цитата(adnega @ Apr 20 2014, 19:05) Вряд ... Apr 20 2014, 17:06      aaarrr Цитата(Golikov A. @ Apr 20 2014, 21:06) Д... Apr 20 2014, 18:20    MaxiMuz Цитата(aaarrr @ Apr 20 2014, 12:33) Для о... Apr 21 2014, 12:31     AHTOXA Цитата(MaxiMuz @ Apr 21 2014, 18:31)
Я н... Apr 21 2014, 20:24   HHIMERA Цитата(Golikov A. @ Apr 20 2014, 08:53) R... Apr 23 2014, 00:28 MaxiMuz Выясненно опытным путем с использованием документа... Apr 22 2014, 10:48 Haamu Цитата(MaxiMuz @ Apr 22 2014, 14:48) 1. П... Apr 22 2014, 13:19 Golikov A. ЦитатаНо если я убираю команду TIM2->EGR = TIM_... Apr 22 2014, 16:51 Golikov A. правильно
DEFAULT_VAL равно не нулю, а тому чему о... Apr 23 2014, 06:23 HHIMERA Цитата(Golikov A. @ Apr 23 2014, 09:23) D... Apr 23 2014, 07:38  aaarrr Цитата(HHIMERA @ Apr 23 2014, 11:38) Тогд... Apr 23 2014, 07:49   ViKo Цитата(aaarrr @ Apr 23 2014, 10:49) Их не... Apr 23 2014, 08:32   HHIMERA Цитата(aaarrr @ Apr 23 2014, 10:49) Не ув... Apr 23 2014, 10:29 Golikov A. да я тоже часто в ПЛИС делают некоторые резервные ... Apr 23 2014, 15:13 HHIMERA Цитатаесли их трогать скорее всего ничего не будет... Apr 23 2014, 17:54 MaxiMuz Задача своевременного запуска обработчика таймера ... Apr 25 2014, 11:30
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|