Вопрос такой: Есть обработчик прерывания 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
|