реклама на сайте
подробности

 
 
4 страниц V  « < 2 3 4  
Reply to this topicStart new topic
> Bопрос по АРМ9, Обработчики прерываний
axa09
сообщение Feb 26 2009, 10:48
Сообщение #46


Участник
*

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



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

кстати для дма-памяти оставлять buferable?
он не нужен,полезен или вреден?

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

меня аж заинтересовало wink.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 26 2009, 12:04
Сообщение #47


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(axa09 @ Feb 26 2009, 13:48) *
кстати для дма-памяти оставлять buferable?
он не нужен,полезен или вреден?

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

Цитата(axa09 @ Feb 26 2009, 13:48) *
дма также работает на передачу с памятью которая кэширована, но небуферизована- почему?

Во-первых, память не бывает кэширована, но при этом не буферизирована. Во-вторых, почему DMA не должен работать (когерентность данных тут другой вопрос)?
Go to the top of the page
 
+Quote Post
axa09
сообщение Feb 26 2009, 12:40
Сообщение #48


Участник
*

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



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

ЗЫ: ДМА дал свои плоды в приросте производительности!
делаю так:
в обработчике прерывания возобновляю указатель и счётчик передачи. затем строю вторую половину буфера(ёмкий процесс!)
жду окончания пересылки ДМА(почти ничего по времени!)
затем свопаю указатели половин буфера.
выхожу из прерывания
и до следующего раза.
играет быстро и без заиканий!
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 26 2009, 12:50
Сообщение #49


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(axa09 @ Feb 26 2009, 15:40) *
как и когда очищать буферизованый буфер для ДМА?

Очевидно, что очищать надо после записи буфера и до старта DMA. Команда сопроцессора есть в мануале.
Go to the top of the page
 
+Quote Post
axa09
сообщение Feb 26 2009, 15:10
Сообщение #50


Участник
*

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



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

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

где и когда следует выполнять префетч для кода?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 26 2009, 15:15
Сообщение #51


Гуру
******

Группа: Свой
Сообщений: 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) *
где и когда следует выполнять префетч для кода?

Как правило, эта процедура выполняется при необходимости "залочить" код в кэше. Просто так большого смысла не имеет.
Go to the top of the page
 
+Quote Post
axa09
сообщение Feb 26 2009, 23:09
Сообщение #52


Участник
*

Группа: Новичок
Сообщений: 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

Помогите плиз!
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 26 2009, 23:19
Сообщение #53


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
axa09
сообщение Feb 27 2009, 00:07
Сообщение #54


Участник
*

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



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

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

так?

какую бы вы литературу посоветуете по кэшам?
Go to the top of the page
 
+Quote Post
axa09
сообщение Feb 27 2009, 04:58
Сообщение #55


Участник
*

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



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

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

паралельно нашёл про software dma- команды
ldmia
stmia
за один присест сразу 8 слов копирует!
есть ли смысл применить их в функции отрисовки, чтоб быстрее было?

хочу с АРма9 выжать всё smile.gif
Go to the top of the page
 
+Quote Post

4 страниц V  « < 2 3 4
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 12:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01446 секунд с 7
ELECTRONIX ©2004-2016