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

удалось запустить ДМА.

Фокус с ремэпом прокатл-к той же памяти можно обращаться как к кешируемой и нет,через разные адреса!

 

кстати для дма-памяти оставлять buferable?

он не нужен,полезен или вреден?

 

дма также работает на передачу с памятью которая кэширована, но небуферизована- почему?

 

меня аж заинтересовало ;)

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


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

кстати для дма-памяти оставлять buferable?

он не нужен,полезен или вреден?

Он полезен, но использовать с DMA нужно с осторожностью, т.е. своевременно очищать.

 

дма также работает на передачу с памятью которая кэширована, но небуферизована- почему?

Во-первых, память не бывает кэширована, но при этом не буферизирована. Во-вторых, почему DMA не должен работать (когерентность данных тут другой вопрос)?

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


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

как и когда очищать буферизованый буфер для ДМА?

 

ЗЫ: ДМА дал свои плоды в приросте производительности!

делаю так:

в обработчике прерывания возобновляю указатель и счётчик передачи. затем строю вторую половину буфера(ёмкий процесс!)

жду окончания пересылки ДМА(почти ничего по времени!)

затем свопаю указатели половин буфера.

выхожу из прерывания

и до следующего раза.

играет быстро и без заиканий!

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


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

как и когда очищать буферизованый буфер для ДМА?

Очевидно, что очищать надо после записи буфера и до старта DMA. Команда сопроцессора есть в мануале.

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


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

Не совсем понял.

команду очистки давать до старта дма, когда уже в буфер(массив в программе) записали данные?

 

а если я пишу в этот массив через другое адресное пространство(ремэп) которое кэшировано+буферизовано?

 

где и когда следует выполнять префетч для кода?

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


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

Не совсем понял.

команду очистки давать до старта дма, когда уже в буфер(массив в программе) записали данные?

Да.

 

а если я пишу в этот массив через другое адресное пространство(ремэп) которое кэшировано+буферизовано?

Тогда нужно еще и сбросить кэш, если он write-back.

 

где и когда следует выполнять префетч для кода?

Как правило, эта процедура выполняется при необходимости "залочить" код в кэше. Просто так большого смысла не имеет.

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


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

Подскажите пожалуйста где здесь функция очистки буфера и сброса кэша которые необходимы в моем случае:

 

Function/operation Data format Instruction

Invalidate ICache and DCache SBZ MCR p15, 0, <Rd>, c7, c7, 0

Invalidate ICache SBZ MCR p15, 0, <Rd>, c7, c5, 0

Invalidate ICache single entry (MVA) MVA MCR p15, 0, <Rd>, c7, c5, 1

Invalidate ICache single entry (Set/Way) Set/Way MCR p15, 0, <Rd>, c7, c5, 2

Prefetch ICache line (MVA) MVA MCR p15, 0, <Rd>, c7, c13, 1

Invalidate DCache SBZ MCR p15, 0, <Rd>, c7, c6, 0

Invalidate DCache single entry (MVA) MVA MCR p15, 0, <Rd>, c7, c6, 1

Invalidate DCache single entry (Set/Way) Set/Way MCR p15, 0, <Rd>, c7, c6, 2

Clean DCache single entry (MVA) MVA MCR p15, 0, <Rd>, c7, c10, 1

Clean DCache single entry (Set/Way) Set/Way MCR p15, 0, <Rd>, c7, c10, 2

Test and clean DCache - MRC p15, 0, <Rd>, c7, c10, 3

Clean and invalidate DCache entry (MVA) MVA MCR p15, 0, <Rd>, c7, c14, 1

Clean and invalidate DCache entry (Set/Way) Set/Way MCR p15, 0, <Rd>, c7, c14, 2

Test, clean, and invalidate DCache - MRC p15, 0, <Rd>, c7, c14, 3

Drain write buffer SBZ MCR p15, 0, <Rd>, c7, c10, 4

Wait for interrupt SBZ MCR p15, 0, <Rd>, c7, c0, 4

Invalidate TLB Invalidate set-associative TLB SBZ MCR p15, 0, <Rd>, c8, c7, 0

Invalidate TLB single entry (MVA) Invalidate single entry MVA MCR p15, 0, <Rd>, c8, c7, 1

Invalidate instruction TLB Invalidate set-associative TLB SBZ MCR p15, 0, <Rd>, c8, c5, 0

Invalidate instruction TLB single entry (MVA) Invalidate single entry MVA MCR p15, 0, <Rd>, c8, c5, 1

Invalidate data TLB Invalidate set-associative TLB SBZ MCR p15, 0, <Rd>, c8, c6, 0

Invalidate data TLB single entry (MVA) Invalidate single entry MVA MCR p15, 0, <Rd>, c8, c6, 1

 

Там ещё есть какие-то примерчики, только из описания ничего непонятно что делают и для чего надо:

 

tc_loop: MRC p15, 0, r15, c7, c10, 3 ; test and clean

BNE tc_loop

 

tci_loop: MRC p15, 0, r15, c7, c14, 3 ; test clean and invalidate

BNE tci_loop

 

Помогите плиз!

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


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

Подскажите пожалуйста где здесь функция очистки буфера и сброса кэша которые необходимы в моем случае:

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

Для буфера, который будет только отправлен наружу через DMA, он однозначно вреден.

 

Очистка буфера записи:

Drain write buffer SBZ MCR p15, 0, <Rd>, c7, c10, 4

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


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

тоесть Rd должен быть равен нулю:

 

mov r0, 0

mcr p15, 0, r0, c7, c10, 4

 

так?

 

какую бы вы литературу посоветуете по кэшам?

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


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

в чём хорош режим сквозной записи кэша по сравнению с обратной записью?

ведь каждый раз пишем во внешнюю память вместе с кэшем.

 

раздобыл книгу 'современные микропроцессоры' Корнеев, Киселёв.

кое-что прояснил.

при сквозном кэшировании кэш сбрасывать не надо, что и подтвердилось.

 

паралельно нашёл про software dma- команды

ldmia

stmia

за один присест сразу 8 слов копирует!

есть ли смысл применить их в функции отрисовки, чтоб быстрее было?

 

хочу с АРма9 выжать всё :)

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


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

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

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

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

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

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

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

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

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

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