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

 
 
> Проблемы с UART под отладкой, Залипает прерывание
b-volkov
сообщение Apr 9 2009, 05:40
Сообщение #1


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

Группа: Свой
Сообщений: 137
Регистрация: 10-04-07
Из: г. Троицк
Пользователь №: 26 907



Имеем: LPC2148 + IAR + Wigller. Девайс непрерывно обменивается данными с РС через UART. Останавливаем программу кнопкой [Break] или по брекпоинту – без разницы. После остановки данные еще какое-то время продолжают поступать в UART. В регистре UOIIR видно, что имеется отложенное CTI-прерывание, что вполне логично. Если затем продолжить выполнение программы, дав тем самым процу возможность обработать прерывание – все нормально. А во если ее сбросить, то прерывание UART «залипает». После этого идентификатор в UOIIR уже не сбрасывается ни при инициализации UART, ни при обработке прерывания (считывания U0RBR), в результате чего программа постоянно входит в обработчик. Помогает только аппаратный сброс с последующим перезапуском отладчика. Так должно быть или это результат кривого программирования? (во всем остальном UART работает нормально) Почему команда сброса ФИФО во время инициализации не сбрасывает прерывание?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
IgorMarx
сообщение Apr 17 2009, 09:05
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 61
Регистрация: 5-10-05
Из: Зеленоград
Пользователь №: 9 268



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

Во-первых, при остановке по брейкпоинту или ещё как программисты любят наблюдать вкладки периферии и Watch. Я тоже. Не не забывайте, что содержимое этой вкладки, которую вам показывает дебаггер после бряка, он (дебаггер) достаёт через JTAG. Это значит, что он заставляет ядро процессора лезть и перечитывать всю периферию, которая отображается в отладчике, включая панель Watch. Как вы думаете, что будет, если процессор покажет вам состояние, скажем, регистра чтения FIFO, или VICVectAddr? В первом случае ваша программа после продолжения выполнения может эти данные уже не прочитать. Во втором случае ситуация может оказаться ещё интереснее: внутренняя логика VIC управляется чтением и записью будет переключена чтением этого регистра, что должно быть сделано в прерывании, и чтобы сбросить логику, нужно опять же выполнить запись в этот регистр, что должно быть сделано в последних инструкциях обработчика.

Отсюда вывод: при остановке в прерывании у вас НЕ ДОЛЖНЫ ОТОБРАЖАТЬСЯ в отладчике как либо любые регистры, чтение которых меняет логику работы периферии.

Сообщение отредактировал IgorMarx - Apr 17 2009, 09:05
Go to the top of the page
 
+Quote Post



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

 


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


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