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

 
 
> Влияние отладки на прерывания AT91
ivstech
сообщение Feb 23 2007, 10:15
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 204
Регистрация: 5-01-06
Пользователь №: 12 860



Вопрос такой:
Есть обработчик прерывания IRQ от DBGU: AT91C_US_RXRDY и AT91C_US_TXEMPTY.
Если приостановить работу программы JTAG отладчиком (break) и передать 2 байта через HyperTerminal в контроллер AT91SAM7S, произойдет OVERRUN. Далее если продолжить работу контроллера, он указанные прерывания уже не обрабатывает, даже если сбросить OVRE записью AT91C_US_RSTSTA в DBGU_CR.
Отлаживаю в IAR H-JTAG + Wiggler

Дополнительно, не так важно:
В некоторых других случаях (подозреваю, что при остановке в момент передачи байта), но с 100% вероятностью нарушается нормальная работа всей программы, по последствиям похоже на затирание стеком/стека. Увеличение размеров стеков, сохранение всех регистров (R1-R11 место R1-R3) в обработчике IRQ не меняет ничего. Можно еще попробовать программу разместить не в ОЗУ, а во FLASH
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 3)
ivstech
сообщение Feb 23 2007, 16:25
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 204
Регистрация: 5-01-06
Пользователь №: 12 860



Сбои устранились после установки вместо H-JTAG V0.2 версии V0.4

Остался вопрос по прерываниям:
Если прекратить выполнение программы отладчиком внутри прерывания, то при повторной загрузке программы прерывания не вызываются, нужно сделать аппаратный сброс (нажатием кнопки на плате). Я так понимаю, контроллером запоминается приоритет выполняемого прерывания.
Как заставить прерывания отрабатывать, не выполняя аппаратного сброса?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 23 2007, 16:29
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(ivstech @ Feb 23 2007, 15:25) *
Как заставить прерывания отрабатывать, не выполняя аппаратного сброса?
вставить в процедуру инициализации AT91C_BASE_AIC->AIC_EOICR = 0;


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Feb 24 2007, 04:15
Сообщение #4


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

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



Так же можно добавить
AT91C_BASE_AIC->AIC_DEBUG = 1;


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post

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

 


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


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