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

 
 
> AT91RM9200: использование кеша и Data Abort, Выключаю кеш- и ошибка пропадает
Ruslan1
сообщение Sep 30 2006, 16:58
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 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 включить? Хочу кеш данных использовать.
Go to the top of the page
 
+Quote Post
2 страниц V  < 1 2  
Start new topic
Ответов (15 - 17)
cf7k
сообщение Oct 7 2006, 16:55
Сообщение #16


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

Группа: Свой
Сообщений: 82
Регистрация: 14-03-06
Из: Санкт-Петербург
Пользователь №: 15 227



В доку по ядру 920 про использование кэша без ММУ написано это:

If the cache is enabled with the MMU disabled, all instruction fetches are treated as
cachable. No protection checks are made, and the physical address is flat-mapped to the
modified virtual address


Так что на стадии освоения вполне можно ускоряться кэшированием и без виртуальной адресации...
Так же для ускорения крайне положительно будет включить синхронный режим шины:

Код
  //i-cache
    asm("MRC p15, 0,  r0, c1, c0, 0");
    asm("ORR r0,  r0, #0x00001000");
    asm("MCR p15, 0,  r0, c1, c0, 0");
  //sync bus
    asm("MRC p15, 0,  r0, c1, c0, 0");
    asm("ORR r0,  r0, #0x40000000");
    asm("MCR p15, 0,  r0, c1, c0, 0");


Сам поездил... ускорение к "просто включенному кэшу" выводит на планируемые MIPS'ы smile.gif

Про DCache написано такое:

You must only enable the DCache when the MMU is enabled. This is because the
MMU translation tables define the cache and write buffer configuration for each
memory region.


Возможно как раз некогерентность кэша данных из-за этого и появилась... (т.е. ICache (у автора исходного сообщения) может совсем и не виноват).
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 7 2006, 17:35
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(cf7k @ Oct 7 2006, 20:55) *
Возможно как раз некогерентность кэша данных из-за этого и появилась... (т.е. ICache (у автора исходного сообщения) может совсем и не виноват).

Так не включал он DCache, как я понял.
Go to the top of the page
 
+Quote Post
cf7k
сообщение Oct 7 2006, 20:27
Сообщение #18


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

Группа: Свой
Сообщений: 82
Регистрация: 14-03-06
Из: Санкт-Петербург
Пользователь №: 15 227



Цитата(aaarrr @ Oct 7 2006, 21:35) *
Так не включал он DCache, как я понял.


Нда... это я стормозил... съедаю шляпу. %)
Go to the top of the page
 
+Quote Post

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

 


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


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