|
AT91RM9200: использование кеша и Data Abort, Выключаю кеш- и ошибка пропадает |
|
|
|
Sep 30 2006, 16:58
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
Сразу оговорюсь, что если я не включаю кеш в бутлодере, то все работает отлично.
В своем первичном бутлодере включаю кеш команд:
__MCR(15,0,__MRC(15,0,1,0,0) | 0x00001000,1,0,0) ;
Кеш данных не включаю, так как MMU не использую (не умею), а без MMU он не работает. Все отлично и шикарно, ускорение ого-го (в 4 раза при тестировании SDRAM). Но вот когда загружаю в SDRAM основную прошивку и перехожу на нее, то в какой-то момент возникает исключение по вектору 0x10 (Data Abort). При попытке пошагово просмотреть то место, с которого происходит исключение, ничего крамольного не вижу. Более того- если я даже просто ставлю точку останова в основной программе до возникновения исключения, то дальше исключения уже не происходит. То есть достаточно поставить отладчиком точку останова, а при остановке запустить дальше- и никаких усключений, все работает отлично. Такое ощущение, что пока оно стоит, что-то там в кеше успевает дозреть и далее работает нормально.
Ну ладно. Выключаю кеш в конце бутлодера и потом включаю его по новой в основном коде- тоже возникает исключение.
Передаю управление основной программе из бутлодера в состоянии, как можно более близком к ресету (в основной программе происходит полный стартап, кроме уже проинициализированной бутлодером периферии): и ARM-мода, и прерывания выключены, и в супервизоре. Чего ему еще не хватает, не понимаю.
С помощью метода тыка добился почти работоспособного варианта: выключаю кеш где-то посередине бутлодера, и включаю его уже потом в основной программе.
В-общем шаманство какое-то. Может кто-то сталкивался с подобным? И от чего вообще может возникает этот Data Abort, если я не включаю кеш данных (кстати, пробовал включать, ничего не изменилось), и не использую MMU ? И вдогонку: а как MMU включить? Хочу кеш данных использовать.
|
|
|
|
|
 |
Ответов
|
Sep 30 2006, 19:28
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
Цитата(aaarrr @ Sep 30 2006, 20:36)  Не совсем понятно, что у Вас происходит с кешем в самом первом случае - он включается только один раз в bootloader'е, или как? Второй раз включать кеш просто так нельзя, его нужно сначала инвалидировать (регистр 7 в CP15).
P.S. У Атмелов есть Abort Status Register - можно посмотреть, что именно вызвало Data Abort. Это про первую строчку сообщения? Если я не включаю кеш в бутлодере, а включаю его в стартапе основного приложения, то все работает без ошибок. Был у меня и вариант, когда кеш включается только в бутлодере и все. Результат: при передаче управления основной программе программа успевает совершить некоторые действия (выдать в дебаггерский порт сообщение о своем старте) и виснет. Вероятно, происходит то же исключение, у меня там заглушка. Насчет инвалидировать- спасибо, я не знал. Сейчас(нет, все же завтра) прочитаю еще раз описание CP15. В случае этого действия что произойдет? довыполнятся операции, уже сохраненные в кеше, и кеш выключится? Мне кажется, что у меня такая хитрость: во время работы кеша происходит, можно сказать, переключение контекста (в адресах SDRAM появляется новый код). Может быть, в этом и дело?
|
|
|
|
Сообщений в этой теме
Ruslan1 AT91RM9200: использование кеша и Data Abort Sep 30 2006, 16:58 yuri_t Использование cache без включенного MMU не рекомен... Sep 30 2006, 17:41 Ruslan1 Цитата(yuri_t @ Sep 30 2006, 20:41) Испол... Sep 30 2006, 19:54 aaarrr Цитата(yuri_t @ Sep 30 2006, 21:41) Испол... Sep 30 2006, 18:07 yuri_t To aaarrr
Насчет использования I-cache without MM... Sep 30 2006, 18:42 aaarrr Цитата(Ruslan1 @ Sep 30 2006, 23:28) Насч... Sep 30 2006, 20:16 Ruslan1 Цитата(aaarrr @ Sep 30 2006, 23:16) Цитат... Sep 30 2006, 20:35 yuri_t Я не призываю не использовать cache, IMHO, просто ... Sep 30 2006, 20:35 Ruslan1 Цитата(yuri_t @ Sep 30 2006, 23:35) Я не ... Sep 30 2006, 20:43 aaarrr Цитата(Ruslan1 @ Oct 1 2006, 00:35) Вона ... Sep 30 2006, 21:44 DropDown Цитата(Ruslan1 @ Sep 30 2006, 19:58) И вд... Oct 1 2006, 05:53 Rst7 Цитата(Ruslan1 @ Sep 30 2006, 19:58) В-об... Oct 1 2006, 07:03 sergeeff Ощущение такое, что ошибка в чем-то другом. Я рабо... Oct 2 2006, 05:29 cf7k В доку по ядру 920 про использование кэша без ММУ ... Oct 7 2006, 16:55 aaarrr Цитата(cf7k @ Oct 7 2006, 20:55) Возможно... Oct 7 2006, 17:35 cf7k Цитата(aaarrr @ Oct 7 2006, 21:35) Так не... Oct 7 2006, 20:27
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|