Коллеги!
Столкнулся с такой проблемой. Определяю для внешних устройств CS2 и CS3. Обращаюсь к этим устройствам по соответствующим адресам. При этом осциллографом вижу, что эпизодически во время этих CS'ов проскакивает CS1 (видимо при регенерации SDRAM). Стробирование буферов шины данных (для устранения конфликтов) внешних устройств сделано как -(CS0 & CS1). Соответственно эти короткие импульсы на CS1 сбивают всю работу внешних устройств.
Я никак не могу понять, как вообще возможно существование в один и тотже момент времени двух CS'ов. Может не правильно программирую SDRAM контроллер?
Второе. В файле at91rm9200.h приведена структура:
// *****************************************************************************
// SOFTWARE API DEFINITION FOR Memory Controller Interface
// *****************************************************************************
typedef volatile struct _AT91S_MC {
AT91_REG MC_RCR; // MC Remap Control Register
AT91_REG MC_ASR; // MC Abort Status Register
AT91_REG MC_AASR; // MC Abort Address Status Register
AT91_REG Reserved0[1]; //
AT91_REG MC_PUIA[16]; // MC Protection Unit Area
AT91_REG MC_PUP; // MC Protection Unit Peripherals
AT91_REG MC_PUER; // MC Protection Unit Enable Register
} AT91S_MC, *AT91PS_MC;
В документации на процессор ни слова про регистры :
AT91_REG MC_PUIA[16]; // MC Protection Unit Area
AT91_REG MC_PUP; // MC Protection Unit Peripherals
AT91_REG MC_PUER; // MC Protection Unit Enable Register
Что за мистика? Не в курсе ли кто?