Имеется устройство с LPC2468 на борту. К CS2 LPC246816-и разрядной шиной подсоединена ПЛИС, доступ к ресурсам которой должен производиться с максимальной скоростью с использованием EMC микроконтроллера.
Настройки таковы:
Код
PCONP |= PCEMC;
EMC_CTRL = EMC_CTRL_E;
EMC_CONFIG = 0;
/* FPGA Region (CS2) */
EMC_STA_CFG2 = EMC_SMC_CFG_MW16 | EMC_SMC_CFG_PB;
EMC_STA_WAITWEN2 = 0;
EMC_STA_WAITOEN2 = 0;
EMC_STA_WAITRD2 = 4;
EMC_STA_WAITWR2 = 2;
EMC_STA_WAITTURN2 = 0;
Имеется тест, в котором производится запись и чтение 16-и разрядных слов (разрядность совпадает с физической разрядностью шины и настройками EMC). С записью проблем нет, все работает вполне предсказуемо. А вот с чтением наблюдается странная картина: вместо чтения по одному адресу, происходит чтение по двум последовательным адресам, т.е. если читать по адресу 0, то на шине будет наблюдаться транзакция чтения с непрерывными CS/OE и двумя адресами (0 и 1). С точки зрения работы ПЛИС проблемы нет, логика работы не нарушается. Однако скорость обмена при чтении падает в два раза, т.к. каждый раз читается "лишнее" слово. Бит включения буферов не установлен.
В Users Manual есть интересное примечание на эту тему:
Цитата
[2] EMC may perform burst read access even when the buffer enable bit is cleared.
Т.е. получается, что нас честно предупредили. Но вот как с этим бороться пока не ясно. Единственным путем сейчас видится настройка EMC на 32-х разрядную шину при фактическом использовании только 16-и разрядов. Но это как-то совсем некрасиво получается. Может есть другие пути?