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

 
 
> Прерывания STM32F050 не работают, если не дёргаешь этот порт, Подскажите куда копать.
shdv
сообщение Jun 16 2014, 05:23
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 27-04-05
Из: Челябинск
Пользователь №: 4 534



Прерывания заведены с ног порта B0 и B2 дабы различать их было можно!
Ноги B9, B10, B11 - включены на выход. До тех пор, пока не начинаю периодично дёргать одну из выходных ног, прерывания от ног B0 и B2 не возникают (если одна нога стоит в 1, этого не достаточно, прерывание возникает если на порт подается меандр...).
Может кто сталкивался с данной проблемой? Убил уже день и ночь на решение, ничего путного в голову не лезет...
Использую Coocox.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Jun 18 2014, 08:02
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



1) как объявлены c_flag и g_flag?
2) для полной красоты не хватает __DSB() в конце каждого обработчика прерывания
3) Если одно из прерываний произойдет с момента выхода из другого до сброса c_flag, g_flag в основном цикле - оно просто сбросит свой флаг и основной цикл его не заметит, потеряет.
4) прерывания имеют разный приоритет, значит прерывание EXTI0 может сработать внутри обработчика EXTI2 и случится полная каша.
5) в железе PB9, 10, 11 подключены к другим входам EXTI и влиять не должны никак.

Полагаю, что причина в п. 1. Могу предположить, что вы объявили их без квалификатора volatile и тогда добавление кода махания ногами PB9...11, из-за использования вызовов функций SPL, заставляет компилятор вычитывать c_flag и g_flag из памяти в начале каждой итерации цикла. Без кода махания ногами компилятор из-за отсутствия volatile оставляет их закешированными в регистрах и изменение обработчиками их копий в памяти на значения в регистрах не влияет.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 24th July 2025 - 04:01
Рейтинг@Mail.ru


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