Этот вывод предназначен для выбора активного ведомого устройства и в режиме Slave всегда является входом. При подаче на него «0» модуль SPI активируется и вывод MOSI переключается в режим вывода данных (если это задано пользователем). Выводы модуля SPI являются в этом режиме входами. При подаче на вывод SS «1» все выводы модуля SPI переключаются в режим ввода данных. При этом модуль переходит в неактивное состояние и прием данных не производится.
Следует помнить, что каждый раз, когда на вывод SS будет подана «1», происходит сброс модуля SPI. Соответственно, если изменение состояния для вывода произойдет во время передачи данных, и прием и передача немедленно прекратятся, а передаваемый и принимаемый байты будут потеряны.
Если же микроконтроллер находится в режиме Master (разряд MSTR регистра SPCR установлен в «1»), направление передачи данных через вывод SS определяйся пользователем. Если вывод сконфигурирован как выход, он работает как линия вывода общего назначения и не влияет на работу модуля SPI. Если же он сконфигурирован как вход, то для обеспечения нормальной работы модуля SPI на него должна быть подана «1». Дело в том, что подача на этот вход «0» от какой-либо внешней схемы будет воспринята модулем SPI как выбор данного микроконтроллера в качестве ведомого и, соответственно, начало передачи ему данных. Во избежание конфликта на шине система SPI в таких случаях выполняет следующие действия:
|
|
1. Флаг MSTR регистра SPCR сбрасывается, и микроконтроллер переключается в режим Slave. Как следствие, выводы MOSI и SCK на
чинают функционировать как входы.
2. Устанавливается флаг SPIF регистра SPSR, генерируя запрос на прерывание от SPI. Если прерывания oт SPI разрешены и флат I регистpa SREG установлен в «1», происходит запуск подпрограммы обpaботки прерывания.
Таким образом, если ведущий микроконтроллер использует передачу данных, управляемую прерыванием, и существует вероятность подачи на вход SS «0», в подпрограмме обработки прерывания от SPI обязательно должна осуществляеться проверка состояния флага MSTR. При обнаружении сброса он должен быть программно установлен обратно в «1» для обратного перевода микроконтроллера в режим Master.