МИКРОСХЕМА ИНТЕГРАЛЬНАЯ К1921ВК01Т. Руководство пользователя (от 10.09.2019) - часть 8

 

  Главная      Книги - Разные     МИКРОСХЕМА ИНТЕГРАЛЬНАЯ К1921ВК01Т. Руководство пользователя (от 10.09.2019)

 

поиск по сайту            правообладателям  

 

   

 

   

 

содержание      ..     6      7      8      9     ..

 

 

 

МИКРОСХЕМА ИНТЕГРАЛЬНАЯ К1921ВК01Т. Руководство пользователя (от 10.09.2019) - часть 8

 

 

 

 

113 

14.10

 

 Блок ШИМ высокого разрешения 

Микроконтроллер содержит шесть блоков ШИМ высокого разрешения PWM0 – PWM5. 
Принцип работы аналогичен описанному выше блоку ШИМ. 
Функция  высокого  разрешения  блока  ШИМ  является  дополнительной  и  имеет 

особенности: 

-  улучшенный  контроль  скважности  выходного  сигнала  ШИМ  канала  А  (сигнал 

PWMA); 

-  улучшенная  точность  переключения  фронтов,  с  использованием  увеличенной 

разрядности регистров CMPA и TBPHS (подключаются поля CMPAHR и TBPHSHR); 

- логика калибровки для программной коррекции линии задержки. 
 
Дополнительный регистр управления расширенными возможностями – HRCNFG. 
Функциональная схема блока ШИМ с функцией   высокого  разрешения  показана  на 

рисунке 14.19. 

 

 

 

 

Рисунок 14.19 – Схема блока ШИМ высокого разрешения 

 
Улучшение разрешающей способности 

В  блоке  ШИМ  высокого  разрешения  используется  специальная  линия  задержки  с 

шириной  отсчета  150  пс,  что  увеличивает  разрешающую  способность.  Формула 

 

 

114 

вычисления  разрешающей  способности  по  ширине  единичного  отсчета  и  периоду 
следования импульсов ШИМ представлена на рисунке 14.20. 

 

 

 

Рисунок 14.20 – Вычисление разрешающей способности блока ШИМ 

 
Конфигурация 

Кроме  обычных  функций  блок  ШИМ  высокого  разрешения  реализует 

дополнительные два режима работы.  

Режим  фронтов  –  для  высокоточного  контроля  выставления  переднего  и  заднего 

фронтов сигнала на выходе PWMА подключается линия задержки. Управление фронтами 
по отдельности используется в схемах, где требуется прецизионная точность скважности 
формируемых  импульсов.  Управление  обоими  фронтами  одновременно  используется  в 
схемах,  где  требуется  высокая  точность  в  выставлении  фазы  формируемого  сигнала  (к 
примеру, в мостах). 

Режим управления – линия задержки управляется либо полем CMPAHR (управление 

скважностью), либо полем TBPHSHR (управление фазой). Отдельно передний или задний 
фронты выставляются полем CMPA, а вместе – полем TBPHSHR. 

 
П р и м е ч а н и е   –  Поле  CMPAHR  может  использовать  отложенную  загрузку 

(теневой регистр), полностью аналогично тому, как это реализовано для регистра CMPA. 

 
Функционирование 

На рисунке 14.21 приведен пример работы блока ШИМ высокого разрешения. 
 

 

 

Рисунок 14.21 – Пример работы блока ШИМ высокого разрешения 

 
За  основу  принято,  что  длительность  отсчета  (задержка  одного  элемента)  равна 

180 пс,  а  рабочая  частота  100  МГц  (период  10  нс).  Формирование  скважности  40,5  %  от 
периода  Tpwm = 800 нс  складывается  из  32  отсчетов  (регистр  CMPA)  счетчика, 
работающего  на  системной  частоте,  формируя  задержку  320  нс,  и  линии  задержки, 
запрограммированной  на  22  отсчета  (регистр  CMPAHR),  формируя  дополнительную 
задержку  3,96  нс.  Общая  задержка  получается  323,96  нс,  что  составляет  почти  нулевую 
погрешность от значения 324 нс (40,5 %). 

 

Ограничения диапазона скважности 

1 Линия задержки не может работать в течение всего периода формируемого сигнала 

ШИМ, поэтому вводится ограничение на минимальную длительность импульса: 

 

 

115 

- три периода системного такта, если схема калибровки неактивна; 
- шесть периодов системного такта, если схема калибровки активна. 
 
В  случае  если  в  соответствии  с  требуемой  скважностью  длительность  импульса 

выходного сигнала ШИМ оказалась короче минимальной, то фронты будут выставлены с 
точностью, как и в обычном блоке ШИМ. 

При  работе  на  низких  частотах  ограничение  по  управлению  скважностью  сигнала 

ШИМ практически незаметно. 

2  Сумарная  задержка,  генерируемая  блоком  ШИМ  высокого  разрешения,  не  может 

превышать двух периодов системной частоты (сигнал SysCLK) плюс 1 нс. 

 
Калибровка 

Линия  задержки  состоит  из  255  одинаковых,  последовательно  включенных 

элементов.  Длительность  отсчета  (задержки  одного  элемента)  составляет  150  пс  и 
определяется  технологическими  нормами,  в  соответствии  с  которыми  выполнен 
микроконтроллер.  Длительность  отсчета  также  может  незначительно  меняться,  в 
зависимости от текущего значения питания микроконтроллера и текущей температуры.  

 

14.11

 

Сопряжение с блоком АЦП 

Выходы  девяти  блоков  ШИМ  (PWM_SOCA  и  PWM_SOCB  каждого  блока) 

