Здравствуйте!
Возникло сомнение, что правильно передаю данные через EDMA из внешней памяти (SDRAM) во внутреннюю (L2).
А именно, на стартер ките на базе С6416 передача 16-ти КБайт занимает примерно 54000 тиков таймера, что соотвествует примерно 0.6 мсек реального времени (720 МГц) или скорости 25 МБайт/с. По-хорошему, скорость обмена между внешней и внутренней памятью должна быть раз в 20 больше! Передачу делаю Блок-синхронизированную из 2D в 1D: транслируется квадрат байтов размера 128 на 128. Замер времени производился на участке проверки соответствующего бита CIPR-регистра. Именно этот цикл проверки и занимает 54000 тиков. Прерывание я не отправляю, поскольку далее программа работает с переданными данными и необходимо знать, что передача окончена. вот пример участка кода, на котором производится замер: EDMA_setChannel(hEdma_fragm); while (1) { if (EDMA_intTest(FRAGM_EDMA_TCC)) { EDMA_intClear(FRAGM_EDMA_TCC); break; }
Подскажите, пожалуйста, где искать ошибку. 1) Неправильно настроил канал передачи 2) Нельзя напрямую многократно опрашивать регистр CIPR 3) Существуют какие-то настройки памяти, которые надо изменить (например, через DSP/BIOS) 4) Неправильно произведен замер времени ...
Сообщение отредактировал lamateur - Dec 5 2008, 06:21
|