Рисунок 8.5 - Соединение микроконтроллеров по интерфейсу SPI
Передача данных осуществляется следующим образом. При записи в регистр данных SPI ведущего микроконтроллера запускается генератор тактового сигнала модуля SPI, и данные начинают поразрядно выдаваться на вывод MOSI и, соответственно, поступать па вывод MOSI ведомого микроконтроллера. После выдачи последнего разряда текущего байта генератор тактового сигнала останавливается с одновременной установкой в «1» флага «Конец передачи» (SPIF). Если прерывания от модуля SPI разрешены (флаг SPIE регистра SPCR установлен в «1»), генерируется запрос на прерывание. При подключении к ведущему устройству нескольких ведомых, что разрешено спецификацией SPI, выбор конкретного ведомого устройства осуществляется подачей на его вход SS сигнала НИЗКОГО уровня.
Образно говоря, два сдвиговых регистра ведомого и ведущего устройств можно считать одним распределенным 16-разрядным циклическим сдвиговым регистром, как показано на рис.8.5. Одновременно с передачей данных от ведущего к ведомому происходит передача и в обратном направлении. Таким образом, в каждом цикле сдвига происходит обмен данными между устройствами.
|
|
В модуле используется одинарная буферизация при передаче и двойная - при приеме. Это означает, что готовый для передачи байт данных не может быть записан в регистр данных SPI до окончания предыдущего цикла обмена. При попытке изменить содержимое регистра данных во время передачи устанавливается в «1» флаг WCOL регистра SPSR. Сбрасывается этот флаг после чтения регистра SPSR с последующим обращением к регистру данных SPI.
Соответственно во время приема принятый байт должен быть прочитан из регистра данных SPI до того, как в сдвиговый регистр поступит последний разряд следующего байта. В противном случае первый байт будет потерян.
Спецификация интерфейса SPI предусматривает 4 режима передачи данных. Эти режимы различаются соответствием между фазой (момент считывания сигнала) тактового сигнала SCK, его полярностью и передаваемыми данными. Всего существует 4 такие комбинации, определяемые состоянием разрядов СРНА и CPOL регистра SPCR.
Соответствующие этим режимам форматы обмена данными через SPI приведены на рис.8.6 и 8.7 (передача ведется от старшего разряда к младшему).
Рисунок 8.6 - Передача данных при CPHA = 0 и DORD = 0
Рисунок 8.7 - Передача данных при CPHA = 1 и DORD = 0