объединяются  по  ИЛИ,  как  показано  на  рисунке  14.22.  Сигналы  с  выходов  элементов 
ИЛИ  защелкиваются  в  шести  триггерах  и  формируют  импульсы  запуска  секвенсоров 
блока АЦП. 

 

 

 
Рисунок 14.22 – Схема формирования сигналов запуска секвенсоров блока АЦП 

 

 

116 

15

 

Приемопередатчики UART 

В состав микроконтроллера входят четыре идентичных универсальных асинхронных 

приемопередатчика UART0, UART1, UART2, UART3. 

В состав приемопередатчика входят два буфера типа FIFO. Буфер приемника имеет 

разрядность  12, буфер  передатчика – разрядность восемь. Каждый  буфер может хранить 
до  32  байт  данных,  и  каждый  буфер  может  быть  сконфигурирован  (программно)  как            
32-байтный или как однобайтный. 

Приемопередатчик обеспечивает:  
- независимое маскирование прерываний от буфера передатчика, буфера приемника, 

по  таймауту  приемника,  по  изменению  линий  состояния  модема,  а  также  в  случае 
обнаружения ошибки; 

-  возможность  деления  тактовой  частоты  в  диапазоне  от  1  до  65 535  (допускается 

использование  нецелых  коэффициентов  деления,  что  позволяет  использовать  любой 
опорный генератор с частотой более 3,6864 МГц); 

- возможность организации аппаратного управления потоком данных; 
- поддержку прямого доступа к памяти; 
- поддержку функции управления модемом (линии CTS, DCD, DSR, RTS, DTR и RI). 
 
Приемопередатчик реализует: 
- передачу данных длиной от 5 до 8 бит со скоростью до 921 600 бит/с;   
- контроль четности (проверочный бит выставляется по четности, нечетности, имеет 

фиксированное значение либо не передается); 

- формирование одного или двух стоповых бит; 
- обнаружение ложных стартовых битов; 
- формирование и обнаружение сигнала разрыва линии. 

 
Функциональные возможности 

Режим  работы  приемопередатчика  и  скорость  обмена  данными  контролируются 

регистром LCR_H и регистрами делителя IBRD и FBRD. 

Устройство может формировать следующие сигналы: 
-  независимые  маскируемые  прерывания  от  приемника  (в  том  числе  по  таймауту), 

передатчика, а также по изменению состояния модема и в случае обнаружения ошибки; 

-  общее  прерывание,  возникающее  в  случае,  если  возникло  одно  из  независимых 

немаскированных прерываний; 

-  сигналы  запроса  на  прямой  доступ  к  памяти  для  совместной  работы  с 

контроллером DMA. 

В  случае  возникновения  ошибки  в  структуре  сигнала,  четности  данных,  а  также 

разрыва  линии  соответствующий  бит  ошибки  устанавливается  и  сохраняется  в  буфере 
приемника.  В  случае  переполнения  буфера  приемника  также  устанавливается 
соответствующий бит, а буфер становится недоступным для записи. 

Приемопередатчик поддерживает режим модема. 
 

15.1

 

Функционирование блока UART 

На рисунке 15.1 показана упрощенная функциональная схема приемопередатчика. 
Генератор  тактового  сигнала  приемопередатчика  формирует  синхросигнал 

последовательного  обмена  данными,  который  представляет  собой  последовательность 
импульсов с шириной, равной одному периоду сигнала UART_CLK, и частотой в 16 раз 
превышающей частоту передачи данных. 

Буфер передатчика предназначен для хранения данных  (полученных от  ЦП) до тех 

пор, пока они не будут переданы внешнему устройству. 

 

 

117 

 

 

Рисунок 15.1 – Функциональная схема приемопередатчика 

 

Буфер приемника предназначен для хранения данных и кодов ошибки (принятых от 

внешнего устройства) до тех пор, пока они не будут прочитаны ЦП. 

Обработчик  прерываний  генерирует  независимые  маскируемые  прерывания  с 

активным  высоким  уровнем.  Кроме  того,  формируется  комбинированное  прерывание 
путем  объединения  независимых  прерываний  по  схеме  ИЛИ.  Сигнал  прерывания 
передается на контроллер NVIC. 

 
Сброс модуля 

Модуль UART может быть сброшен только сигналом сброса микроконтроллера.  
Приемопередающая  логика  модуля  может  быть  также  сброшена  соответствующим 

битом  поля  UARTRST  регистра  PER_RST0,  при  этом  управляющие  регистры  и  FIFO  не 
сбрасываются. 

 

 

Синхронизация 

Существует  ограничение  на  соотношение  между  тактовыми  частотами  SysCLK  и 

UART_CLK: 

 

UART_CLK ≤ 5/3 × SysCLK 

 
Например,  для  достижения  максимальной  скоростьи  передачи  данных  921 600  бод 

(при  Fuart_clk  =  921 600  ×  16  =  14,7456  МГц)  частота  SysCLK  должна  быть  не  менее 
8,84736 МГц.  

Для  точной  настройки  частоты  передачи  данных  используются  два  делителя 

(см. рисунок  15.1).  Коэффициент  деления  первого  задается  полем  DIV_UART  регистра 
UART_CLK.  Коэффициент  деления  второго  делителя  имеет  целую  и  дробную  части, 
которые  задаются  регистрами  IBRD  и  FBRD.  Возможность  задания  нецелых 
коэффициентов  деления  позволяет  осуществлять  обмен  данными  на  стандартных 
скоростях,  используя  в  качестве  источника  тактовый  сигнал  с  произвольной  частотой 
более 3,6864 МГц. 

