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

 
 
 
Reply to this topicStart new topic
> LPC2138, конфликт IRQ, перезапускается, как устранить?
arttech
сообщение Feb 20 2008, 11:43
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 62
Регистрация: 28-10-06
Из: г. Севастополь
Пользователь №: 21 744



Подскажите, как можно обойти нижеописанную проблему.

Контроллер производит обработку по 2м прерываниям IRQ.
1. UART0- приоритет 0;
2. Timer0 - приоритет 1;

В процессе передачи данных участвует SPI (вызывается процедура).

Один раз в 20мсек эта подпрограмма (приёма/передачи по SPI) вызывается и работает около 1мсек по времени. Если всё оставить как должно быть, то прерываясь процессор вносит незначительные погрешности в задержках приёма/передачи по SPI и в результате процесс приёма/передачи срывается (в данном случае виноват не LPC, а приёмник). Но Timer0 и UART при этом работают великолепно.

Чтоб избежать срыва в работе при передаче по SPI я на время выполнения процедуры запрещаю прерывания по UART (U0IER = 0x00;). При этом как минимум одно прерывание по UARTу успевает проскочить, но т.к. прерывание дезактивировано, то в буфер UARTa просто добавится плюс один символ, который я потом в процессе смогу забрать самостоятельно, что в дальнейшем и делаю.
Но появляется другая проблема, через каждые 20-40 секунд контроллер начинает перезапускаться.

Как избежать конфликта с прерыванием по UARTу и как устранить перезапуск МК?
Go to the top of the page
 
+Quote Post
KRS
сообщение Feb 20 2008, 11:53
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



если нужно избежать пауз между послыками по SPI - SPI и надо вешать на прерывание.
а обработку UART с его фифо на 16 байт чаще удобнее делать полингом, чем организовывать еще одно программное фифо.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 20 2008, 15:42
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(arttech @ Feb 20 2008, 14:43) *
Как избежать конфликта с прерыванием по UARTу

Запрещать прерывания (просто все прерывания) и использовать FIFO UART, если его глубины хватает.
Цитата
и как устранить перезапуск МК?

Найти у устранить ошибки.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
arttech
сообщение Feb 20 2008, 17:06
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 62
Регистрация: 28-10-06
Из: г. Севастополь
Пользователь №: 21 744



Цитата(zltigo @ Feb 20 2008, 19:42) *
Запрещать прерывания (просто все прерывания) и использовать FIFO UART, если его глубины хватает.

Отличная идея с запретом всех прерываний. Вот этот вариант ещё и не опробовал. Спасибо.
Цитата(zltigo @ Feb 20 2008, 19:42) *
Найти у устранить ошибки.

А эти ошибки надо суметь увидеть, я пока не в состоянии это сделать т.к. велосипед едет, но иногда спотыкается... smile.gif

Хотя проблему уже устранил привязавшись на все 100% к аппаратному SPI. До этого мне нужны были отдельные сигналы MISO_STRB и MOSI_STRB и я их сделал отдельно переключая портовые выводы.
На данном этапе свёл всё к одному синхростробу..
Go to the top of the page
 
+Quote Post

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

 


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


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