Последовательный протокол, как две капли воды похожий на только что рассмотренный нами, известен как последовательный периферийный интерфейс (SPI™)[152]. Существует еще один похожий последовательный протокол — Microwire, но он несколько отличается от рассмотренного[153].
Интерфейс SPI имеется в большинстве микроконтроллеров, и он в достаточной степени стандартизован, чтобы производители могли выпускать широкий ассортимент микросхем, предназначенных для непосредственного (без использования дополнительных сдвиговых регистров) подключения к этой шине.
Возьмем в качестве примера микросхему сдвоенного цифро-аналогового преобразователя (ЦАП) МАХ549А, показанную на Рис. 12.5, которая работает при напряжении питания от +2.5 до +5.5 В. Типичный ток потребления в рабочем режиме составляет около 150 мкА/канал при напряжении питания 5 В. Кроме того, один или оба модуля ЦАП можно отключить для уменьшения тока потребления до уровня менее 1 мкА. Максимальная частота шины SPI составляет 12.5 МГц. И все эти возможности заключены в крошечном 8-выводном корпусе — сравните с 20-выводной микросхемой МАХ506, изображенной на Рис. 14.16 (стр. 526), которая рассчитана на подключение к параллельному порту микроконтроллера.
Из упрощенной функциональной схемы МАХ549А, приведенной на Рис. 12.5, видно, что в микросхеме имеется встроенный 16-битный сдвиговый регистр, тактовый вход которого соединен с выводом SCLK микросхемы, а вход данных — с выводом DIN. Поэтому данные в этот регистр могут загружаться в соответствии с обычным протоколом SPI. Дополнительные восемь разрядов регистра используются для хранения четырех управляющих битов, выполняющих следующие функции:
∙ А0
Разрешает работу входного PIPO-регистра канала А, тактирование которого осуществляется по нарастающему фронту сигнала на выводе
∙ А1
Разрешает работу входного PIPO-регистра канала В, тактирование которого осуществляется по нарастающему фронту сигнала на выводе
∙ С1
Управляет работой обоих регистров ЦАП; при установленном бите содержимое этих регистров одновременно обновляется по нарастающему фронту
Рис. 12.5.
∙ С2
Установка этого бита переводит ЦАП, определяемый битами А0 и/или А1, в «спящий режим». При этом источник опорного напряжения
Между каждым из модулей ЦАП и сдвиговым регистром имеется 2-уровневый регистровый
Для примера, перешлем содержимое регистра h’20’ в ЦАП А, а содержимое регистра h’21’ — в ЦАП В. Затем перегрузим переданные значения в регистры ЦАП, в результате чего на выводах
В общей сложности для выполнения указанной задачи нам придется переслать четыре байта:
1. Управляющий байт 1: Ь’ХХХ00Х01’
Рабочий режим, обновить канал А, не формировать аналоговый сигнал.
2. Байт данных 1:
Содержимое регистра h’20’.
3. Подаем импульс
4. Управляющий байт 2: Ь’ХХХ01X10’
Рабочий режим, обновить канал В, формировать аналоговый сигнал на обоих каналах.
5. Байт данных 2:
Содержимое регистра h’21’.
6. Подаем импульс
Код, осуществляющий указанные операции, приведен в Программе 12.5. Для передачи каждого из четырех байтов используется подпрограмма SPI_WRITE, после передачи каждой пары байтов