Коэффициент деления К частоты сигнала UART_CLK рассчитывается по формуле 
 

K = Fuart_clk/(16×baud_rate), 

(15.1) 

 

 

где Fuart_clk – частота сигнала синхронизации блока UART, Гц; 

baud_rate – скорость передачи, бод. 

 

 

118 

Получившееся дробное десятичное число следует разделить на две части – целую и 

дробную.  

Целая часть после преобразования в двоичный формат записывается в регистр IBRD. 
Дробная  часть  умножается  на  64  и  округляется  до  ближайшего  целого  числа. 

Полученное  число  преобразовывается  в  двоичный  формат  и  записывается  в  регистр 
FBRD.  

Для  примера,  пусть  требуемая  скорость  передачи  данных  230 400  бит/с  и  частота 

тактового сигнала UART_CLK равна 4 МГц. Тогда: 

 

К = (4 ×10

6

) / (16 × 230 400) = 1,085. 

 
Получившееся число разбивается на две части – 1 и 0,085.  
В регистр IBRD записывается значение 0001h.  
Значение (0,085 × 64) округляется и преобразовывается в 05h  для  записи в регистр 

FBRD.  

Таким  образом,  реальные  значения  коэффициента  деления  частоты  и  скорости 

передачи будут следующими: 

 
К = 1 + 5/64 = 1,078, 
 
baud_rate = (4 × 10

6

)/ (16 × 1,078) = 231 911 бит/с. 

 
Ошибка установки скорости: 
 
Δ = ((231 911 – 230 400) / 230 400) × 100 % = 0,656 %. 
 
Максимальная ошибка установки скорости передачи данных: 
 
Δ = (1/64) × 100 % = 1,56 0 %.  
 
Такая ошибка возникает в случае K = 1, при этом разница накапливается в течение 

64 тактовых интервалов. 

Содержимое  регистров  LCR_H,  IBRD  и  FBRD  обновляется  при  записи  в  регистр 

LCR_H.  Таким  образом,  для  того,  чтобы  новые  параметры  коэффициента  деления 
вступили  в  силу,  после  их  записи  в  регистры  IBRD  и  FBRD,  необходимо  осуществить 
запись в регистр LCR_H и только в такой последовательности. 

 
П р и м е ч а н и е   –  Изменение  содержимого  регистров  IBRD,  FBRD  и  LCR_H 

допускается  только  во  время,  когда  приемопередатчик  запрещен  и  не  осуществляется 
передача/прием байта. 

 

Передача и прием данных 

Данные для передачи заносятся в буфер передатчика посредством записи в регистр 

DR. После записи хотя бы одного байта в буфер передатчика устанавливается флаг BUSY 
в  регистре  FR.  Это  состояние  флага  сохраняется,  пока  буфер  передатчика  не пуст  (даже 
если  работа  приемопередатчика  запрещена).  Далее  если  работа  приемопередатчика 
разрешена  (установлены  биты  UARTEN  и  TXE  регистра  CR),  начинается  передача 
информационного  кадра  с  параметрами,  указанными  в  регистре  управления  линией 
LCR_H.  Передача  данных  продолжается  до  опустошения  буфера  передатчика  (до 
окончания передачи всех байт). По окончании передачи сбрасывается флаг BUSY.   

 

 

119 

При  приеме  байта  данных  (установлены  биты  UARTEN  и  RXE  регистра  CR)  для 

каждого бита производятся три выборки уровня, и решение о значении бита принимается 
по мажоритарному принципу. 

В  случае  если  приемник  находился  в  неактивном  состоянии  (постоянный  высокий 

уровень  сигнала  на  линии  UART_RxD),  и  произошла  смена  уровня  входного  сигнала  с 
высокого  на  низкий  (стартовый  бит),  включается  счетчик,  тактируемый  внутренним 
сигналом, после чего отсчеты сигнала на входе приемника регистрируются каждые восемь 
тактов.  

Стартовый  бит  считается достоверным в  случае, если сигнал на  линии UART_RxD 

сохраняет  низкий  логический  уровень  в  течение  восьми  периодов  внутреннего 
синхросигнала  с  момента  включения  счетчика.  В  противном  случае  переход  в  ноль 
рассматривается как ложный старт и игнорируется. 

После  обнаружения  достоверного  стартового  бита  очередной  бит  данных 

фиксируется каждые 16 отсчетов тактового сигнала. Производится регистрация всех бит 
данных  (согласно  запрограммированным  параметрам)  и  бита  четности  (если  включен 
режим контроля четности). 

По  окончании  приема  байта  производится  проверка  присутствия  корректного 

стопового  бита  (высокий  логический  уровень  сигнала  UART_RxD).  После  чего  байт 
заносится в буфер приемника вместе с тремя битами признаков ошибки (см. рисунок 15.2) 
и битом переполнения буфера. 

В  12-разрядной  ячейке  буфера  байт  данных  располагается  в  области  младших 

восьми бит, три бита признаков ошибки  – в битах с 8 по 10.  

Флаг  переполнения  буфера  приемника  выставляется  в  том  случае,  если  к  моменту, 

когда  очередной  кадр  данных  полностью  принят,  буфер  уже  заполнен.  В  этом  случае 
принятый  кадр  остается  в  сдвиговом  принимающем  регистре  и,  в  случае  приема 
следующего кадра данных, будет потерян. 

Как  только  в  буфере  приемника  освобождается  место  для  записи,  кадр  данных, 

находящийся  в  сдвиговом  регистре,  переписывается  в  буфер,  а  флаг  переполнения 
сбрасывается. 

 

 

 

