Имеем плату от Digi i.MX51. К ней у нас вешается Альтера как 16 бит асинхронная статическая память с временем доступа записи 30 нс. и чтения 40 нс. Из управления нужны только CS, RD, WR и 8 проводов адреса. Всё это удалось настроить и для первых раз терпимо работает. Но есть проблема. Между циклами доступа (неважно, RD или WR) процессор вставляет паузы по 170нс. Т.е., CS в нуле 30 нс, в единице 170 нс, в нуле 30 нс ... и т.д. Соответственно, время периода выполнения учебного цикла:
for (i=0;i<XXXX,i++) { data16= INREG16(pPORT); }
200 нс а не 30нс.
где pPORT - отмапленное на нужный адрес значение ... (и всё такое правильное, CS то дёргается и данные правильные...). Так же не важно, цикл RD или WR, 8 бит или 16 - разумеется надо инициализировать по разному для конкретного набора. Все равно, пауза 170 нс. между двумя последовательными циклами обращения железно держится.
Однако, изучение даташитов НЕ показывает, что пауза между (да ещё такая) циклами должна быть. Замучались искать засаду. Даташиты огромные. Есть ли у кого какие идеи в какую область посмотреть?
|