Использование вывода SS
Этот вывод предназначен для выбора активного ведомого устройства и в режиме 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.
Микроконтроллер АТ90С8535 имеет в своем составе модуль полнодуплексного универсального асинхронного приемо-передатчика (UART). Через него осуществляется прием и передача информации, представленной последовательным кодом, поэтому модуль UART часто называют также последовательным портом. С помощью этого модуля микроконтроллер может обмениваться данными с различными внешними устройствами.
|
|
Скорость передачи данных может варьироваться в широких пределах, причем высокие скорости передачи могут быть достигнуты даже при относительно низкой тактовой частоте микроконтроллера.
Модуль UART может обнаруживать и сигнализировать о следующих внештатных ситуациях:
- переполнение;
- ошибка кадрирования;
- неверный старт-бит.
Для уменьшения вероятности сбоев в модуле реализована такая полезная функция, как фильтрация помех.
Для взаимодействия с программой в модуле предусмотрены 3 раздельныx прерывания, запрос на которые генерируется при наступлении следующих событий: «передача завершена», «регистр данных передатчика пуст» и «прием завершен».
Выводы микроконтроллера, используемые модулем UART, являются линиями порта D. В качестве входа приемника (RXD) используется вывод PDO, а в качестве выхода передатчика (TXD) — вывод PD1.