Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория микропроцессорных систем АТ_Методическое...docx
Скачиваний:
6
Добавлен:
01.03.2025
Размер:
3.72 Mб
Скачать

2.1.8. Последовательные порты sci и spi

Для организации последовательного обмена в состав микроконтроллеров се­мейства 68НС12/912 включен модуль последовательного интерфейса, который со­держит 1 или 2 порта асинхронного обмена SCI и порт синхронного обмена SPI. В состав этого модуля входит 8-разрядный порт S, отдельные линии которого обес­печивают последовательный обмен через порты SCI, SPI, и линии, не используемые этими портами, могут служить для параллельного ввода-вывода данных (см. 2.1.7).

Асинхронный последовательный порт SCI функционирует в основном ана­логично порту SCI в 8-разрядных микроконтроллерах (см. 1.1.9, 1.2.10), однако имеет некоторые особенности в реализации режимов работы. Соответственно есть определенные отличия и в содержимом регистров порта.

Микроконтроллеры 68НС812А4, 68HC912D60, 68HC912DG128 содержат два порта SCI-0, SCI-1, в микроконтроллерах 68НС912В32, 68НС912ВС32 - один порт SCI-0. Каждый порт имеет два регистра данных SCxDRH, SCxDRL, где символ х=0 или 1 указывает номер порта (если микроконтроллер содержит только один порт SCI, то он имеет номер 0). В регистре SCxDRL (рис. 2.19, а) хранятся 8 информаци­онных бит, поступивших с приемник с вывода RxD (биты R7-0) или выдаваемых передатчиком на вывод TxD (биты Т7-0). Регистр SCxDRH (рис. 2.19, 6) содержит бит R8, который принимает значение 9-го (контрольного) бита, поступающего на вход RxD приемника при 11-битовом кадре принимаемых данных, и бит Т8, ко­торый выдается на выход TxD передатчика в качестве 9-го (контрольного) бита при 11-битовом кадре пересылаемых данных.

Рис. 2.19. Формат содержимого регистров данных порта SCI

Порт SCI имеет два регистра управления SCxCR0, SCxCR1 (символ х=0 или 1 в зависимости от номера порта). В регистре SCxCRl (рис. 2.20, а) содержатся биты, имеющие следующее назначение:

LOOPS - при установке значения LOOPS=1 переводит порт SCI в режим коль­цевого обмена или однопроводного обмена; при этом режим работы порта опреде­ляется значениями бита RSRC и бита направления передачи DDRSi, установленного в регистре DDRS для вывода PSi порта S, где i соответствует номеру вывода, к ко­торому подключен выход передатчика TxD (табл. 2.21);

WOMS - при установке значения WOMS=1 обеспечивает работу выходных каскадов на выводах RxD, TxD в режиме с «открытым стоком» (для реализации операции «Монтажное ИЛИ»);

RSRC - при значении LOOPS=1 бит RSRC определяет подключение входа при­емника: если RSRC=0, то вход приемника соединяется с выходом передатчика (кольцевой обмен), если RSRC=1, то вход приемника подключается к выводу TxD, реализуя однопроводной режим обмена (табл. 2.21);

М - задает формат пересылаемого кадра данных: 10-битовый при М=0 (отсут­ствие контрольного бита), 11-битовый при М=1 (наличие контрольного бита);

WAKE - определяет способ выхода приемника из режима ожидания: прием символа IDLE (10 или 11 единичных бит) при WAKE=0, единичное значение по­следнего принятого бита данных R7 (при М=0) или R8 (при М=1) при WAKE=1;

ILT - указывает начало отсчета единичных битов, представляющих символ ожидания IDLE: начиная с очередного старт-бита при ILT=0 или с очередного стоп-бита при ILT=1;

РЕ - разрешает при установке значения РЕ=1 контроль четности при передаче и приеме данных;

РТ - определяет вид контроля: если РТ=0, то контрольный бит равен 1 при чет­ном числе информационных битов (контроль четности), если РТ=1, то контрольный бит равен 1 при нечетном числе информационных битов (контроль нечетности).

Рис. 2.20. Формат содержимого регистров управления портом SCI

