axa09 0 26 февраля, 2009 Опубликовано 26 февраля, 2009 · Жалоба удалось запустить ДМА. Фокус с ремэпом прокатл-к той же памяти можно обращаться как к кешируемой и нет,через разные адреса! кстати для дма-памяти оставлять buferable? он не нужен,полезен или вреден? дма также работает на передачу с памятью которая кэширована, но небуферизована- почему? меня аж заинтересовало ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 26 февраля, 2009 Опубликовано 26 февраля, 2009 · Жалоба кстати для дма-памяти оставлять buferable? он не нужен,полезен или вреден? Он полезен, но использовать с DMA нужно с осторожностью, т.е. своевременно очищать. дма также работает на передачу с памятью которая кэширована, но небуферизована- почему? Во-первых, память не бывает кэширована, но при этом не буферизирована. Во-вторых, почему DMA не должен работать (когерентность данных тут другой вопрос)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
axa09 0 26 февраля, 2009 Опубликовано 26 февраля, 2009 · Жалоба как и когда очищать буферизованый буфер для ДМА? ЗЫ: ДМА дал свои плоды в приросте производительности! делаю так: в обработчике прерывания возобновляю указатель и счётчик передачи. затем строю вторую половину буфера(ёмкий процесс!) жду окончания пересылки ДМА(почти ничего по времени!) затем свопаю указатели половин буфера. выхожу из прерывания и до следующего раза. играет быстро и без заиканий! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 26 февраля, 2009 Опубликовано 26 февраля, 2009 · Жалоба как и когда очищать буферизованый буфер для ДМА? Очевидно, что очищать надо после записи буфера и до старта DMA. Команда сопроцессора есть в мануале. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
axa09 0 26 февраля, 2009 Опубликовано 26 февраля, 2009 · Жалоба Не совсем понял. команду очистки давать до старта дма, когда уже в буфер(массив в программе) записали данные? а если я пишу в этот массив через другое адресное пространство(ремэп) которое кэшировано+буферизовано? где и когда следует выполнять префетч для кода? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 26 февраля, 2009 Опубликовано 26 февраля, 2009 · Жалоба Не совсем понял. команду очистки давать до старта дма, когда уже в буфер(массив в программе) записали данные? Да. а если я пишу в этот массив через другое адресное пространство(ремэп) которое кэшировано+буферизовано? Тогда нужно еще и сбросить кэш, если он write-back. где и когда следует выполнять префетч для кода? Как правило, эта процедура выполняется при необходимости "залочить" код в кэше. Просто так большого смысла не имеет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
axa09 0 26 февраля, 2009 Опубликовано 26 февраля, 2009 · Жалоба Подскажите пожалуйста где здесь функция очистки буфера и сброса кэша которые необходимы в моем случае: 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 69 26 февраля, 2009 Опубликовано 26 февраля, 2009 · Жалоба Подскажите пожалуйста где здесь функция очистки буфера и сброса кэша которые необходимы в моем случае: В Вашем случае сначала нужно разобраться с работой кэша и составить четкое представление, когда он нужен/полезен, а когда наоборот. Для буфера, который будет только отправлен наружу через DMA, он однозначно вреден. Очистка буфера записи: Drain write buffer SBZ MCR p15, 0, <Rd>, c7, c10, 4 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
axa09 0 27 февраля, 2009 Опубликовано 27 февраля, 2009 · Жалоба тоесть Rd должен быть равен нулю: mov r0, 0 mcr p15, 0, r0, c7, c10, 4 так? какую бы вы литературу посоветуете по кэшам? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
axa09 0 27 февраля, 2009 Опубликовано 27 февраля, 2009 · Жалоба в чём хорош режим сквозной записи кэша по сравнению с обратной записью? ведь каждый раз пишем во внешнюю память вместе с кэшем. раздобыл книгу 'современные микропроцессоры' Корнеев, Киселёв. кое-что прояснил. при сквозном кэшировании кэш сбрасывать не надо, что и подтвердилось. паралельно нашёл про software dma- команды ldmia stmia за один присест сразу 8 слов копирует! есть ли смысл применить их в функции отрисовки, чтоб быстрее было? хочу с АРма9 выжать всё :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться