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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Грамотная работа с EDMA, SDRAM --EDMA--> L2
lamateur
сообщение Dec 11 2008, 09:00
Сообщение #16


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 26-06-08
Пользователь №: 38 561



Теперь, когда переделал, еще раз спасибо!
Наверное, не уместно говорить, что самому приходило в голову увеличить размер элемента, но не верилось, что EDMA сам не догадывается использовать шину целиком! )

Сейчас скорость передачи примерно 1200 МБайт/сек. Из этого делаю вывод, что входная частота EMIF не меньше CPU/4=180MHz, и используется вся шина на 64 бит: теоретически это как раз 1440 МБайт/сек.
В выравнивании указателей, по-моему, необходимости нет. Как сказано в spraa02, при выставке размера элемента в 32Bit, используется максимальный размер шины. Можно еще, конечно, тут ковыряться, но меня пока все устраивает.

Всем большое спасибо за участие в решение проблемы!
Go to the top of the page
 
+Quote Post
lamateur
сообщение Mar 3 2009, 08:19
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 26-06-08
Пользователь №: 38 561



Столкнулся с проблемой, что при передаче по EDMA копируются не все фреймы...

Делал небольшой эксперимент на симуляторе процессора TMS320C6415.

Требуется скопировать данные с прореживанием из одной области внешней памяти (из адреса 0x80......) в другую (в адрес 0x80000000).

Такая задача возникает когда грузишь байтовые данные из файла, и каждый байт занимает целое слово, т.е. полезная информация идет через каждые 4 байта. (Наприм.: 255 0 0 0 119 0 0 0 67 0 0 0 и т.д., а нужно: 255 119 67).

"Полезных" байтов у меня 1024x1024, т.е. 1Мбайт. Организовываю EDMA-передачу: Frame Synchronized 1D-to-1D Transfer (SUM = 11, DUM = 01), размер элемента - 8бит.
Если я правильно понимаю, теперь мне требуется 1024 синхро-сигналов, чтоб передать весь массив.
Но у меня передается только 9 фреймов, т.е. 9 строк!

Вот фрагмент кода:
hEdma_input = EDMA_open(EDMA_CHA_ANY,EDMA_OPEN_RESET);

cfgEdmaInput.src=...;
cfgEdmaInput.dst=...;
cfgEdmaInput.idx=(Uint32)(1024<<18) | 4;
cfgEdmaInput.cnt=(Uint32)((1024-1)<<16) | (1024);

EDMA_config(hEdma_input,&cfgEdmaInput);
for (sync=0; sync<4; sync++){
EDMA_setChannel(hEdma_input);
TSK_sleep(10000);}
while (1)
{
if (EDMA_intTest(INPUT_EDMA_TCC)) {
EDMA_intClear(INPUT_EDMA_TCC);
break;
}
}
Go to the top of the page
 
+Quote Post

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

 


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


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