Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SAM9X25 работа EMAC c кэшем
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
VladislavS
Здравствуйте,

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

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

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

Куда рыть?


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

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

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


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

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


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

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

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

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


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

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


Все правильно, сам тоже так делал, копировал не весь буфер а нужный кусок в кэшируемую область и там его расколупывал biggrin.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.