Буферизованный синхронный последовательный порт QSPI
Функционирование данного порта, в принципе, аналогично функционированию SPI
в микроконтроллерах семейств 68HC05, 08, 11 . При выполнении последовательного обмена порт QSPI одного
из микроконтроллеров работает в качестве ведущего, а порт QSPI другого микроконтроллера - в качестве ведомого. Сдвиговые
регистры портов соединяются в кольцевую цепь путем соответствующего подключения выводов MISO,MOSI ведущего и ведомого
портов, и производится одновременный сдвиг их содержимого, при котором содержимое регистра одного порта последовательно
вводится в регистр другого (рис. 3.15). При этом ведущий порт обеспечивает выдачу синхроимпульсов на вывод SCK, которые
поступают в ведомый порт; на вывод SS# ведомого порта подается "0". Отличие QSPI, используемого в модуле QSM, от обычных
портов SPI состоит в том, что вместо одного регистра данных он имеет буферную память, в которую может быть записано до 32
байт данных для последующей выдачи, или принято до 32 байт данных в процессе приема. В этой памяти содержатся также до 16
команд (рис.3.16), задающих режим каждого цикла передачи данных.
Рис. 3.15. Реализация последовательного обмена данными с помощью QSPI
Буферное ОЗУ реализовано в виде трех отдельных блоков, содержащих 16-разрядные
данные приемника RD0-6 и данные передатчика TD0-16, 8-разрядные команды CD0-16 (рис. 3.16). Блоки ОЗУ организованы в виде
кольцевого стека-очереди. В процессе последовательного ввода-вывода данных текущее состояние очереди определяется 4-разрядным
указателем QP, который задает младшие разряды адреса ячеек, выбираемых в ОЗУ приемника, передатчика и команд. В соответствии
с текущей позицией указателя QP при выполнении очередного цикла обмена ведущий QSPI производит прием данных в ОЗУ приемника
и передачу данных, записанных в ОЗУ передатчика, а выбираемая при этом команда определяет число передаваемых битов и условия
формирования внешних сигналов выборки PCS0-3. После выполнения очередного цикла значение указателя QP увеличивается на 1,
адресуя следующее слово данных в ОЗУ приемника и передатчика, и выбирая соответствующую команду. После передачи последнего
слова из очереди производится циклический возврат к ее началу.
QP-> |
$D00,01 |
RD0 |
$D20,21 |
TD0 |
$D40,41 |
CD0 |
$D02,03 |
RD1 |
$D22,23 |
TD1 |
$D42,43 |
CD1 |
$D04,05 |
RD2 |
$D24,25 |
TD2 |
$D44,45 |
CD2 |
|
$D06,07 |
RD3 |
$D26,27 |
TD3 |
$D46,47 |
CD3 |
Данные приемника 16 слов (32 байта) |
Данные передатчика 16 слов (32 байта) |
Команды обмена 16 байт |
$D1C,D |
RDE |
$D2C,D |
TDE |
$D4C,D |
CDE |
$D1E,F |
RDF |
$D2E,F |
TDF |
$D4E,F |
CDF |
Рис. 3.15. Организация обращения к буферному ОЗУ
Управление работой QSPI осуществляется путем загрузки соответствующего
содержимого в регистры SPCR0,1,2,3 (рис.3.16,а-г). Отдельные биты содержимого этих регистров имеют следующее назначение:
MSTR - определяет режим работы порта: ведущий при MSTR=1, ведомый при MSTR=0;
WOMQ - переводит при WOMQ=1 все выходные каскады порта в режим работы с "открытым стоком",
который допускает соединение выходов для реализации логической операции "монтажное ИЛИ";
CPOL,CPHA - определяют формат передачи данных: полярность и фазу синхросигналов, при которых
происходит обмен данными ;
SPE - разрешает при SPE=1 обмен данными с помощью QSPI;
SPIFIE - разрешает при SPIFIE=1 формирование запроса прерывания после завершения приема или
передачи заданного блока данных.
Остальные биты в регистрах управления QSPI обеспечивают реализацию дополнительных функций и
режимов, расширяющих возможности использования порта.
15 |
14 |
|
9 |
8 |
|
MSTR |
WOMQ |
BITS |
CPOL |
CPHA |
SPBR |
а) SPCR0 (адрес $*FFC18)
б) SPCR1 (адрес $*FFC1A
15 |
14 |
13 |
12 |
|
|
|
SPIFIE |
WPEN |
WRTO |
0 |
ENDQP |
0 0 0 0 |
NEWQP |
в) SPCR2 (адрес $*FFC1C)
|
10 |
9 |
8 |
7 |
6 |
5 |
4 |
|
0 0 0 0 0 |
LOOPQ |
HMIE |
HALT |
SPIF |
MODE |
HALTA |
0 |
CPTQP |
г) SPCR3 (адрес $*FFC1E) д) SPSR (адрес $*FFC1F)
Рис. 3.16. Формат содержимого регистров QSPI
Регистр SPCR0 (рис. 3.16,а) содержит 4-разрядное поле BITS, содержимое
которого определяет количество битов (табл. 3.25), пересылаемых за один цикл обмена, если в команде (рис. 3.17) задано
значение бита BITSE=1. При значении бита BITSE=0 в данном цикле передается один байт. Таким образом QSPI в каждом цикле
может принимать или передавать от 8 до 16 бит. Содержимое поля SPBR в этом регистре задает значение коэффициента Ks,
который определяет частоту синхросигналов Fs, выдаваемых ведущим QSPI на выход SCK: Fs = Ft / 2Ks. Величина Ks может
находиться в пределах от 2 до 255. Если содержимое поля SPRB равно 0 или 1, то формирование синхросигналов прекращается,
и передача данных останавливается. Поля BITS, SPRB задают соответствующие параметры только для ведущего порта (значение
бита MSTR=1).
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
CONT |
BITSE |
DT |
DSCK |
PCS3 |
PCS2 |
PCS1 |
PCS0 |
Рис. 3.17. Формат команды QSPI
Регистр SPCR1 (рис. 3.16,б) содержит поля DSCKL, DTL, которые вместе с битами
PCSi, DT команды (рис.3.17) определяют времена формирования сигналов при синхронном обмене. Если какие-либо биты PCSi=1,
то поле DSCLK задает длительность задержки Td между подачей сигнала выборки на вывод PCSi и началом передачи (поступлением
соответствующего фронта синхросигнала на вывод SCK). Величина Td = Kd / Ft, где значение коэффициента Kd = 1...127 указывается
в поле DSCKL. Если содержимое поля DSCLK имеет нулевое значение, то величина Kd=128. Если в команде значение бита DT=1, то
после каждого цикла передачи вводится пауза, длительность которой Tp = 32Kp / Ft, где величина коэффициента Kp = 1...255
указывается в поле DTL. Если содержимое поля DTL имеет нулевое значение, то величина Kp=256. При значении бита DT=0 пауза
после цикла имеет величину Tp = 17 / Ft. Введение задержек Td,Tp позволяет обмениваться с внешними устройствами, имеющими
различные времена выборки, а также обеспечивает паузы, необходимые для считывания принятых данных из буферного ОЗУ или
записи в него новых данных для передачи.
Регистр SPCR2 (рис. 3.16,в) содержит 4-битовые поля NEWCOP, ENDCOP, в которых указываются
начальное QPn и конечное QPe значения указателя очереди. Величина QPn указывает в буферном ОЗУ данные и команду, с которых
начинается передача, величина QPe - данные и команду, на которых передача завершается. Возможные значения QPn, QPe составляют
от 0 до 15, поэтому при загрузке регистра SPCR2 можно реализовать последовательную передачу блока данных объемом до 16 байт
без участия процессора. При передаче текущее значение указателя очереди QP будет изменяться от QP=QPn до QP=QPe. Если
заданное значение QPn больше QPe, то после текущего значения указателя QP=$F устанавливается QP=$0, то-есть осуществляется
переход из конечной в первую позицию. Бит WREN в регистре SPCR2 разрешает при значении WREN=1 циклическое повторение передачи
заданного блока данных. Если при этом установлено значение бита WRTO=0, то после передачи данных, расположенных в конце
очереди (QP=QPe), осуществляется возврат к нулевой позиции (QP=$0), после чего выполняется новая передача блока до конца
очереди. Если значение WRTO=1, то возврат производится к началу очереди, заданному полем ENDQP, то-есть новая передача
начинается с позиции QP=QPn.
Регистр SCPR3 (рис. 3.16,г) содержит три управляющих бита. При значении бита LOOPQ=1 вход и выход
сдвигового регистра QSPI соединяются в кольцевую цепь. Такое соединение используется при текущем контроле функционирования
QSPI, который можно выполнить путем последовательной записи-считывания данных и проверки их совпадения. Установка значения
бита HALT=1 вызывает прекращение последовательной передачи после окончания текущего цикла (останов QSPI). Бит HMIE разрешает
при значении HMIE=1 формирование запросов прерывания в случае останова QSPI или неправильного режима его функционирования.
Обе эти причины вызывают установку соответствующих признаков в регистре SPCR.
Регистр состояния SPCR (рис.3.16,д) содержит признаки, вызывающие формирование запросов прерывания:
SPIF - признак завершения передачи, принимает значение SPIF=1, когда выполняется последняя передача
данных из очереди (QP=QPe);
MODF - признак неправильного режима, принимает значение MODF=1, если на ведомый QSPI поступает
сигнал SS#=1, или на ведущий QSPI подается сигнал SS#=0;
HALTA - признак останова QSPI принимает значение HALTA=1, когда QSPI прекращает передачу после
установки бита HALT=1 в регистре SPCR3.
Поле CPTQP в регистре SPSR содержит текущее значение указателя очереди QP, которое может быть
считано процессором при останове QSPI, чтобы определить, какая часть блока данных осталась непереданной.
Таким образом, QSPI может формировать запрос прерывания в любом из указанных трех случаев:
завершение передачи, неправильный режим или останов QSPI, если такой запрос разрешен установкой значений битов SPIFIE=1
в регистре SPCR2, HMIE=1 в регистре SPCR3. Так как для QSPI определен один вектор прерывания (см. раздел Блок интерфейса и управления), то
подпрограмма обслуживания должна произвести считывание и анализ содержимого регистра состояния SPSR, чтобы определить
причину прерывания.
Отметим, что содержимое регистров SPCR3 и SPSR может быть адресовано как одно 16-разрядное слово
или как два отдельных байта (табл. 3.24).
Таблица 3.25. Количество битов, передаваемых QSPI за один цикл обмена
BITS |
Число битов |
0 0 0 0 |
1 0 0 0 |
1 0 0 1 |
1 0 1 0 |
1 0 1 1 |
1 1 0 0 |
1 1 0 1 |
1 1 1 0 |
1 1 1 1 |
|
|
0 0 0 1-0 1 1 1 |
резервированы |
В каждом цикле обмена выбирается соответствующая команда, формат которой
показан на рис.3.17. Младшие четыре бита команды PCS3-0 вызывают при значении PCSi=1 выдачу сигнала выборки на
соответствующий внешний вывод PCSi порта QS. Начальные значения сигналов на этих выводах определяются содержимым
регистра PORTQS этого порта (см. раздел Порт QS). Старшие четыре бита команды определяют число передаваемых в цикле
битов и управляют установкой сигналов PCSi, указанных в младших битах. Старшие биты имеют следующее назначение:
DSCK,DT - определяют, как указано выше, длительности задержки передачи Td после установки сигнала
PCSi и паузы Tp после окончания цикла;
BITSE - указывает число передаваемых в цикле битов: при BITSE=0 передается 8 битов, при BITSE=1
число битов определяется табл. 3.25;
CONT - сохраняет при значении CONT=1 установленные данной командой значения PCSi после завершения
цикла (до выборки следующей команды), при CONT=0 после завершения цикла сигналы PCSi принимают значения, устанавливаемые
содержимым регистра PORTQS.
Использование выводов порта QS для приема и выдачи сигналов QSPI описано в разделе Порт QS
QSPI работает следующим образом. Предварительно выполняется запись необходимого содержимого в
ячейки буферного ОЗУ и регистры управления SPCR0,2,3. Затем производится запуск QSPI путем загрузки в регистр SPCR1
содержимого, старший бит которого имеет значение SPE=1. После этого QSPI автоматически производит прием и передачу из
буферного ОЗУ блока данных, положение которого определяется значениями указателей QPn,QPe, заданными полями NEWPQ,
ENDPQ в регистре SPCR2. Если в регистре SPCR2 установлено значение бита WREN=1, то производится циклический возврат
к началу блока, и передача повторяется. В этом случае прекращение передачи производится путем записи в регистр SPCR2
содержимого, в котором значение бита WREN=0, или записи в регистр SPCR3 содержимого, в котором значение бита HALT=1.
Каждый цикл передачи может сопровождаться выдачей внешних сигналов выборки PCSi, формирование которых производится в
соответствии с выбранной командой и содержимым полей DTL, DSCKL в регистре SPCR1. Текущее состояние QSPI можно определить,
считав содержимое регистра SPCR. В соответствии с этим состоянием QSPI выдает процессору запросы прерывания, если они
разрешены битами SPIFIE, HMIE в регистрах SPCR2, SPCR3.