Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
Вопрос по TMS320C6416. Неприятные странности при использовании функций из DAT-модуля библиотеки CSL при организации обмена между DSP и внешним устройством через EMIF
Отправлено
chizh 18 апреля 2007 г. 13:34
Протокол обмена ориентирован на пакетные прием/передачу. EMIF работает в режиме Synchronous FIFO interface. В это самое внешнее устройство все должно писаться четко и строго по требованию разуемеется.
Собственно неприятны странности такого рода:
1) сразу же после открытия модуля DAT_open, если использовать функции DAT_copy(из_внешн, во_внутр, кол_во) или DAT_fill(внешн) - результат их использования нулевой - в случае DAT_copy транзакции по EMIF вообще не бегут, а в случае DAT_fill - вместо пакета из, допустим, 16последовательных транзакций в бурсте на EMIF прорывается только первая.
2) если есть поледовательные вызовы, к примеру
DAT_copy(Buf_A, Buf_B, N);
DAT_copy(Buf_B, Buf_A, N);
DAT_copy(Buf_A, Buf_B, N); // Buf_A - internal
DAT_copy(Buf_B, Buf_A, N); // Buf_B - external (via EMIF)срабатывают только вторые - то есть запись из внутренней памяти во внешнюю происходит, наоборот - нет. Если вызовы с обращениями на чтение из внешней памяти продублировать - начинают срабатывать. Каждый второй.
Интуиция мне подсказывает :) что все дело в кэше. По аналогии с примерами, поставляемыми с CCS и иллюстрирующими работу DAT-модуля, пробовал использовать функции CACHE_wbInvL2 - эффект нулевой. Объясните пожалуйста в чем тут дело. Какой тут может быть workaround ?
П.С. Используется плата DSK6416, транзакции по EMIF фиксируются логическим анализатором
Заранее большое спасибо всем откликнувшимся.
Составить ответ | Вернуться на конференцию
Ответы