Всем добрый вечер!
Колупаю свежеприобретённую плату на stm32f407zet6. Пытаюсь завести прерывания от RTC. Программа на ассемблере, поэтому весь код приводить не буду. Я действую следующим образом: захожу в отладку Keil'а, запускаю программу на выполнение. Мне надо, чтобы каждую секунду программа вылетала на прерывание (простейшая моргалка). В обработчике прерывания стоит точка останова, программа не останавливается. Я нажимаю "Стоп" и проверяю состояние программы: 1) NVIC, пункт 57 ( RTC Alarms (A and B) through EXTI line interrupt ): E(nabled) = 1, P(ending) = 0, A(ctive) = 0. То есть, прерывание разрешено, но не активно и не обрабатывается. 2) EXTI: IMR, MR17 = 1, EMR = 0, то есть, EXTI линия 17 (на которой висит RTC) включена. EMR = 0, то есть, это прерывание, а не событие. RTSR (rising edge) TR17 = 1, выбран возрастающий фронт. PR = 0, никаких pending interrupts нет. То есть, прерывание от RTC не добралось до EXTI. 3) RTC: В регистре CR флаги ALRAE и ALRAIE стоят. То есть, Alarm A включено и прерывание по нему - тоже. В регистре ISR флаг ALRAF стоит - тревога сработала. Но прерывания - не было! Команда CPSIE f в конце настройки присутствует и выполнена. Глобальные прерывания должны быть разрешены. Вопрос: что я забыл настроить? Куда лезьть, что проверять? Может, я какие-то периферийные прерывания запретил, или какой-нибудь уровень прерываний не выставлен? Но тогда бы в EXTI висел бит Pending... В идеале, если я действительно забыл что-то включить/отключить/настроить, я предполагаю прямо в отладчике исправить соответствующий бит, убедиться, что прерывания срабатывают - а дальше править программу. Только вот что исправлять - непонятно. Буду благодарен за любые идеи и подсказки...
|