Перейти к содержанию
    

Чередующиеся прерывания

Всем доброго!

stm32f030f4, равно как и r8. Имеем два прерывания: EXTI по изменению уровня на PA6 и прерывание по таймеру tim16. Алгоритм следующий: сначала активно EXTI, tim16 отключен. После срабатывания EXTI в обработчике выключаю прерывание EXTI  и включаю tim16. Срабатывает tim16 - в обработчике выключаю tim16 и включаю EXTI. И дальше идет чередование пока есть входной сигнал. Алгоритм не хитрый. tim16 заряжен на 625 мкс (примерно так и есть, по осциллографу в пределах 610 - 640 мкс).

Ну и головная боль. Самое первое срабатывание tim16 идет через примерно 1400 мкс и хоть тресни, далее как задумано. И вот эти 1400 микс ни как побороть не удается. Проект приложил, Атоллик 9.3.0. Может чего-то не учел?

test_exti.zip

Добавлю картинку. Первый курсор - заряжен tim16, второй курсор - где ожидаю срабатывания прерывания (синий вход).

 

TEK00001.BMP

Изменено пользователем Vlad_G

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При инициализации таймера (при изменении ARR и PSC) нужно вручную вызвать событие переполнения:

TIMx->EGR = TIM_EGR_UG;

Только после этого новые значения ARR и PSC будут приняты в работу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

АНТОХА спасибо за мысль. Правда не сработало, но во всяком случае есть в какую сторону двигаться. Где-то не учитываю задержки при старте.

TEK00003.BMP

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 hours ago, AHTOXA said:

счётчик таймера обнулить

Обнулял я с самого начала.

Перекинул на таймеры 14 и 17; также не зависит от времени счета - можно делать 3000 мкс, 6000...; изменять последовательность работы с регистрами; переключение в одно импульсный режим - тоже самое, токо в профиль. Все равно первое прерывание срабатывает через ~1350 мкс. Как-то раньше я такого не замечал, хотя таймеры 16/17 пользую для организации задержек или обновления дисплея. .!. знает...

Пока проблему решил ломовым приемом - в инициализации сделал холостой прогон таймера и усё стало на свои места. Но проблема осталась. Где и как вылезет?

 

TEK00004.BMP

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

может порядок инициализации?? Сперва таймер и он срабатывает, потом что-то еще, потом порты - поэтому затянуто. Возможно, что это аппаратное - чтобы возникло прерывание - нужно что-то включить, а это самое включение происходит с задержкой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...