Значения битов LOOPS, WOMS, RSRC и DDRSi (i=l для порта SCI0 - его вы­ход TxD подключен к выводу PS1, i=3 для порта SCI1 - его выход TxD подключен к выводу PS3) определяют режим работы порта (табл. 2.21). При нормальном режиме вывод TxD служит для передачи данных, вывод RxD - для приема. В кольцевом режиме, который обычно используется для контроля правильности работы порта SCI, приемник всегда получает данные, посылаемые передатчиком. При этом они могут выводиться (при DDRSi=l) или не выводиться (при DDRSi=0) на выход TxD (вывод PS1 или PS3). В однопроводном режиме линия, подключенная к TxD, слу­жит как для передачи, так и для приема данных.

Регистр управления SCxCR2 (рис. 2.20, б) содержит следующие биты:

TDE - разрешает при значении ТIЕ=1 формирование запроса прерывания при установке признака освобождения регистров SCxDRH, SCxDRL от данных, на­правленных в передатчик (в регистре SCxSR1 признак TDRE=1);

TCIE - разрешает при значении ТСIЕ=1 формирование запроса прерывания при установке признака завершения передачи (в регистре SCxSR1 признак ТС=1);

RIE - разрешает при значении RIE=1 формирование запроса прерывания при заполнении регистра данных приемника (в регистре SCxSR1 признак RDRF=1);

Таблица 2.21. Режимы работы порта SCI

ILIE - разрешает при значении ILIE=1 формирование запроса прерывания при поступлении на вход RxD символа ожидания IDLE (в регистре SCxSR1 признак IDLE=1);

ТЕ - включает (при ТЕ=1) и отключает (при ТЕ=0) передатчик;

RE - включает (при RE=1) и отключает (при RE=0) приемник;

RWU - переводит при RWU=1 приемник в режим ожидания, а при RWU-0 раз­решает активизацию приемника (в соответствии со значением бита WAKE в реги­стре SCxCR1);

SBK - вызывает при установке SBK=1 выдачу на выход TxD передатчика сим­вола прекращения обмена BREAK (последовательность 0).

Регистры состояния SCxSR1, SCxSR2 содержат признаки, которые устанавли­ваются в процессе приема и передачи данных. При запуске микроконтроллера все признаки принимают значение 0. В регистре SCxSR1 (рис. 2.21, а) содержатся сле­дующие признаки:

TDRE - признак готовности передатчика к приему новых данных, принима­ет значение TDRE=1 после того, как содержимое регистров данных SCxDRH, SCxDRL переписывается в сдвиговый регистр передатчика для выдачи на выход TxD;

ТС - признак окончания передачи, принимает значение ТС=1 после выдачи по­следнего бита данных из сдвигового регистра передатчика на выход TxD;

RDRF - признак заполнения приемника, принимает значение RDRF=1 после то­го, как данные, поступившие со входа RxD в сдвиговый регистр приемника, пере­писываются в регистры SCxDRH, SCxDRL;

IDLE - признак поступления символа ожидания IDLE, принимает значение IDLE=1, если состояние 1 на входе RxD поддерживается более 10 (при М=0) или 11 (при М=1) тактов синхронизации обмена Ts;

OR - признак переполнения приемника, принимает значение OR=1 в случае, когда очередной символ поступает в сдвиговый регистр приемника до считывания из регистров SCxDRH, SCxDRL предыдущего символа (при этом содержимое ре­гистров сохраняется, а очередной поступивший символ теряется);

NF - признак наличия шумов на линии приема, устанавливается в состояние NF=1, если в процессе приема какого-либо бита зафиксированы изменения уровня сигнала на входе RxD;

FЕ - признак нарушения кадра, принимает значение FE=1, если в принятом кадре длительность стоп-бита оказывается меньше, чем длительность такта синхро­низации Ts;

PF - признак ошибки четности, принимает значение PF=1, если четность при­нятых информационных битов R7-0 не соответствует поступившему значению кон­трольного бита R8.

Рис. 2.21. Формат содержимого регистров состояния порта SCI

Признаки TDRE, ТС, RDRF, IDLE вызывают формирование запроса прерыва­ния, если это разрешено соответствующими битами в регистре SCxCR2. Соответст­вующий вектор прерывания располагается по адресу $FFD6-D7 для порта SCI-0 и $FFD4-D5 для порта SCI-1 Запросы, вызванные признаками TDRE, TC, RDRF обычно вызывают процедуры записи в регистры SCxDRH, SCxDRL новых данных для передачи или считывания из них принятых данных. Если соответствующие за­просы запрещены установкой нулевого значения битов TIE, TCIE, RIE в регистре SCxCR2, то прием и передача данных через порт SCI выполняются программно с помощью периодического считывания и анализа содержимого SCxSR1 (про­граммный опрос). Значения признаков ошибок OR, NF, FE, PF определяются путем программного опроса.

