реклама на сайте
подробности

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


Местный
***

Группа: Участник
Сообщений: 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 ?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MaxiMuz
сообщение Apr 25 2014, 11:30
Сообщение #2


Местный
***

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



Задача своевременного запуска обработчика таймера решена.
Но хочу разобраться как связан бит UG c формированием запроса не прерывание .
Согласно описанию :
Цитата
Prescaler description
The prescaler can divide the counter clock frequency by any factor between 1 and 65536. It
is based on a 16-bit counter controlled through a 16-bit register (in the TIMx_PSC register).
It can be changed on the fly as this control register is buffered. The new prescaler ratio is
taken into account at the next update event.

Т.е. чтобы вызвать появление Update event (UEV) нужно чтобы счетчик досчитал до ARR. Поэтому я перед тем как Разрешить прерывание запускаю счетчик и естественным путем вызываю Update event (UEV) , а потом сбрасываю запрос на прерывание :
Код
    TIM2->ARR=(1);
    TIM2->PSC=(65535-1);
      
    TIM2->DIER|=(TIM_DIER_UIE); // разрешаем прерывание по срабатыванию таймера
    TIM2->CR1|=(TIM_CR1_CEN); // Запуск Таймера
    //TIM2->EGR = TIM_EGR_UG; // генерим событие таймера
    __NOP();
    __NOP();
    __NOP();
    TIM2->SR =~(TIM_SR_UIF);// сброс ф.прерывания
    __NOP();
    NVIC_ClearPendingIRQ (TIM2_IRQn);

/* Разрешение прерывания TIM2 */
    NVIC_EnableIRQ(TIM2_IRQn);

Почему тогда в этом случае , не происходит сброс запроса на прерывание ?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
- - AHTOXA   Цитата(MaxiMuz @ Apr 18 2014, 19:11) При ...   Apr 20 2014, 05:24
|- - MaxiMuz   Цитата(AHTOXA @ Apr 20 2014, 08:24) Добав...   Apr 22 2014, 07:44
|- - AHTOXA   У вас прерывание назначено на событие обновления (...   Apr 22 2014, 08:32
|- - MaxiMuz   Цитата(AHTOXA @ Apr 22 2014, 11:32) Надо ...   Apr 22 2014, 09:17
|- - KnightIgor   Цитата(MaxiMuz @ Apr 22 2014, 10:17) тоже...   Apr 22 2014, 09:56
- - 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 20:29
Рейтинг@Mail.ru


Страница сгенерированна за 0.01416 секунд с 7
ELECTRONIX ©2004-2016