Рисунок 15.2 – 12-разрядная ячейка принимающего буфера  

 
Данные  из  буфера  приемника  можно  прочитать  посредством  регистра  DR. 

Состояние  признаков  ошибки  и  флага  переполнения  определяется  чтением  регистра 
RSR_ECR  и  относится  к  последнему  байту,  считанному  из  регистра  DR,  в  связи  с  этим 
регистр DR всегда должен считываться первым. 

Все  флаги  сбрасываются  одновременно  записью  любого  значения  в  регистр 

RSR_ECR или после сброса устройства. 

 
П р и м е ч а н и я   
1  Необходимо запрещать работу приемопередатчика перед перепрограммированием 

его регистров управления. Если приемопередатчик переводится в отключенное состояние 
во  время  передачи  или  приема,  то  перед  остановкой  он  завершает  выполняемую 
операцию. 

 

 

120 

2  Целостность  данных  в  буферах  передатчика  и  приемника  не  гарантируется,  если 

установился  флаг  BRK  (разрыв  линии),  или  если  программное  обеспечение  произвело 
остановку приемопередатчика после его повторного перевода в разрешенное состояние. 

 
Режим модема 

Приемопередатчик  может  использоваться  как  оконечное  устройство  или  как 

оборудование  передачи  данных.  Сигналы  модема  в  режиме  оконечного  устройства  и  их 
назначение представлено в таблице 15.1. 

 

Т а б л и ц а   1 5 . 1   – Назначение сигналов в режиме модема 

Сигнал 

Назначение в зависимости от режима работы 

Режим 

работы 
вывода 

Оконечное устройство 

Оборудование передачи 

данных 

UART_RTS 

Готов к передаче данных 

Запрос передачи данных 

Выход  

UART_CTS 

Запрос передачи данных 

Готов к передаче данных 

Вход  

UART_DTR 

Приемник данных готов 

Источник данных готов 

Выход  

UART_DSR 

Источник данных готов 

Приемник данных готов 

Вход  

UART_DCD 

Обнаружен информационный 
сигнал 

– 

Вход  

UART_RI 

Индикатор вызова 

– 

Вход  

 

Аппаратное управление потоком данных 

Программно  активируемый  режим  аппаратного  управления  потоком  данных 

позволяет  контролировать  (приостанавливать и  возобновлять)  информационный  обмен  с 
помощью  сигналов  UART_RTS  и  UART_CTS.  Иллюстрация  взаимодействия  двух 
устройств  последовательной  связи  с  аппаратным  управлением  потоком  данных 
представлена рисунке 15.3. 

 

 

 

Рисунок 15.3 – Взаимодействие двух устройств последовательной связи с 

аппаратным управлением потоком данных 

 
Если  разрешено  управление  потоком  данных  по  сигналу  RTS,  линия  UART_RTS 

переводится в активное состоянии только после того, как в буфере приемника появляется 
заданное количество свободных ячеек. 

Если  разрешено  управление  потоком  данных  по  сигналу  CTS,  передача  данных 

осуществляется только после перевода линии UART_CTS в активное состояние. 

Режим  аппаратного  управления  потоком  данных  задается  путем  задания  битов 

RTSEN и CTSEN в регистре управления CR.  

 
П р и м е ч а н и е   –   В случае если выбран режим управления потоком данных по RTS, 

программное  обеспечение  не  может  использовать  бит  RTSEN  для  проверки  состояния 
линии RTS. 

 

 

 

121 

Логика  управления  потоком  данных  по  RTS  использует  данные  о  превышении 

уровня  заполнения  буфера  приемника.  Сигнал  на  линии  UART_RTS  переводится  в 
активное  состояние  только  после  того,  как  в  буфере  приемника  появляется  заданное 
количество  свободных  ячеек.  После  достижения  порогового  уровня  заполнения  буфера 
приемника сигнал UART_RTS снимается (переводится в пассивное состояние), указывая, 
таким  образом,  на  отсутствие  свободного  места  для  сохранения  принятых  данных.  При 
этом  дальнейшая  передача  данных  должна  быть  прекращена  по  завершении  передачи 
текущего кадра. 

Обратно  в  активное  состояние  сигнал  UART_RTS  переводится  после  считывания 

данных  из  буфера  приемника  в  количестве,  достаточном  для  того,  чтобы  заполнение 
буфера оказалось ниже порогового уровня. 

В  случае если  управление потоком данных по RTS запрещено,  но при этом  работа 

приемопередатчика  разрешена,  прием  будет  осуществляться  до  полного  заполнения 
буфера приемника либо до завершения передачи данных. 

В  случае  выбора  одного  из  режимов  с  управлением  потоком  данных  по  CTS 

передатчик осуществляет проверку состояния линии UART_CTS перед началом передачи 
очередного  байта  данных.  Передача  осуществляется  только  в  случае,  если  данная  линия 
активна, и продолжается до тех пор, пока активное состояние линии сохраняется и буфер 
передатчика не пуст. 

При переходе линии UART_CTS в неактивное состояние модуль завершает выдачу 

текущего передаваемого кадра, после чего передача данных прекращается. 

Если  управление  потоком  данных  по  CTS  запрещено,  и  при  этом  работа 

приемопередатчика  UART  разрешена,  данные  будут  выдаваться  до  опустошения  буфера 
передатчика. 

 

15.2

 

Интерфейс прямого доступа к памяти 

Приемопередатчик  оснащен  интерфейсом  подключения  к  контроллеру  прямого 

доступа  к  памяти.  Работа  в  данном  режиме  контролируется  регистром  управления 
DMACR. Интерфейс DMA включает в себя шесть сигналов. 

UARTRXDMASREQ  (для  приема) –  запрос  передачи  отдельного  символа, 

