Несколько упрощенная структурная схема модуля MSSP, сконфигурированного для работы по протоколу SPI, приведена на Рис. 12.8. Основным узлом модуля MSSP является регистр специального назначения SSPBUF, расположенный по адресу h’13’. Байт данных, загруженный в этот РСН, автоматически перегружается в сдвиговый регистр модуля SSPSR и побитно выдается на вывод RC5/SDO микроконтроллера. Одновременно с этим восемь битов данных считываются с вывода RC4/SDI. После завершения указанных операций принятый байт автоматически пересылается в регистр SSPBUF, откуда его можно считать. Это индицируется установкой флага BF (Buffer Full) в регистре состояния SSPSTAT, формат которого приведен на Рис. 12.9. После чтения регистра SSPBUF флаг BF автоматически сбрасывается.
Рис. 12.8.
В отличие от параллельных портов ввода/вывода, конфигурирование и контроль состояния интерфейсных модулей микроконтроллеров, как правило, осуществляются с помощью ряда соответствующих регистров управления и состояния. Помимо этого используются биты масок и флагов прерываний, расположенные либо в регистре INTCON, либо в одном или двух регистрах разрешения прерываний от периферийных устройств и регистрах флагов прерываний от периферийных устройств, аналогичных показанным на Рис. 7.6 (стр. 224). Конфигурирование регистров управления, состояния и прерываний периферийных устройств обычно выполняется в той же части программы, в которой производится конфигурирование параллельных портов ввода/вывода. Так как интерфейсные модули в обязательном порядке задействуют выводы параллельных портов, то эти выводы часто необходимо конфигурировать даже в том случае, если порты ввода/вывода в программе не используются. Конфигурация линий ввода/вывода переопределяется автоматически при включении периферийного модуля или же должна явно задаваться самим программистом. К сожалению, ответ на этот вопрос далеко не всегда очевиден, поэтому для получения точной информации необходимо обращаться к документации на конкретный микроконтроллер.
Но вернемся к нашему модулю MSSP. На Рис. 12.9 показаны установки регистров SSPCON и SSPSTAT, используемые при работе в режиме SPI. Ну, а для подключения к внешним устройствам в этом режиме в общей сложности задействуется четыре вывода.
∙ RC5/SDO
Бит TRISC[5] должен быть сброшен для переключения этого вывода в режим выхода.
∙ RC4/SDI
Этот бит конфигурируется модулем MSSP как вход независимо от состояния соответствующего бита TRISC[4],
∙ RC3/SCK
При работе в качестве ведущего бит TRSC[3] должен быть сброшен, поскольку на этом выводе формируется тактовый сигнал. И, наоборот, при работе в режиме ведомого бит TRISC[3] должен быть установлен, чтобы принимать тактовый сигнал от ведущего.
∙
В режиме ведомого Ь’0100’ этот вывод должен быть сконфигурирован как вход (TRISA[5] = 1), чтобы другой ведущий мог выбрать данное устройство.
При любом сбросе оба регистра SSPCON и SSPSTAT очищаются, а внутренний счетчик битов обнуляется. При этом модуль отключен, и если программист собирается использовать MSSP, то он должен задать соответствующие значения различных управляющих битов[154].
∙ SSPEN
Установка бита SSPCON[5] в 1 разрешает работу модуля последовательного синхронного порта. Если модуль выключен, то соответствующие выводы могут использоваться в качестве линий-обычных параллельных портов ввода/вывода.
∙ SSPM[3:0]
Четыре бита выбора режима работы модуля, расположенные в SSPCON[3:0], используются для выбора протокола обмена, а также различных опций работы ведущего/ведомого. На Рис. 12.9 указано шесть комбинаций этих битов, относящихся к протоколу SPI.
Рис. 12.9.
Режимы ведущего (а их четыре) отличаются друг от друга только значением частоты тактового сигнала и ее источниками. В трех из этих режимов тактовый сигнал формируется из тактового сигнала микроконтроллера. Например, при использовании резонатора с частотой 20 МГц частота сигналов на выводе SCK может быть равна 5 МГц, 1.25 МГц и 312.5 кГц (период 200 не, 800 не и 3.2 мкc соответственно). В последнем же из режимов частота тактового сигнала шины SPI равна половине частоты сигнала, формируемого при переполнении Таймера 2 (см. Рис. 13.8 на стр. 474). Этот режим используется, когда требуется очень низкая скорость передачи данных.
При работе модуля в качестве ведомого тактовый сигнал поступает на вывод SCK извне от внешнего ведущего устройства. Кроме того, ведущий может управлять выводом SS для выбора одного из нескольких ведомых (см. Рис. 12.12).
∙ SSPOV