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

 
 
 
Reply to this topicStart new topic
> SAM9X25 работа EMAC c кэшем
VladislavS
сообщение Nov 24 2015, 09:20
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Здравствуйте,

Проц Atmel SAM9X25. Включил MMU, ICache и DCache на оперативку. Похоже, процессор перестал видеть входной буфер Ethernet контроллера из-за того что EMAC в режиме DMA пишет в память данные, а кэш не уведомляет.

У основных DMA-контроллеров процессора есть бит, что буфер Cacheble, а у EMAС свой DMA и как его подкрутить не понятно. Отключить кэш на эту страницу памяти можно, но...

Куда рыть?
Go to the top of the page
 
+Quote Post
mantech
сообщение Nov 24 2015, 09:42
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(VladislavS @ Nov 24 2015, 12:20) *
У основных DMA-контроллеров процессора есть бит, что буфер Cacheble, а у EMAС свой DMA и как его подкрутить не понятно. Отключить кэш на эту страницу памяти можно, но...

Куда рыть?


DMA контроллер тут ни при чем. Это настройки регионов MMU, нужно объявить некешируемый регион и туда указать адрес EMAC.
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Nov 24 2015, 10:12
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Цитата(mantech @ Nov 24 2015, 12:42) *
DMA контроллер тут ни при чем. Это настройки регионов MMU, нужно объявить некешируемый регион и туда указать адрес EMAC.

Понятно, что это выход. Хотелось бы знать, все так делают или есть другие способы?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 24 2015, 10:14
Сообщение #4


Гуру
******

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



Цитата(VladislavS @ Nov 24 2015, 13:12) *
Понятно, что это выход. Хотелось бы знать, все так делают или есть другие способы?

Еще можно делать invalidate для буфера.
Go to the top of the page
 
+Quote Post
mantech
сообщение Nov 24 2015, 17:13
Сообщение #5


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(aaarrr @ Nov 24 2015, 13:14) *
Еще можно делать invalidate для буфера.


Так-то оно так, но буфер бывает большой, а кэша жалко laughing.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 24 2015, 17:26
Сообщение #6


Гуру
******

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



Цитата(mantech @ Nov 24 2015, 20:13) *
Так-то оно так, но буфер бывает большой, а кэша жалко laughing.gif

Что жалко - забивать кэш буфером?
Go to the top of the page
 
+Quote Post
mantech
сообщение Nov 24 2015, 18:14
Сообщение #7


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(aaarrr @ Nov 24 2015, 20:26) *
Что жалко - забивать кэш буфером?


Да. Кеш всего 32кб, а буфер занимает половину, вытесняя код программы, в следствие чего теряется быстродействие.... Зачем, когда можно просто объявить его в некэшируемом регионе laughing.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 24 2015, 18:35
Сообщение #8


Гуру
******

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



Цитата(mantech @ Nov 24 2015, 21:14) *
Да. Кеш всего 32кб, а буфер занимает половину, вытесняя код программы, в следствие чего теряется быстродействие....

Код программы он вытеснить как раз не может, I/D раздельные.

Цитата(mantech @ Nov 24 2015, 21:14) *
Зачем, когда можно просто объявить его в некэшируемом регионе laughing.gif

Если с буфером предполагается "плотно поработать", то кэширование может понадобится. Но тут уж надо смотреть по обстоятельствам.
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Nov 25 2015, 06:19
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Цитата(aaarrr @ Nov 24 2015, 21:35) *
Если с буфером предполагается "плотно поработать", то кэширование может понадобится. Но тут уж надо смотреть по обстоятельствам.


Если надо плотно работать, можно скопировать его в кэшируемую область.

Разместил буфер в некэщируемой области - заработало, как и ожидалось.
Go to the top of the page
 
+Quote Post
mantech
сообщение Nov 25 2015, 08:44
Сообщение #10


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(VladislavS @ Nov 25 2015, 09:19) *
Если надо плотно работать, можно скопировать его в кэшируемую область.


Все правильно, сам тоже так делал, копировал не весь буфер а нужный кусок в кэшируемую область и там его расколупывал biggrin.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 03:05
Рейтинг@Mail.ru


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