инициируемый  приемопередатчиком.  Размер  символа  в  режиме  приема  данных  –  до 
12 бит.  Сигнал  переводится  в  активное  состояние  в  случае,  если  буфер  приемника 
содержит, по меньшей мере, один символ. 

UARTRXDMABREQ 

(для 

приема) –  запрос  блочного  обмена  данными, 

инициируемый  приемопередатчиком.  Сигнал  переходит  в  активное  состояние  в  случае, 
если  заполнение  буфера  приемника  превысило  заданный  порог.  Порог  программируется 
индивидуально для каждого буфера посредством полей регистра IFLS. 

UARTRXDMACLR  (для  приема) –  сброс  запроса  на  DMA,  инициируемый 

приемопередатчиком.  В  случае  если  был  запрошен  блочный  обмен  данными,  сигнал 
сброса формируется в ходе передачи последнего символа данных в блоке. 

UARTTXDMASREQ  (для  передачи) –  запрос  передачи  отдельного  символа, 

инициируемый  приемопередатчиком.  Размер  символа  в  режиме  передачи  данных  –  до 
восьми бит. Сигнал переводится в активное состояние в случае, если буфер передатчика 
содержит, по меньшей мере, одну свободную ячейку. 

UARTTXDMABREQ  (для  передачи) –  запрос  блочного  обмена  данными, 

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

UARTTXDMACLR  (для  передачи) –  сброс  запроса  на  DMA,  инициируемый 

контроллером  DMA  с  целью  сброса  принятого  запроса.  В  случае  если  был  запрошен 

 

 

122 

блочный  обмен  данными,  сигнал  сброса  формируется  в  ходе  передачи  последнего 
символа данных в блоке. 

Сигналы  блочного  и  одноэлементного  обмена  данными  не  являются  взаимно 

исключающими, они могут быть инициированы одновременно. Например, в случае, если 
заполнение данными буфера приемника превышает пороговое значение, формируется как 
сигнал запроса одноэлементного обмена, так и сигнал запроса блочного обмена данными. 
В  случае  если  количество  данных  в  буфере  приема  меньше  порогового  значения, 
формируется  только  запрос  одноэлементного  обмена.  Это  бывает  полезно  в  ситуациях, 
при которых объем данных меньше размера блока.  

Пусть,  например,  нужно  принять  19  символов,  а  порог  заполнения  буфера 

установлен равным четырем. Тогда контроллер DMA осуществит четыре передачи блоков 
по  четыре  символа,  а  оставшиеся  три  символа  передаст  в  ходе  трех  одноэлементных 
обменов,  поскольку  для  них  блок  UART  не  может  инициировать  процедуру  блочного 
обмена. 

Каждый  инициированный  приемопередатчиком  сигнал  запроса  DMA  остается 

активным до момента его сброса соответствующим сигналом DMACLR. 

После  снятия  сигнала  сброса  модуль  приемопередатчика  вновь  получает 

возможность  сформировать  запрос  на  DMA  в  случае  выполнения  описанных  выше 
условий. Все запросы DMA снимаются после запрета работы приемопередатчика, а также 
в  случае  установки  в  ноль  бита  управления  DMATXDMAE  или  RXDMAE  в  регистре 
управления DMACR. 

В  случае  запрета  буферов  устройство  способно  передавать  и  принимать  только 

одиночные  символы  и,  как  следствие,  контроллер  может  инициировать  DMA  только  в 
одноэлементном  режиме.  При  этом  модуль  в  состоянии  формировать  только  сигналы 
управления DMAUARTRXDMASREQ и UARTTXDMASREQ. 

Когда  буферы  включены,  обмен  данными  может  производиться  в  ходе  как 

одноэлементных,  так  и  блочных  передач  данных,  в  зависимости  от  установленной 
величины порога заполнения буферов и их фактического заполнения. 

В  таблице  15.2  указаны  значения  параметров  срабатывания  запросов  блочного 

обмена UARTRXDMABREQ и UARTTXDMABREQ в зависимости от порога заполнения 
буфера. 

 

Т а б л и ц а   1 5 . 2  – Параметры срабатывания запросов блочного обмена данными в режиме 
DMA 

Пороговый уровень 

Количество незаполненных 

ячеек буфера передатчика 

Количество заполненных ячеек 

буфера приемника 

1/8 

28 

1/4 

24 

1/2  

16 

16 

3/4  

24 

7/8 

28 

 
В регистре управления DMACR предусмотрен бит DMAONERR, который позволяет 

запретить  DMA  от  приемника  в  случае  активного  состояния  линии  прерывания  по 
обнаружению  ошибки  UARTEINTR.  При  этом  соответствующие  линии  запроса  DMA  – 
UARTRXDMASREQ  и  UARTRXDMABREQ  переводятся  в  неактивное  состояние 
(маскируются)  до  сброса  UARTEINTR.  На  линии  запроса  DMA  обслуживающие 
передатчик состояние UARTEINTR не влияет. 

 

 

 

123 

15.3

 

Прерывания 

В  модуле  предусмотрено  11  маскируемых  источников  прерываний.  В  результате 

формируется  один  общий  сигнал,  представляющий  собой  комбинацию  независимых 
сигналов, объединенных по схеме ИЛИ. 

Сигналы запросов на прерывания: 
UART_RX – от приемника; 
UART_TX – от передатчика; 
UART_RT – по таймауту приемника; 
UART_MS – по состоянию модема; 
UART_E – по ошибке; 
UART_INT – логическое ИЛИ сигналов запросов на прерывания.  
Каждый  из  сигналов  может  быть  маскирован  путем  установки  соответствующего 