Содержимое регистра SCxSRl доступно только для считывания. Установка в 0 значений признаков RDRF, IDLE, OR, NF, FE, PF производится при чтении содер­жимого регистра SCxSRl и последующем чтении содержимого регистра данных SCxDRL. Признаки TDRE, ТС принимают значение 0 после чтения содержимого SCxSRl и записи данных в регистр SCxDRL.

Регистр состояния SCxSR2 (рис. 2.21, б) содержит только признак активизации приемника RAF, который принимает значение RAF=1 после приема старт-бита. Со­держимое данного регистра доступно только для чтения. Установка значения RAF=0 происходит при поступлении символа ожидания IDLE или при запуске мик­роконтроллера.

Длительность такта обмена Ts = 1/Fs определяется частотой Fs импульсов, формируемых генератором синхросигналов (ГСС). Значение этой частоты опреде­ляется выражением Fs = Ft/16Ks, где значение коэффициента деления Ks задается битами SBR12-0 в регистрах SCxBDH, SCxBDL (рис. 2.22). Биты BTST, BSPL, BRLD используются при тестировании микроконтроллера. При запуске микрокон­троллера устанавливается значение бита SBR2=1, остальные биты в SCxBDH, SCxBDL принимают значение 0, т. е. обеспечивается скорость обмена Fs=Ft/64. Пу­тем выбора различных значений коэффициента Ks реализуются скорости последо­вательного обмена данными в диапазоне от десятков бит в секунду до сотен кило­бит в секунду. Установка значения Ks=0 вызывает выключение ГСС.

Рис. 2.22. Формат содержимого регистров управления скоростью обмена порта SCI

Синхронный последовательный порт SPI в микроконтроллерах семейства 68НС12/912 функционирует в основном аналогично порту SPI в семействе 68НС05/705 (см. 1.1.10). Обмен данными производится между портами SPI (см. рис. 1.18), один из которых является ведущим (master), а другие - ведомыми (slave). В процессе об­мена используются выводы PS7-4 порта S, на которые поступают сигналы порта SPI:

SCK (вывод PS6) - выход синхросигнала для ведущего и вход синхросигнала для ведомого порта;

MOSI (вывод PS5) - выход данных для ведущего и вход данных для ведомого порта;

MISО (вывод PS4) - вход данных для ведущего и выход данных для ведомого порта;

SS# (вывод PS7) - вход сигнала выбора ведомого порта SS# =0, для ведущего порта функции этого вывода указаны в табл. 2.22.

Для выводов порта S, используемых для выхода сигналов порта SPI, необходи­мо установить соответствующие значения битов DDSi в регистре направления DDRS порта S (см. 2.1.7): DDS5=1 и DDS6=1 для ведущего порта, DDS4=1 для ве­домого порта. Функции вывода PS7 для ведущего порта определяются значениями бита SSOE в регистре SP0CR1 и бита DDS7 в регистре DDRS (см. табл. 2.21). Когда этот вывод работает в качестве выхода (DDRS7=1), то при значении бита SSOE=1 он используется для выдачи сигнала SS# =0 для подключенных ведомых портов SPI. При SSOE=0 и DDRS7=1 вывод PS7 служит в качестве выхода для старшего бита данных b7, выдаваемых портом S. При DDRS7=SSOE=0 на вывод PS7 требует­ся подавать сигнал SS# =1, если порт SPI работает в режиме ведущего (при подаче SS# =0 в регистре SP0SR устанавливается признак ошибки режима MODF=1).

Таблица 2.22. Функции вывода SS# (PS7) ведущего порта SPI

Вводимые и выводимые данные поступают в регистр SP0DR (адрес $00D5). Управление работой порта SPI осуществляется с помощью регистров управления SP0CR1, SP0CR2, формат содержимого которых показан на рис. 2.23.

Отдельные биты в регистре SP0CR1 (рис. 2.23, а) имеют следующее назначение:

SPIE - разрешает при значении SPIE=1 формирование запроса прерывания по­сле окончания приема данных (когда в регистре SP0SR устанавливается признак SPIF=1) или при нарушении режима работы порта (когда в регистре SP0SR уста­навливается признак MODF=1);

SPE - разрешает при SPE= 1 или запрещает при SPE-0 работу порта SPI;

