lamateur 0 11 декабря, 2008 Опубликовано 11 декабря, 2008 · Жалоба Теперь, когда переделал, еще раз спасибо! Наверное, не уместно говорить, что самому приходило в голову увеличить размер элемента, но не верилось, что EDMA сам не догадывается использовать шину целиком! ) Сейчас скорость передачи примерно 1200 МБайт/сек. Из этого делаю вывод, что входная частота EMIF не меньше CPU/4=180MHz, и используется вся шина на 64 бит: теоретически это как раз 1440 МБайт/сек. В выравнивании указателей, по-моему, необходимости нет. Как сказано в spraa02, при выставке размера элемента в 32Bit, используется максимальный размер шины. Можно еще, конечно, тут ковыряться, но меня пока все устраивает. Всем большое спасибо за участие в решение проблемы! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lamateur 0 3 марта, 2009 Опубликовано 3 марта, 2009 · Жалоба Столкнулся с проблемой, что при передаче по 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; } } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться