|
|
  |
Bопрос по АРМ9, Обработчики прерываний |
|
|
|
Feb 26 2009, 10:48
|
Участник

Группа: Новичок
Сообщений: 61
Регистрация: 29-01-09
Пользователь №: 44 105

|
удалось запустить ДМА. Фокус с ремэпом прокатл-к той же памяти можно обращаться как к кешируемой и нет,через разные адреса! кстати для дма-памяти оставлять buferable? он не нужен,полезен или вреден? дма также работает на передачу с памятью которая кэширована, но небуферизована- почему? меня аж заинтересовало
|
|
|
|
|
Feb 26 2009, 12:04
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(axa09 @ Feb 26 2009, 13:48)  кстати для дма-памяти оставлять buferable? он не нужен,полезен или вреден? Он полезен, но использовать с DMA нужно с осторожностью, т.е. своевременно очищать. Цитата(axa09 @ Feb 26 2009, 13:48)  дма также работает на передачу с памятью которая кэширована, но небуферизована- почему? Во-первых, память не бывает кэширована, но при этом не буферизирована. Во-вторых, почему DMA не должен работать (когерентность данных тут другой вопрос)?
|
|
|
|
|
Feb 26 2009, 12:40
|
Участник

Группа: Новичок
Сообщений: 61
Регистрация: 29-01-09
Пользователь №: 44 105

|
как и когда очищать буферизованый буфер для ДМА?
ЗЫ: ДМА дал свои плоды в приросте производительности! делаю так: в обработчике прерывания возобновляю указатель и счётчик передачи. затем строю вторую половину буфера(ёмкий процесс!) жду окончания пересылки ДМА(почти ничего по времени!) затем свопаю указатели половин буфера. выхожу из прерывания и до следующего раза. играет быстро и без заиканий!
|
|
|
|
|
Feb 26 2009, 15:10
|
Участник

Группа: Новичок
Сообщений: 61
Регистрация: 29-01-09
Пользователь №: 44 105

|
Не совсем понял. команду очистки давать до старта дма, когда уже в буфер(массив в программе) записали данные?
а если я пишу в этот массив через другое адресное пространство(ремэп) которое кэшировано+буферизовано?
где и когда следует выполнять префетч для кода?
|
|
|
|
|
Feb 26 2009, 15:15
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(axa09 @ Feb 26 2009, 18:10)  Не совсем понял. команду очистки давать до старта дма, когда уже в буфер(массив в программе) записали данные? Да. Цитата(axa09 @ Feb 26 2009, 18:10)  а если я пишу в этот массив через другое адресное пространство(ремэп) которое кэшировано+буферизовано? Тогда нужно еще и сбросить кэш, если он write-back. Цитата(axa09 @ Feb 26 2009, 18:10)  где и когда следует выполнять префетч для кода? Как правило, эта процедура выполняется при необходимости "залочить" код в кэше. Просто так большого смысла не имеет.
|
|
|
|
|
Feb 26 2009, 23:09
|
Участник

Группа: Новичок
Сообщений: 61
Регистрация: 29-01-09
Пользователь №: 44 105

|
Подскажите пожалуйста где здесь функция очистки буфера и сброса кэша которые необходимы в моем случае:
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
Помогите плиз!
|
|
|
|
|
Feb 26 2009, 23:19
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(axa09 @ Feb 27 2009, 02:09)  Подскажите пожалуйста где здесь функция очистки буфера и сброса кэша которые необходимы в моем случае: В Вашем случае сначала нужно разобраться с работой кэша и составить четкое представление, когда он нужен/полезен, а когда наоборот. Для буфера, который будет только отправлен наружу через DMA, он однозначно вреден. Очистка буфера записи: Код Drain write buffer SBZ MCR p15, 0, <Rd>, c7, c10, 4
|
|
|
|
|
Feb 27 2009, 00:07
|
Участник

Группа: Новичок
Сообщений: 61
Регистрация: 29-01-09
Пользователь №: 44 105

|
тоесть Rd должен быть равен нулю:
mov r0, 0 mcr p15, 0, r0, c7, c10, 4
так?
какую бы вы литературу посоветуете по кэшам?
|
|
|
|
|
Feb 27 2009, 04:58
|
Участник

Группа: Новичок
Сообщений: 61
Регистрация: 29-01-09
Пользователь №: 44 105

|
в чём хорош режим сквозной записи кэша по сравнению с обратной записью? ведь каждый раз пишем во внешнюю память вместе с кэшем. раздобыл книгу 'современные микропроцессоры' Корнеев, Киселёв. кое-что прояснил. при сквозном кэшировании кэш сбрасывать не надо, что и подтвердилось. паралельно нашёл про software dma- команды ldmia stmia за один присест сразу 8 слов копирует! есть ли смысл применить их в функции отрисовки, чтоб быстрее было? хочу с АРма9 выжать всё
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|