SWOM - задает режим работы выходных буферных каскадов на выводах PS7-4: обычный 2-фазный выход при SWOM=0, выход с «открытым стоком» при SWOM=1;

MSTR - устанавливает режим работы порта: в качестве ведущего при MSTR=1, в качестве ведомого при MSTR=0;

CPOL, СРНА - определяют полярность и фазу синхросигналов обмена (см. 1.1.10);

SSOE - определяет функции вывода SS# (PS7) ведущего порта (см. табл. 2.21);

LSBF - задает порядок передачи битов: при LSBF=0 - начиная со старшего би­та, при LSBF=1 - начиная с младшего бита.

Рис. 2.23. Формат содержимого регистров управления портом SPI

В регистре управления SP0CR1 содержатся следующие биты:

SSWAI - при установке значения SSWAI=1 останавливает работу порта SPI в режиме ожидания;

SPC0 - определяет включение выводов порта SPI: нормальное включение при SPC0=0, двунаправленное включение (кольцевой режим) при SPC0=l.

При нормальном включении выводы портов соединяются, как показано на рис. 1.18. При двунаправленном включении реализуется кольцевой режим обмена.

Если для ведущего порта SPI установлено значение бита SPC0=1, то выводимые им данные поступают как на вывод PS5 к ведомым портам, так и на вход данных ведущего порта. При этом вывод PS4 (вход данных ведущего), отключается от пор­та SPI, т. е. данные от ведомого порта не принимаются. Таким образом обеспечива­ется перезапись выводимых данных в регистр SP0DR ведущего порта.

Если значение бита SPC0=1 установлено для ведомого порта, то данные, выво­димые им на вывод PS4, поступают также на его вход данных. При этом вывод PS4 (вход данных ведомого) отключается от этого порта, т. е. данные от ведущего порта не принимаются. В результате выводимые данные последовательно вводятся в ре­гистр SP0DR ведомого порта.

В микроконтроллерах 68НС812А4 бит SSWAI в регистре SP0CR отсутствует. Микроконтроллеры 68HC912DG128 и 68НС812А4 содержат в этом регистре бит PUPS, который при PUPS=1 вызывает подключение ко всем выводам порта S рези­сторов, «подтягивающих» их потенциал к напряжению питания, и бит RDS, кото­рый при RDS=1 обеспечивает для выходов этого порта пониженные значения вы­ходных токов (см. 2.1.7).

Регистр состояния SP0SR (рис. 2.24, а) содержит следующие признаки, которые автоматически устанавливаются при работе порта:

SPIF - признак завершения приема данных, принимает значение SPIF=1 после пересылки последнего (8-го) бита данных;

WCOL - признак ошибки записи, принимает значение WCOL=1, если процес­сор пытается выполнить операцию записи в регистр SP0DR в ходе обмена данными через порт SPI (запись при этом не производится);

MODF - признак ошибки режима, принимает значение MODF=1, если на веду­щий порт (бит MSTR=1) подан сигнал SS# =0 на вывод PS7, работающий в режиме ввода (биты DDS7=0, SSOE=0, см. табл. 2.22).

Рис. 2.24. Формат содержимого регистра состояния SP0SR (а) и регистра управления скоростью обмена SP0BR (б) порта SPI

Содержимое регистра SPOSR доступно только для чтения. Установка признаков SPIF, WCOL в 0 производится автоматически после чтения содержимого регистра SPOSR и последующего чтения или записи содержимого регистра данных SP0DR. Признак MODF устанавливается в 0 после чтения содержимого SP0SR и после­дующей записи в регистр управления SP0CR1 (изменения режима работы порта).

Если в регистре SP0CR1 значение бита SPIE=1, то установка битов SPIF=1 или MODF=1 вызовет прерывание с обращением к вектору, расположенному по адресу $FFD8-D9 (см. 2.1.3). Подпрограмма обработки должна определить значение бита WCOL и произвести повторное обращение к порту SPI, если была неудачная по­пытка записи в его регистр данных (значение WCOL=1).

Время пересылки 1 бита (период синхроимпульсов SCK) равно Tp=1/Fp, где частота синхронизации Fp=Ft/Kp. Коэффициент деления Кр определяется значени­ем битов SPR2-0 в регистре SP0BR (рис. 2.24, б) в соответствии с табл. 2.23.

Таблица 2.23. Значения коэффициента деления частоты Кр для порта SPI