11.1.1. Логика установки флагов
(Руководство разработчика по микроконтроллерам семейства HCS08)Ранее было отмечено, что сеанс связи двух устройств по SPI обязательно сопровождается двунаправленным обменом. По каждому сгенерированному ведущим устройством импульсу синхронизации один бит данных посылается ведомому устройству (по линии MOSI) и один бит других данных принимается от ведомого устройства (по линии MISO).
Программно доступный регистр данных SPID реально выполнен на основе двух регистров: буфера передатчика и буфера приемника. Когда выполняется операция записи в регистр данных SPID, данные записываются в буфер передатчика. Когда выполняется операция чтения регистра данных SPID, данные читаются из буфера приемника.
Данные, записанные в регистр SPID, т.е. в буфер передатчика, автоматически передаются во внутренний программно недоступный регистр сдвига, но при условии, что в этот момент регистр сдвига завершил передачу предыдущего байта. Одновременно устанавливается флаг SPTEF в регистре состояния SPIS. Данный флаг показывает, что буфер передатчика пуст, и в него можно загрузить следующий байт для передачи. Если в момент записи SPID сдвиговый регистр еще находится в процессе отсылки предыдущего байта, то флаг SPTEF не установится. Через некоторое время отсылка предыдущего байта завершится, новое значение для передачи из буфера передатчика будет автоматически передано в сдвиговый регистр, и бит SPTEF снова установится.
Сразу после загрузки нового значения регистр сдвига начинает последовательно выставлять биты данных на линию MOSI. Когда передача одного байта завершена, устанавливается флаг завершения приема SPRF в регистре SPIS, и принятые данные автоматически переносятся в регистр данных SPID. Такая логика работы действительна для ведущего устройства. Если же устройство является ведомым, то после того как сдвиговый регистр под управлением тактовых импульсов ведущего примет один байт данных, также установится флаг завершения приема SPRF.
Эти два флага SPTEF и SPRF могут быть использованы для управления и для наблюдения за передачей данных по интерфейсу SPI.
Установка флага завершения приема SPRF вызывает прерывание, если бит SPIE в регистре SPIC1 установлен. Флаг SPRF сбрасывается автоматически, если сначала прочитать регистр состояния SPIS с установленным битом SPRF, а затем — регистр данных SPID.
Флаг SPTEF устанавливается, если данные загружены в буфер передатчика. Этот флаг также может генерировать запросы на прерывания, если установлен бит SPTIE в регистре SPIC1. Флаг SPTEF сбрасывается автоматически, если сначала прочитать регистр состояния SPIS с установленным битом SPTEF, а затем выполнить операцию записи в регистр данных SPID.
Перед записью данных в регистр SPID необходимо считать содержимое регистра SPIS с установленным битом SPTEF. Если этого не сделать, то записываемые данные будут проигнорированы и посланы не будут!
Электронные компоненты Freescale >>>
Подробнее о компании Freescale >>>