бита в регистре маски IMSC.  

Источник прерывания также можно определить, считав состояние регистра RIS или 

регистра MIS (маскированные прерывания). 

 
UART_RX 

Прерывание возникает в случае обнаружения одного из событий: 
- буфер приемника в режиме FIFO и его заполнение достигло заданного порогового 

значения;  

-  буфер  приемника  имеет  одну  ячейку  (режим  FIFO  запрещен)  и  принят  один  кадр 

данных. 

 
Линия прерывания переходит в высокое состояние и удерживается в нем до тех пор, 

пока  из  буфера  не  будет  прочитан  как  минимум  один  байт  или  выполнен  программный 
сброс прерывания (регистр ICR). 

 
UART_TX 

Прерывание возникает в случае обнаружения одного из событий: 
-  буфер  передатчика  в  режиме  FIFO  и  его  опустошение  достигло  заданного 

порогового значения;  

- буфер передатчика имеет одну ячейку (режим FIFO запрещен) и пуст. 
 
Линия прерывания переходит в высокое состояние и удерживается в нем до тех пор, 

пока в буфер не будет записан как минимум один байт или выполнен программный сброс 
прерывания. 

Запись  данных  в  буфер  передатчика  допускается  как  перед  разрешением  работы 

приемопередатчика и прерываний, так и после разрешения. 

 
П р и м е ч а н и е   –  Прерывание  передатчика  работает  по  фронту,  а  не  по  уровню 

сигнала.  В  случае  если  работа  приемопередатчика  и  прерывания  от  него  разрешена  до 
осуществления  записи  данных  в  буфер  передатчика,  прерывание  не  формируется. 
Прерывание возникает только при опустошении буфера. 

 
UART_RT 

Прерывание возникает в случае, если буфер приемника не пуст, и на вход приемника 

не  поступало  новых  данных  в  течение  периода  времени,  необходимого  для  передачи 
32 бит.  Прерывание  сбрасывается после считывания данных из буфера приемника до его 
опустошения или программно. 

 
 

 

 

124 

UART_MS 

Прерывание  возникает  в  случае  изменения  любой  из  линий  состояний  модема 

(UART_CTS, 

UART_DCD, 

UART_DSR, 

UART_RI). 

Прерывание  сбрасывается 

программно. 

 
UART_E 

Прерывание  возникает  в  случае  ошибки  при  приеме  данных.  Оно  может  быть 

вызвано: 

- ошибкой в структуре кадра; 
- ошибкой контроля четности; 
- разрывом линии; 
- переполнением буфера приемника. 
 
Причину  возникновения  прерывания  можно  определить,  прочитав  содержимое 

регистра RIS либо регистра MIS. 

Сброс прерывания осуществляется программно. 

 
15.4

 

Программирование  

Для программирования рекомендуется следующая  последовательность действий: 
- запретить работу приемопередатчика; 
- дождаться окончания приема и/или передачи текущего байта данных; 
- сбросить буфер передатчика посредством сброса бита FEN регистра LCR_H; 
- изменить настройки регистра CR; 
- разрешить работу приемопередатчика. 

 

 

125 

16

 

Контроллеры интерфейса SPI 

Контроллер  интерфейса  SPI  реализует  интерфейс  последовательной  синхронной 

связи в режиме ведущего (мастера) и ведомого устройства и обеспечивает обмен данными 
с  подключенным  ведомым  или  ведущим  периферийным  устройством  в  соответствии  с 
одним из трех протоколов фирм Motorola, National Semiconductor, Texas Instruments.  

Последовательный  синхронный  интерфейс  SPI  фирмы  Motorola  обеспечивает 

полнодуплексный  обмен  данными  по  четырехпроводной  линии  и  программное  задание 
фазы и полярности тактового сигнала. 

Интерфейс  Microwire  фирмы  National  Semiconductor  обеспечивает  полудуплексный 

обмен данными с использованием 8-битных управляющих последовательностей. 

Интерфейс  SSI  фирмы  Texas  Instruments  обеспечивает  полнодуплексный  обмен 

данными по четырехпроводной линии и возможность перевода линии передачи данных в 
третье (высокоимпедансное) состояние. 

Выбор интерфейса осуществляется посредством поля FRF регистра SPI_CR0. 
В  состав  микроконтроллера  входят  четыре  идентичных  контроллера  SPI0,  SPI1, 

SPI2, SPI3. 

В режиме мастера и в режиме ведомого устройства контроллер SPI обеспечивает: 
-  передачу  данных,  размещенных  в  буфере  передатчика  (восемь  16-разрядных 

ячеек); 

- прием данных и размещение их в буфере приемника (восемь 16-разрядных ячеек). 
Контроллер формирует сигналы прерываний по следующим событиям: 
- необходимость обслуживания буферов приемника и/или передатчика; 
- переполнение буфера приемника; 
- наличие данных в буфере приемника по истечении времени таймаута. 
 
Основные характеристики: 
- программное управление скоростью обмена; 
- программируемая длительность информационного кадра от 4 до 16 бит; 
- независимое маскирование прерываний от буферов передатчика и приемника; 
- поддержка прямого доступа к памяти (DMA). 
 

16.1

 

Структура контроллера SPI 

Упрощенная функциональная схема контроллера SPI с блоком синхронизации 

показана на рисунке 16.1. 

 

 

 

Рисунок 16.1 – Упрощенная функциональная схема контроллера SPI 

 

 

 

126 

Синхронизация 

Тактирование  контроллера  SPI  осуществляется  тактовым  сигналом  SPI_CLOCK, 

