Здравствуйте.
Наступил на такие грабли: в одном проекте с вышеобозначенным камнем использую SPI. Причем в основном с PDC, иногда (если 1 байт) то без оного. Но в любом случае, окончание операции отсекаю по прерыванию TXEMPTY. После нескольких удачных операций перестает срабатывать прерывание. При отладке в RAM через JTAG если остановить выполнение, в памяти наблюдается следующая картина: - В регистре SPI_SR бит TXEMPTY установлен; - В SPI_IMR TXEMPTY установлен; - В AIC_IPR установлен бит периферии SPI - В AIC_IMR установлен бит периферии SPI - В соотв. AIC_SMR прерывание сконфигурировано по уровню - В ядре (CPSR) прерывания разрешены И прерывание НЕ ВЫЗЫВАЕТСЯ!!!
Кто может подсказать, где еще могут быть запрещены прерывания?
ЗЫ: Работа с SPI организована так, что чтение осуществляется только через PDC, поэтому я использую только одно прерывание - TXEMPTY. Ессно, свалившись в прерывание, я запрещаю TXEMPTY (т.к. по уровню работаем), а потом, при очередной посылке данных, готовлю передатчик и разрешаю TXEMPTY. Напомню, что первые несколько операций проходят успешно. Путем шаманских плясок выяснилось, что если в начале каждого прерывания выполнять чтение SPI_RDR регистра, то все работает как надо. Почему - не понимаю.
|