Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: LPC2138, конфликт IRQ
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
arttech
Подскажите, как можно обойти нижеописанную проблему.

Контроллер производит обработку по 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у и как устранить перезапуск МК?
KRS
если нужно избежать пауз между послыками по SPI - SPI и надо вешать на прерывание.
а обработку UART с его фифо на 16 байт чаще удобнее делать полингом, чем организовывать еще одно программное фифо.
zltigo
Цитата(arttech @ Feb 20 2008, 14:43) *
Как избежать конфликта с прерыванием по UARTу

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

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

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

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

Хотя проблему уже устранил привязавшись на все 100% к аппаратному SPI. До этого мне нужны были отдельные сигналы MISO_STRB и MOSI_STRB и я их сделал отдельно переключая портовые выводы.
На данном этапе свёл всё к одному синхростробу..
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.