|
Проблемы с UART под отладкой, Залипает прерывание |
|
|
|
 |
Ответов
|
Apr 17 2009, 09:05
|

Участник

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

|
Здравствуйте.
Во-первых, при остановке по брейкпоинту или ещё как программисты любят наблюдать вкладки периферии и Watch. Я тоже. Не не забывайте, что содержимое этой вкладки, которую вам показывает дебаггер после бряка, он (дебаггер) достаёт через JTAG. Это значит, что он заставляет ядро процессора лезть и перечитывать всю периферию, которая отображается в отладчике, включая панель Watch. Как вы думаете, что будет, если процессор покажет вам состояние, скажем, регистра чтения FIFO, или VICVectAddr? В первом случае ваша программа после продолжения выполнения может эти данные уже не прочитать. Во втором случае ситуация может оказаться ещё интереснее: внутренняя логика VIC управляется чтением и записью будет переключена чтением этого регистра, что должно быть сделано в прерывании, и чтобы сбросить логику, нужно опять же выполнить запись в этот регистр, что должно быть сделано в последних инструкциях обработчика.
Отсюда вывод: при остановке в прерывании у вас НЕ ДОЛЖНЫ ОТОБРАЖАТЬСЯ в отладчике как либо любые регистры, чтение которых меняет логику работы периферии.
Сообщение отредактировал IgorMarx - Apr 17 2009, 09:05
|
|
|
|
|
Apr 17 2009, 10:54
|
self made
   
Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795

|
Цитата(IgorMarx @ Apr 17 2009, 04:05)  Здравствуйте.
Во-первых, при остановке по брейкпоинту или ещё как программисты любят наблюдать вкладки периферии и Watch. Я тоже. Не не забывайте, что содержимое этой вкладки, которую вам показывает дебаггер после бряка, он (дебаггер) достаёт через JTAG. Это значит, что он заставляет ядро процессора лезть и перечитывать всю периферию, которая отображается в отладчике, включая панель Watch. Как вы думаете, что будет, если процессор покажет вам состояние, скажем, регистра чтения FIFO, или VICVectAddr? В первом случае ваша программа после продолжения выполнения может эти данные уже не прочитать. Во втором случае ситуация может оказаться ещё интереснее: внутренняя логика VIC управляется чтением и записью будет переключена чтением этого регистра, что должно быть сделано в прерывании, и чтобы сбросить логику, нужно опять же выполнить запись в этот регистр, что должно быть сделано в последних инструкциях обработчика.
Отсюда вывод: при остановке в прерывании у вас НЕ ДОЛЖНЫ ОТОБРАЖАТЬСЯ в отладчике как либо любые регистры, чтение которых меняет логику работы периферии. Это не верно, по крайней мере в общем случае. Если это так для ЛПЦ, то это очень странно. Механизм JTAG не использует никакие функции ядра. Это соверщенно независимая система. О том что какой-то регистр бы прочитан через JTAG, ядро узнать никак не может. Другое дело что если вы пишете в регистр который управляется записью или чтением, то опять таки это не тоже самое, как если бы ядро его записало. В этом случае возможны как раз серьезные глюки, в зависимости от того, как устроен процессор. Что вы и наблюдаете. Кстати, а зачем было подвергать прогрмамму такому издевательству -- сбрасывать прерывание?
|
|
|
|
|
Apr 17 2009, 16:20
|

Участник

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

|
Цитата(ar__systems @ Apr 17 2009, 14:54)  Это совершенно независимая система. Что имеется ввиду? JTAG заточен под ядро, работает только с ядром и не имеет никакого понятия о периферии. Или Вы думаете, что при проектировании каждого нового чипа с новой периферией весь механизм JTAG переделывают под конкретный чип? Микроконтроллеры - это макросборки из кубиков, один из которых - ядро ARM - отдельное устройство, другое (это отдельная разработка, на которую есть отдельная документация) - VIC, могу как пример указать конкретный datasheet, и так далее. Кстати, это одна из причин, почему возникают spurious interrupts, от которых никак нельзя избавиться в микроконтроллерах LPC2000
|
|
|
|
Сообщений в этой теме
b-volkov Проблемы с UART под отладкой Apr 9 2009, 05:40 meister Цитата(b-volkov @ Apr 9 2009, 09:40)... Apr 9 2009, 05:45 b-volkov Как нет? А кнопка "Reset"? В смысле, кно... Apr 10 2009, 09:44  meister Цитата(b-volkov @ Apr 10 2009, 13:44... Apr 10 2009, 09:51  Сергей Борщ Цитата(ar__systems @ Apr 17 2009, 13:54) ... Apr 17 2009, 11:07   Wano Цитата(Сергей Борщ @ Apr 17 2009, 14:07) ... Apr 17 2009, 13:26
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|