aaarrr
Feb 26 2009, 15:15
Цитата(axa09 @ Feb 26 2009, 18:10)

Не совсем понял.
команду очистки давать до старта дма, когда уже в буфер(массив в программе) записали данные?
Да.
Цитата(axa09 @ Feb 26 2009, 18:10)

а если я пишу в этот массив через другое адресное пространство(ремэп) которое кэшировано+буферизовано?
Тогда нужно еще и сбросить кэш, если он write-back.
Цитата(axa09 @ Feb 26 2009, 18:10)

где и когда следует выполнять префетч для кода?
Как правило, эта процедура выполняется при необходимости "залочить" код в кэше. Просто так большого смысла не имеет.
Подскажите пожалуйста где здесь функция очистки буфера и сброса кэша которые необходимы в моем случае:
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
Помогите плиз!
aaarrr
Feb 26 2009, 23:19
Цитата(axa09 @ Feb 27 2009, 02:09)

Подскажите пожалуйста где здесь функция очистки буфера и сброса кэша которые необходимы в моем случае:
В Вашем случае сначала нужно разобраться с работой кэша и составить четкое представление, когда он нужен/полезен, а когда наоборот.
Для буфера, который будет только отправлен наружу через 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 выжать всё