|
Модераторы: PILOT, ManiaK, Mazzi |
|
supercelt |
|
|||
Опытный Профиль Группа: Участник Сообщений: 658 Регистрация: 25.8.2005 Репутация: нет Всего: 1 |
И снова здравствуйте! Помогите с внешними прерываниями.
Совсем запутался, потмогие плз. Везде в уроках рассматривают прерывания на 0, максимум 1 пинах, но если надо повесить на пины больше 10, уже путанница. Надо зажигать светодиод, когда на пинах PB11, 12,13,14 лог 1.
Код не работает( И что значит элемент массива EXTICR[2]. Всмысле почему одни там ставят 0, а другие 1 и так далее.? |
|||
|
||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
А Reference Manual на камень почитать не судьба? В камне есть 4 регистра (EXTICR1/2/3/4), расположенные последовательно в адресном пространстве. Вот их и описали как массив из 4х элементов. Каждый регистр содержит флаги для 4х входных пинов. В EXTICR1 (он же EXTICR[0]) для EXTIO0/1/2/3, в следующем (EXTICR2 или EXTICR[1]) для EXTIO4/5/6/7 ну и т.д. Собственно идентификаторы для ножек прерывания (AFIO_EXTICR4_EXTI13_PB например) на это намекают - бит EXTI13 в регистре EXTICR4 (в этом месте у вас правильно написано) Вот только смущает AFIO->EXTICR[3] |= . Почему бы не просто присвоить? AFIO->EXTICR[3] = |
|||
|
||||
supercelt |
|
|||
Опытный Профиль Группа: Участник Сообщений: 658 Регистрация: 25.8.2005 Репутация: нет Всего: 1 |
Нашёл пару ошибок, подправил
Но всё-равно не работает. В отладчике, при нажатии кнопки и соответственно смены фронта с 0 на 1 на пинах 11,12,13,14 (кеил5) в периферии, в NVIC, в регистрах ISPR1 и ICPR1 появляется значение 0x100. На этом всё ( |
|||
|
||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Глобально прерывания разрешили ( __enable_irq() ) ?
|
|||
|
||||
supercelt |
|
|||
Опытный Профиль Группа: Участник Сообщений: 658 Регистрация: 25.8.2005 Репутация: нет Всего: 1 |
У меня кстати прерывание на таймер работало и без этой строчки. Вставил, для проверки. Всё-равно не работает(
|
|||
|
||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Тогда увы - идеи кончились. Надо вдумчиво курить PM на камень.
Хотя одна идея осталась - не надо ли на EXTI3_IRQHandler и EXTI4_IRQHandler написать какие нибудь прагмы, что бы компилятор сделал из них обработчики прерываний? |
|||
|
||||
supercelt |
|
|||
Опытный Профиль Группа: Участник Сообщений: 658 Регистрация: 25.8.2005 Репутация: нет Всего: 1 |
кому пригодиться. Решение проблемы:
Поменять местами строчки. Сначало сбрасывать PR, потом делать всё остальное. Это баг ARM, о котором все молчат © |
|||
|
||||
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)" | |
|
На данный раздел помимо Правил форума распространяются текже следующие правила:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |