Группа: Свой
Сообщений: 86
Регистрация: 19-03-10
Пользователь №: 56 071
Использую интерфейс внешней памяти для формирования сигналов выбора периферийных устройств подключенных к шине SPI. Сигналы формирует ПЛИС, а через FSMC засылается адрес устройства. Дешифратор адреса - комбинаторная схема, задержек практически не вносит. Псевдокод обращения к устройству по шине SPI:
*(uint16_t *)(SPI_CS_CONTROL) = 0x20; // запись адреса устройства в ПЛИС через FSMC GPIOI->BSRRH |= GPIO_Pin_0 ; // устанавливаю чипселект в 0 mySPI_Write(data); // выдаю байт в шину SPI ....
Проверяю осциллографом сигналы на входах периферийного устройства. Иногда происходят сбои - синхроимпульсы появляются раньше чем установится низкий уровень чипселект. Значит шина SPI начала выдачу данных, а FSMC еще не выдала адрес в дешифратор. Подскажите как убедиться что FSMC отработала команду?
Если уж начинать плясать с бубном, то можно просто вставить задержку. Но про volatile верно подмечено, оно там должно быть для порядка. Но скорее всего дело не в этом.