|
|
  |
Производительность SAM9XE, непонятки с этим процом |
|
|
|
Jan 16 2010, 07:42
|
Группа: Участник
Сообщений: 13
Регистрация: 14-01-10
Пользователь №: 54 820

|
Цитата(vmp @ Jan 15 2010, 13:32)  Пример инициализации MMU для SAM9XE под IAR 5.x Раскладка ОЗУ - кешируются 31 мегабайт из 32, последний мегабайт оставлен для буферов при работе с DMA (некешируемый). Секцию "TLB" нужно задать в .icf - файле, я ее клал в последние 16К последнего мегабайта ОЗУ (в некешируемую область), с адреса 0x21FFC000. Спасибо за файлик. После некоторых его исправлений я наконец-то получил таки мои 200мипсов! Я так подумал, а почему бы не разместить TLB таких объемов во FLASH(и ОЗУ не надо тратить и должно врое работать все), и разместил, залил вуаля, все также нормально(вроде нормально) работает.
mmu_sam9xe.zip ( 2 килобайт )
Кол-во скачиваний: 166
|
|
|
|
|
Jan 16 2010, 08:46
|
Группа: Участник
Сообщений: 13
Регистрация: 14-01-10
Пользователь №: 54 820

|
Ндаа. Радость была недолгой. Вставил во FreeRTOS, после prvSetupTimerInterrupt - это конфиг таймера шедулера - зависает все ((. подправил исходничек и вуаля на FreeRTOS тоже заработало
mmu_sam9xe_2.zip ( 2 килобайт )
Кол-во скачиваний: 174============== Кстати, что за глюк форума, не дает отредактировать сообщение.
Сообщение отредактировал EugenB2 - Jan 16 2010, 09:23
|
|
|
|
|
Jan 16 2010, 18:38
|
Знающий
   
Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858

|
Цитата(EugenB2 @ Jan 15 2010, 16:20)  Cам в догадках... \ ??testit_0: \ 00000008 10109FE5 LDR R1,??testit_1 ;; 0xd59f80 единственное обращение к памяти, а производительности особо не прибавилось \ 0000000C 010050E1 CMP R0,R1 \ 00000010 0100002A BCS ??testit_2 \ 00000014 010090E2 ADDS R0,R0,#+1 \ 00000018 FAFFFFEA B ??testit_0 468 } \ ??testit_2: \ 0000001C 1EFF2FE1 BX LR ;; return Может я и не прав - у arm9 кэши логические - они работают с логичсескими адресами, а таблицы страниц не что иное как данные, в совокупности с тем что 926 в отличие от 720 имеют гарвардскую архитектуру им нужно и кэш данных включать.
Сообщение отредактировал sasamy - Jan 16 2010, 19:38
|
|
|
|
|
Feb 9 2010, 12:24
|
Участник

Группа: Участник
Сообщений: 55
Регистрация: 26-11-05
Пользователь №: 11 420

|
Уважаемый vmp! Возвращаясь к вашему примеру, не могли бы вы пояснить, как имеено связаны биты C и B описания секций с областью DMA? Интуитивно понятно, но чем все-таки это чревато?
Уважаемый vmp! Возвращаясь к вашему примеру, не могли бы вы пояснить, как имеено связаны биты C и B описания секций с областью DMA? Интуитивно понятно, но чем все-таки это чревато?
|
|
|
|
|
Feb 9 2010, 12:42
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(V_M_Luck @ Feb 9 2010, 15:24)  Уважаемый vmp! Возвращаясь к вашему примеру, не могли бы вы пояснить, как имеено связаны биты C и B описания секций с областью DMA? Интуитивно понятно, но чем все-таки это чревато? Я хоть и не vmp, но отвечу  Рассмотрим два случая: 1. DMA пишет в память. В том случае, если DMA производит запись в область памяти, для которой включено кэширование (любого типа), то существует ненулевая вероятность, что ядро при чтении поднимет данные из кэша, вместо обращения к памяти. То есть для нормальной работы придется полностью или частично сбрасывать кэш перед чтением. 2. DMA читает из памяти. Здесь мы наблюдаем обратный эффект: в памяти могут содержаться устаревшие с точки зрения ядра данные, если кэш сконфигурирован в режиме write-back.
|
|
|
|
|
Feb 9 2010, 12:54
|
Участник

Группа: Участник
Сообщений: 55
Регистрация: 26-11-05
Пользователь №: 11 420

|
Спасибо за ответ. Это в общем-то понятно. Вопрос возник вот почему. Я, разбираясь в этом вопросе провожу некоторые эксперименты. Я настроил UART на выдачу через PDC. Ну и шлю на ПК строчки. Без ММУ и кэшей все работает. Подключаю ММУ, все ОЗУ - одним сектором, кэш и буферизация включены, DCash, ICASH включены - все ОК. Отключаю DCash - тоже работает, но начинает глючить дебаггер. Отключаю кэш и буферизацию в ММУ - не работает! Вишу в Data abort. Как же корректно сконфигурировать ММУ и кэши для использования DMA?
|
|
|
|
|
Feb 10 2010, 06:32
|

Местный
  
Группа: Свой
Сообщений: 426
Регистрация: 20-01-05
Из: Зеленоград
Пользователь №: 2 070

|
Цитата(V_M_Luck @ Feb 9 2010, 15:54)  Как же корректно сконфигурировать ММУ и кэши для использования DMA? Пример я уже давал выше. Буфера надо располагать в некешируемой области - для данного примера это от 0x21F00000 до 0x21FFBFFF. В некешируемой области биты С и B должны быть равны 0 (некешируемая и небуферируемая). Еще раз обращаю винмание на тонкость с переадресацией 0-х адресов - их надо отображать в 0x00200000 (флеш), иначе не работают прерывания. Data Abort - возможно, вы настроили не всю таблицу. То, что у вас работал PDC из кешируемой памяти - либо просто везение (эти адреса не лежали в кеше), либо неправильная настройка (кеш был выключен или эта область памяти не кешировалась).
|
|
|
|
|
Feb 10 2010, 07:38
|
Участник

Группа: Участник
Сообщений: 55
Регистрация: 26-11-05
Пользователь №: 11 420

|
Цитата(aaarrr @ Feb 9 2010, 16:57)  Посмотрите, откуда падаете в Data Abort. Связь с кэшем тут если и есть, то весьма опосредованная. Попадаю из первого обращения к стеку. Я пользуюсь примером EugenB2. Единственное, я маплю адреса Boot Memory на Flash, поэтому первая запись TT 0x00000C1A. Когда отключаю DCache, убираю запись в TT 0x00300C1E (SRAM) - попадаю в Data Abort. То же, если TT не исправлять. Цитата(vmp) Пример я уже давал выше. Буфера надо располагать в некешируемой области - для данного примера это от 0x21F00000 до 0x21FFBFFF. Если использовать SRAM, то необходимо его дробить на мелкие страницы?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|