ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
25 ноября
145661 Топик полностью
vmp (22.01.2009 11:38, просмотров: 107) ответил vmp на А кто-нибудь может посоветовать, что почитать про кеши в ARM9 и грабли, с ними связанные. Желательно применительно к атмеловским SAM9, использованию PDC и EBI.
Ну ладно, попробую сам изложить результаты своих хождений по граблям. Авось кому-нибудь пригодится. Рассказываю по опыту работы с SAM9XE. В процессоре есть 2 кеша (I и D) + write buffer. I-кеш - для команд, D - для данных, работает в режиме write back (отложенная запись) и write through (сквозная запись). Write Buffer - небольшой буфер, в который попадают данные при записи, чтобы не держать процессор. Кеш команд включается независимо от MMU. Кеш данных и write buffer включаются только при включенном MMU. При работе MMU в простейшем случае логическое адресное пространство 4 гигабайта делится на 4096 секций по 1 мегабайту. Для каждой секции задается физический адрес (тоже с точностью до мегабайта) и аттрибуты кеширования. Секция может быть задана как некешируемая совсем, только write buffer, кеш WT, кеш WB. Для работы MMU нужна таблица дескрипторов. Ее размер в простейшем случае составляет 16 килобайт. Маленькая хитрость: нормальное выполнение кода и прерываний из флеша у меня получилось только когда я переадресовал логические адреса 00000000 на физические 00200000. Режим DMA (работа PDC) никак не учитывает существование кеша. Чтобы добиться нормальной работы PDC нужно либо не включать кеш, либо регулярно чистить кеш и write buffer, либо (предпочтительный метод) создать в адресном пространстве некешируемую секцию (потратив на нее 1 мегабайт) и разместив буфера в этой секции. У меня получилось работать с PDC и буфером во внешнем ОЗУ (SDRAM).