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

 
 
> AT91SAM7X256, SPI, прерывания, косяк вышел
gladov
сообщение Jan 19 2008, 22:26
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 169
Регистрация: 10-11-05
Из: Воронеж
Пользователь №: 10 687



Здравствуйте.

Наступил на такие грабли: в одном проекте с вышеобозначенным камнем использую 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 регистра, то все работает как надо. Почему - не понимаю.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
KAlex
сообщение Jan 20 2008, 09:38
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 387
Регистрация: 20-12-06
Из: Obninsk
Пользователь №: 23 719



RDRF: Переполнение приемного регистра хранения данных ППИ
0 = C момента последнего чтения SPI_RDR не было принято данных
1 = Данные были приняты и принятые данные переданы из последовательно - параллельного преобразователя в SPI_RDR с момента последнего чтения SPI_RDR

OVRES: Состояние ошибки переполнения
0 = С момента последнего чтения регистра состояния не было обнаружено ошибок переполнения.
1 = С момента последнего чтения регистра состояния была обнаружена ошибка переполнения. Ошибкой считается состояние, когда в SPI_RDR (регистр хранения принимаемых данных) были загружены данные из последовательно - параллельного преобразователя как минимум два раза без чтения.
Go to the top of the page
 
+Quote Post
gladov
сообщение Jan 20 2008, 11:04
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 169
Регистрация: 10-11-05
Из: Воронеж
Пользователь №: 10 687



Цитата(KAlex @ Jan 20 2008, 12:38) *
RDRF: Переполнение приемного регистра хранения данных ППИ
0 = C момента последнего чтения SPI_RDR не было принято данных
1 = Данные были приняты и принятые данные переданы из последовательно - параллельного преобразователя в SPI_RDR с момента последнего чтения SPI_RDR

OVRES: Состояние ошибки переполнения
0 = С момента последнего чтения регистра состояния не было обнаружено ошибок переполнения.
1 = С момента последнего чтения регистра состояния была обнаружена ошибка переполнения. Ошибкой считается состояние, когда в SPI_RDR (регистр хранения принимаемых данных) были загружены данные из последовательно - параллельного преобразователя как минимум два раза без чтения.


Я знаю про эти флаги. Да, приемник переполнятеся если я не вычитываю данные, а я их иногда не вычитываю, если они мне не нужны. Ну и пусть себе переполняется! Почему при этом не срабатывает TXEMPTY?
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 30th June 2025 - 17:38
Рейтинг@Mail.ru


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