который формируется на основе одного из четырех базовых синхросигналов (см. раздел 4 
«Система тактирования микроконтроллера»).   

Существует  ограничение  на  соотношение  между  тактовыми  частотами  SysCLK  и 

SPI_CLOCK: 

 

SPI_CLOCK ≤ SysCLK. 

 
В  режиме  мастера  на  основе  сигнала  SPI_CLOCK  посредством  двух 

последовательно  стоящих  делителей  формируется  сигнал  тактирования  передачи  и 
приема данных с частотой Fspi_clk, которую можно вычислить по формуле 

 

Fspi_clk = Fspi_clock/(CPSDVSR×(1+SCR)), 

(16.1) 

 

где – Fspi_clock – частота входного синхросигнала SPI_CLOCK; 

CPSDVSR  –  коэффициент  первого  делителя  частоты  (задается  в  регистре 

SPI_CPSR); 

SCR – коэффициент второго делителя частоты (задается в регистре SPI_CR0). 
  
Сформирований  синхросигнал  подается  на  вывод  SPI_CLK  (сконфигурированный 

как выход) микроконтроллера и далее к подключенным внешним ведомым устройствам. 

В  режиме  ведомого  значения  коэффициентов  делителей  не  важны.  Внешний 

синхросигнал  подается  на  вывод  SPI_CLK  (сконфигурированный  как  вход)  и  тактирует 
прием и передачу данных. 

Для корректной работы всегда должны соблюдаться условия: 
- в режиме мастера для формируемого синхросигнала 
 

Fspi_clk ≤ SysCLK/2; 

 

- в режиме ведомого для входящего внешнего синхросигнала 
 

Fspi_clk ≤ SysCLK/12.

 

 

Буферы приема и передачи 

Для  хранения  передаваемых  и  принятых  данных  в  контроллере  SPI  имеются  два    

16-разрядных  буфера,  организованных  по  типу  FIFO.  Каждый  буфер  может  хранить  до 
восьми  слов  данных.  Буфер  для  передаваемых  данных  доступен  только  для  записи,  а 
буфер принятых данных – только для чтения. 

Данные  для  передачи  записываются  в  буфер  через  регистр  SPI_DR.  Допускается 

заранее  заполнить  буфер  или  записывать  в  него  данные  в  течение  работы  контроллера. 
Состояние буфера можно контролировать с помощью битов TNF и TFE регистра SPI_SR. 
Если  контроллер  выключен  (сброшен  бит  SSE  регистра  SPI_CR1),  то  запись  в  регистр 
SPI_DR приведет к тому, что данные будут размещены в буфере и будут переданы после 
включения контроллера. Если контроллер включен и выбран режим мастера, то в случае 
отсутствия  данных  в  буфере  запись  в  регистр  SPI_DR  приведет  к  немедленному  началу 
передачи. Если запись данных в регистр SPI_DR происходит во время текущей передачи, 
то данные размещаются в буфере.  

Полученные  данные  автоматически  сохраняются  в  буфере  принятых  данных. 

Извлечь данные из буфера возможно чтением регистра SPI_DR. Состояние буфера можно 
контролировать с помощью битов RFFF и RNE регистра SPI_SR. 

 

 

127 

Размер передаваемого кадра данных может быть от 4 до 16 бит, что задается полем 

DSS  регистра  SPI_CR0.  Если  выбран  размер  кадра  менее  16  бит,  данные  выравниваются 
по правой границе; неиспользуемые биты игнорируются. 

Оба  буфера  могут  генерировать  четыре  независимых  маскируемых  прерывания 

TXINTR  (запрос  на  обслуживание  буфера  передатчика),  RXINTR  (запрос  на 
обслуживание буфера приемника), RTINTR (таймаут ожидания чтения данных из буфера 
приемника),  RORINTR  (переполнение  буфера  приемника).  Четыре  линии  прерываний 
объединены  по  ИЛИ.  Появление  любого  из  прерываний  генерирует  прерывание 
контроллера SPI, которое передается в контроллер прерываний NVIC. 

Управление  прерываниями  и  контроль  их  состояния  осуществляется  посредством 

регистров SPI_IMSC, SPI_RIS, SPI_MIS, SPI_ICR. 

 

Интерфейс прямого доступа к памяти  

Контроллер  SPI  имеет  интерфейс  подключения  к  контроллеру  прямого  доступа  к 

памяти. Работа в данном режиме контролируется регистром SPI_DMACR. 

Сигналы для приема: 
- SSPRXDMASREQ – 

запрос 

передачи 

отдельного 

слова, 

инициируется 

приемопередатчиком.  Сигнал  переводится  в  активное  состояние  в  случае,  если  буфер 
приемника содержит, по меньшей мере, одно слово; 

- SSPRXDMABREQ – 

запрос 

блочного 

обмена 

данными, 

инициируется 

приемопередатчиком.  Сигнал  переходит  в  активное  состояние  в  случае,  если  буфер 
приемника содержит четыре или более слов; 

- SSPRXDMACLR –  сброс  запроса  на  DMA,  инициируется  контроллером  DMA  с 

целью сброса принятого запроса. В случае если был запрошен пакетный обмен данными, 
сигнал сброса формируется в ходе передачи последнего слова данных в пакете. 

Сигналы для передачи: 
- SSPTXDMASREQ – 

запрос 

передачи 

отдельного 

слова, 

инициируется 

приемопередатчиком.  Сигнал  переводится  в  активное  состояние  в  случае,  если  буфер 
передатчика содержит, по меньшей мере, одну свободную ячейку; 

- SSPTXDMABREQ – 

запрос 

блочного 

обмена 

данными, 

инициируется 

