Перейти к содержанию
    

SAM9X25 работа EMAC c кэшем

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

 

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

 

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

 

Куда рыть?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Куда рыть?

 

DMA контроллер тут ни при чем. Это настройки регионов MMU, нужно объявить некешируемый регион и туда указать адрес EMAC.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

DMA контроллер тут ни при чем. Это настройки регионов MMU, нужно объявить некешируемый регион и туда указать адрес EMAC.

Понятно, что это выход. Хотелось бы знать, все так делают или есть другие способы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Понятно, что это выход. Хотелось бы знать, все так делают или есть другие способы?

Еще можно делать invalidate для буфера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Еще можно делать invalidate для буфера.

 

Так-то оно так, но буфер бывает большой, а кэша жалко :laughing:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так-то оно так, но буфер бывает большой, а кэша жалко :laughing:

Что жалко - забивать кэш буфером?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что жалко - забивать кэш буфером?

 

Да. Кеш всего 32кб, а буфер занимает половину, вытесняя код программы, в следствие чего теряется быстродействие.... Зачем, когда можно просто объявить его в некэшируемом регионе :laughing:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да. Кеш всего 32кб, а буфер занимает половину, вытесняя код программы, в следствие чего теряется быстродействие....

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

 

Зачем, когда можно просто объявить его в некэшируемом регионе :laughing:

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

Разместил буфер в некэщируемой области - заработало, как и ожидалось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Все правильно, сам тоже так делал, копировал не весь буфер а нужный кусок в кэшируемую область и там его расколупывал :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...