приемопередатчиком.  Сигнал  переводится  в  активное  состояние  в  случае,  если  буфер 
передатчика содержит четыре или менее слов; 

- SSPTXDMACLR –  сброс  запроса  на  DMA,  инициируется  контроллером  DMA  с 

целью сброса принятого запроса. В случае если был запрошен пакетный обмен данными, 
сигнал сброса формируется в ходе передачи последнего слова данных в пакете. 

Сигналы 

пакетного 

и 

одиночного 

обмена 

данными 

не 

являются 

взаимоисключающими,  они  могут  быть  инициированы  одновременно.  Например,  в 
случае,  если  в  буфере  приемника  более  четырех  слов  данных,  формируются  как  сигнал 
запроса  одиночного  обмена,  так  и  сигнал  запроса  пакетного  обмена  данными.  В  случае 
если  количество  слов  данных  в  буфере  приема  меньше  четырех,  формируется  только 
запрос одиночного обмена. Это бывает полезно в ситуациях, при которых объем данных 
меньше размера пакета.  

Например,  нужно  принять  19  слов.  Тогда  контроллер  DMA  осуществит  четыре 

пакетные  передачи  блоков  по  четыре  слова,  а  оставшиеся  три  слова  –  в  ходе  трех 
одиночных  обменов,  поскольку  для  них  контроллер  SPI  не  инициирует  процедуру 
пакетного обмена. 

Каждый  инициированный  приемопередатчиком  сигнал  запроса  DMA  остается 

активным до момента его сброса соответствующим сигналом от контроллера DMA. 

После  снятия  сигнала  сброса  приемопередатчик  вновь  получает  возможность 

сформировать  запрос  на  DMA  в  случае  выполнения  описанных  выше  условий.  Все 
запросы  DMA  снимаются  после  запрета  работы  приемопередатчика,  а  также  в  случае 
снятия сигнала разрешения DMA. 

 

 

128 

Для  срабатывания  запросов  пакетного  обмена  DMABREQ  необходимо,  чтобы 

буферы приемника и передатчика были заполнены наполовину.  

 

16.2

 

Функционирование 

После сброса микроконтроллера работа приемопередатчика запрещена. 
 
П р и м е ч а н и е   –  Модуль  SPI  может  быть  сброшен  только  сигналом  сброса 

микроконтроллера.  Приемопередающая  логика  модуля  может  быть  также  сброшена 
соответствующим  битом  поля  SPIRST  регистра  PER_RST0,  при  этом  управляющие 
регистры и FIFO не сбрасываются. 

 
Прежде  чем  разрешить  работу  битом  SSE  регистра  SPI_CR1  следует 

сконфигурировать контроллер посредством регистров SPI_CR0 и SPI_CR1, а также, если 
это необходимо, запрограммировать маски прерываний. 

Динамическое изменение конфигурации устройства не допускается. 
Для протокола SPI дополнительно задаются полярность и фаза сигнала (биты SPH и 

SPO регистра SPI_CR0). 

После разрешения работы приемопередатчик  готов к  обмену данными  с внешними 

устройствами по линиям SPI_TxD (передача данных к внешнему устройству) и SPI_RxD 
(прием данных от внешнего устройства).  

В  зависимости  от  режима  работы  сигнал  на  линии  SPI_FSS  используется  либо  для 

кадровой  синхронизации  (интерфейс  SSI,  активное  состояние  –  высокий  уровень),  либо 
для  выбора  устройства  в  режиме  ведомого  (интерфейсы  SPI  и  Microwire,  активное 
состояние – низкий уровень). 

Во  всех  трех  режимах  SPI,  Microwire  и  SSI  синхросигнал  SPI_CLK  формируется 

только  тогда,  когда  приемопередатчик  готов  к  обмену  данными.  Перевод  сигнала 
SPI_CLK в неактивное состояние используется как признак таймаута приемника, то  есть 
наличия в буфере приемника необработанных данных по истечении заданного интервала 
времени. 

Установка бита MS регистра SPI_CR1 включает режим ведомого устройства. В этом 

режиме  разрешение  или  запрещение  передачи  данных  через  выход  SPI_TxD 
контролируется  битом  SOD.  На  прием  синхросигнала  и  данных  состояние  этого  бита 
влияния не оказывает. 

 

Интерфейс SPI 

Реализует полнодуплексный режим передачи данных. 
Включает  одну  линию  синхронизации  SPI_CLK,  две  линии  приема  и  передачи 

данных  SPI_RxD  и  SPI_TxD,  а  также  линию  выбора  устройства  (для  режима  ведомого) 
SPI_FSS. 

Если устройство функционирует в режиме ведомого, то на его вход SPI_FSS должен 

подаваться  низкий  уровень  сигнала  в  течение  всей  передачи  кадра  (последовательность 
передаваемых бит данных длинною от 4 до 16 бит).    

Передача  данных  может  быть  одиночной  (один  кадр)  или  непрерывной  (более 

одного кадра подряд). Данные передаются старшим битом вперед.  

Особенностью  интерфейса  SPI  является  то,  что  в  нем  реализована  возможность 

задания  полярности  и  фазы  тактового  сигнала.  Бит  SPO  регистра  SPI_CR0  задает 
полярность тактового сигнала, т. е. определяет, какой уровень сигнала будет удерживаться 
на линии SPI_CLK в то время, когда линия не активна. 

Бит SPH задает фазу тактового сигнала. Фактически, он задает порядок считывания 

и  выставления  данных.  По  умолчанию,  бит  SPH  сброшен,  и  выставление  данных  на 

 

 

 

 

 

 

 

содержание      ..     6      7      8      9     ..