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

 

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

 

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

 

   

 

   

 

содержание      ..     11      12      13      14     ..

 

 

 

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

 

 

 

 

193 

Дескриптор формируется тремя последовательно расположенными 32-разрядными 

ячейками ОЗУ. Назначение ячеек: 

- PacketStartAddr – содержит адрес ячейки ОЗУ, где расположены данные для 

передачи (пакет данных); 

- PacketSize – содержит размер пакета данных и флаги управления;  
- NextDescriptor – содержит адрес следующего дескриптора. 
Для  подробного  ознакомления  с  содержимым  ячеек  следует  обратиться  к 

приложению А. 

 
П р и м е ч а н и я  
1 Порядок назначения ячеек менять нельзя. 
2  Адресация  оперативной  памяти  контроллера  Ethernet  10/100  на  LocalBus  и 

контроллере ПДП различается и связана в соотношении: 

 

Адрес(LocalBus) = 00710000h + ((Адрес(ПДП)) /4). 

 
Таким образом, адресу 00710000h на LocalBus соответствует адрес 00000000h ПДП, 

а адресу 00710001h на LocalBus соответствует адрес 00000004h ПДП. 

 

19.1

 

Операции передачи 

Перед  передачей  пакета,  должна  быть  записана  группа  Tx  дескрипторов, 

определяющих  кольцевой  буфер  для  операций  передачи.  Стартовые  адреса  начала  всех 
сегментов  должны  быть  32-разрядные,  сегменты  равные  по  размерам  должны  быть 
достаточны  для  обработки  пакета  максимальной  длины.  Кроме  того,  в  поле  PacketSize 
дескриптора передачи должна быть записана длина пакета, а 31 бит EMPTYFLAG должен 
быть  установлен,  чтобы  указать,  что  кольцевой  буфер  пока  не  содержит  достоверных 
данных. 

Четыре  младших  бита  регистра  DMAINT  также  должны  быть  установлены,  чтобы 

специфицировать типы генерируемых прерываний. 

После  этого  процессор  должен  записать  в  кольцевые  буферы  и  в  дескрипторы, 

которые  связаны  с  этими  сегментами  памяти,  данные  для  передачи  одного  или  более 
пакетов.  Затем  в  поле  PacketSize  записывается  длина  пакета,  и  бит  EMPTYFLAG 
очищается,  что  сигнализирует  контроллеру  ПДП  о  наличии  достоверных  данных  для 
передачи. Далее данные в кольцевые буферы разрешено записывать, если установлен бит 
EMPTYFLAG соответствующего дескриптора. 

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

соответствующего дескриптора в регистре DMATXDSCR (см. рисунок 19.1). 

Для  начала  передачи  необходимо  установить  бит  TXENABLE  в  регистре 

DMATXCTRL.  После  этого  контроллер  ПДП  прочитает  регистр  DMATXDSCR  и 
определит адрес стартового дескриптора. Далее: 

- если EMPTYFLAG установлен, то дескриптор не связан с достоверными данными. 

В этом случае контроллер ПДП прекратит последовательную передачу пакетов, установит 
бит TXUNDERRUN в регистре DMAXSTAT и сбросит бит TXENABLE. Если разрешено 
прерывание, то оно будет сгенерировано. Для возобновления передачи следует установить 
бит TXENABLE; 

-  если  EMPTYFLAG  сброшен,  контроллер  ПДП  прочитает  адрес  начала  буферного 

сегмента пакета данных и определит его размер. 

Далее передача пакета будет стартовать, если FIFO подтвердит контроллеру ПДП о 

наличии  в  FIFO  достаточного  места  для  приема  передаваемого  пакета  максимальной 
длины. 

 

 

194 

Если  передача  завершена  успешно,  то  контроллер  ПДП  установит  EMPTYFLAG, 

установит  флаг  TXPKTSENT  в  регистре  DMATXSTAT  и,  если  разрешено,  сгенерирует 
прерывание,  и  увеличит  на  единицу  число,  записанное  в  поле  TX_PKT_COUNT.  После 
этого контроллер ПДП перейдет к обработке следующего пакета. 

Если произойдет ошибка в канале связи при передаче, то контроллер ПДП прекратит 

последовательную передачу пакетов, установит бит BUSERROR, сбросит бит TXENABLE 
и, если разрешено, сгенерирует. 

Для  последующей  передачи  потребуется  обновление  регистра  DMATXSTAT  для 

того, чтобы установить новую стартовую позицию в кольцевом буфере, и установить бит 
TXENABLE. 

 

19.2

 

Операции приема 

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

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

Биты c седьмого по четвертый регистра DMAINT должны быть установлены, чтобы 

специфицировать типы генерируемых прерываний. 

В регистр DMARXDSCR должен быть записан адрес стартового Rx дескриптора. 
Для  начала  работы  следует  установить  бит  RXENABLE  в  регистре  MAC1  для 

разрешения контроллеру ПДП обрабатывать принимаемый пакет. После этого встроенный 
контроллер  ПДП  читает  регистр  DMARXDSCR  для  определения  адреса  первого 
дескриптора, затем читает этот дескриптор. Далее: 

- если EMPTYFLAG сброшен, то это означает, что предыдущий принятый пакет еще 

не  был  считан  программой.  В  этом  случае  контроллер  ПДП  прекращает  
последовательный  прием  пакетов,  устанавливает  бит  RXOVERFLOW  в  регистре 
DMARXSTAT,  сбрасывает  бит  RXENABLE,  и  если  разрешено прерывание, то  оно будет 
сгенерировано.  Любой  последующий  прием  будет  возможен  только  после  обновления 
регистра DMARXDSCR и установки бита RXENABLE; 

-  если  EMPTYFLAG  установлен,  то  это  означает,  что  область  памяти  доступна  для 

сохранения пакета. 

Контроллер  ПДП начнет  прием пакета, если FIFO сообщит  контроллеру  о наличии 

принятого  пакета.  Если  прием  пакета  закончен  успешно,  то  контроллер  ПДП  запишет 
значение  числа  принятых  байт  в  поле  PACKET_SIZE  дескриптора  приема,  сбросит  бит 
EMPTYFLAG  и  установит  бит  RXPKTREC  в  регистре  DMARXSTAT.  Если  разрешено, 
будет  сгенерировано  прерывание  и  увеличено  на  единицу  значение  в  счетчике 
RX_PKT_COUNT.  

Если  FIFO  сообщит,  что  имеется  принятый  пакет,  то  контроллер  ПДП  начнет 

передачу этого пакета в следующий сегмент кольцевого буфера. 

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

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

Если  произошла  ошибка  при  приеме,  то  контроллер  ПДП  прекращает 

последовательную  обработку  принимаемых  пакетов,  устанавливает  бит  BUSERROR  в 
регистре  DMARXSTAT,  сбрасывает  бит  RXENABLE  и,  если  разрешено,  генерирует 
прерывание. 

Для  следующего  приема  следует  обновить  регистр  DMARXDSCR,  записью 

правильной стартовой позиции кольцевого буфера, и установить бит RXENABLE. 

 

 

195 

20

 

Контроллер интерфейса USB OTG 

USB  (Universal  Serial  Bus)  –  последовательная  шина,  которая  позволяет  передавать 

данные между хост-компьютером и различными периферийными устройствами. Наиболее 
важным свойством USB является возможность подключения и отключения периферийных 
устройств  без  выключения  всей  системы  (один  из  классов  механизма  «Plug  and  Play»). 
USB-хост  имеет  соединения  типа  точка-точка  с  периферийными  устройствами  через 
поярусную  топологию  типа  «звезда»,  в  узлах  которой  содержится  USB-устройство, 
называемое хабом. USB позволяет соединить до 127 устройств. 

 
20.1

 

Функции хоста 

Главные функции хоста: 
- определение подключения/отключения USB-устройств; 
- установление нисходящего соединения (от хаба до периферийного устройства); 
- посылка маркеров начала фрейма (SOF); 
- проведение операций приостановки/возобновления работы устройств; 
- обработка  данных  во  фрейме  или  пакете,  если  их  больше,  чем  было  запрошено 

(packet или frame babbling); 

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

всегда инициироваться хостом, и все передачи должны производиться с использованием 
до трех типов структур данных – Setup-/OUT-/IN-токенов, Data-пакетов и подтверждений 
Handshake.  

Токены  обеспечивают  USB-устройства  информацией  о  направлении  и  типе 

передачи, адресе USB-устройства и адресе конечной точки (Endpoint), к которой (или от 
которой) обеспечивается передача.  

Data-пакеты – это  данные,  которые  принимает  или  передает  хост.  Данные 

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

Подтверждения Handshake, отправленные к источнику передачи, показывают, была 

ли передача успешной или нет.  

USB протокол поддерживает четыре типа передач: 
- управляющие передачи (control transfer); 
- передачи массивов данных (bulk transfer); 
- передачи по прерываниям (interrupt transfer); 
- изохронные передачи (isochronous transfer). 
 
Управляющие передачи и передачи массивов данных являются непериодическими, а 

передачи  по  прерываниям  и  изохронные  передачи  –  периодическими.  Для  каждого  из 
этого типа передач, поток данных может быть как от хоста к устройству (OUT), так и от 
устройства  к  хосту  (IN).  Для  каждого  типа  передачи,  в  устройстве  имеется  буфер, 
называемый  Endpoint,  для  хранения  байт  данных  для  транзакции.  Каждое  устройство 
должно  иметь  контрольный  буфер  Endpoint,  который  отвечает  на  контрольные  запросы, 
передавая хосту конфигурационную информацию об устройстве.  

 

Управляющие передачи 

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

информации о конфигурации, пересылки команд и статуса между клиентской программой 
и USB-устройством. Контрольные посылки делятся на три этапа: 

- передача команды (Setup stage); 
- передача с подтверждением одного или нескольких пакетов данных (Data stage); 

 

 

196 

- прием  с  подтверждением  пустого  пакета  данных,  подтверждающего  успешную 

транзакцию (Status stage). 

Управляющие передачи показаны на рисунке 20.1. 
 

 

 

Рисунок 20.1 – Управляющие передачи 

 

Передачи массивов данных 

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

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

   

Передачи по прерываниям 

Этот  тип  используется  для  пересылки  небольших  данных  между  устройством  и 

клиентской программой, для которых задается период опроса в конфигурации устройства. 
Пример  использования  –  устройства  ввода-вывода  (клавиатура  и  т. п.),  для  которых 
устанавливается  определенное  время  опроса  для  приема  данных  о  нажатии  клавиш. 
Передачи по прерываниям показаны на рисунке 20.2. 

 

 

 

Рисунок 20.2 – Передачи по прерываниям 

 

Изохронные передачи 

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

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

 

 

197 

посылок  применяется  при  передаче  аудио/видео  потоковых  данных  и  т.п.  Изохронные 
передачи показаны на рисунке 20.3. 

 

 

 

Рисунок 20.3 – Изохронные передачи 

 

20.2

 

Работа хоста 

Определение подключения 

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

устройства. Если состояние линии 1, то подключенное устройство работает в режиме High 
speed  или    Full  speed.  Хост-контроллер  первым  детектирует  это  состояние  линии.  Затем 
следующие события  происходят в соответствии с программным обеспечением (ПО): 

1 Программное  обеспечение  разрешает  прерывания  USB-хоста  в  регистре 

USBCMD_STS_INTR.  

2 Биты  PORTCONNECT  и  PORTCONCHNG  регистра  PORT_STS  устанавливаются 

аппаратно. 

3 Хост-контроллер посылает прерывание. 
4 ПО определяет источник прерывания и очищает бит PORTCONCHNG. 
5 ПО  устанавливает  бит  PORTRESET  регистра  PORT_STS  для  сброса  USB  линии. 

Это соответствует протоколу сброса USB-устройств. 

6 Если  устройство  включено  после  сброса  линии,  бит  PORTENABLE  регистра 

PORT_STS устанавливается аппаратно. 

7 Определение  отключения.  Когда  в  течение  определенного  времени  возникает 

тайм-аут, контроллер хоста определяет это как отключение устройства. 

 

Управляющие передачи 

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

контрольной передачи; 

- в регистр TBT записать общее количество байт для передачи; 
- в регистре USB_PKT_FLD_B задать поле MPS (максимальный размер пакета); 
- в регистре  USB_PKT_FLD_A  установить  бит  ENTRANSFER  (разрешение 

передачи),  задать  поле  DEV_ADDR  (адрес  устройства),  задать  поле  ENDPOINTTYPE  = 
00b  (тип  контрольной  точки  –  Сontrol),  задать  поле  PID  =  10b  (метка  Setup)  и  поле 
EP_ADDR = 0h (адрес  конечной точки). 

 
IN-посылки (от устройства к хосту) 

Для выполнения IN-передачи следует (программно): 
- в  регистр  BUFF_START_ADDR  записать  стартовый  адрес  буфера  для  текущей    

IN-передачи; 

- в регистр TBT записать общее количество байт для IN-передачи; 
- в регистре USB_PKT_FLD_B задать поле MPS; 

 

 

198 

- в  регистре  USB_PKT_FLD_A  установить  бит  ENTRANSFER,  задать  поле 

DEV_ADDR,  задать  поле  ENDPOINTTYPE  (Iso,  Bulk,  Interrupt),  задать  поле  PID  =  01b 
(метка In) и поле EP_ADDR. 

 

OUT-посылки (от хоста к устройству) 

Для выполнения OUT-передачи следует (программно): 
- в  регистр  BUFF_START_ADDR  записать  стартовый  адрес  буфера  для  текущей 

контрольной передачи; 

- в регистр TBT записать общее количество байт для OUT-передачи; 
- в регистре USB_PKT_FLD_B задать поле MPS; 
- в регистре  USB_PKT_FLD_A  установить  бит  ENTRANSFER,  задать  поле 

DEV_ADDR,  задать  поле  ENDPOINTTYPE  (Iso,  Bulk,  Interrupt),  задать  поле  PID  =  00b 
(метка Out) и поле EP_ADDR. 

 

20.3

 

Работа устройства 

Работа при управляющих передачах 

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

Этап передачи команды (Setup stage) 

Передача  команды  –  это  Setup-токен  c  восемью  байтами  управляющих  данных, 

которые содержат запрашиваемую информацию от хоста к устройству (см. рисунок 20.4).  

 

 

 

Рисунок 20.4 – Передача команды 

 
Для  этого  этапа  доступны  два  прерывания:  по  приему  Setup-токена  и  по  приему 

Setup-пакета (после приема 8 байт данных без каких-либо ошибок).  

ЦП  должен  сбросить  биты  соответствующих  прерываний,  если  они  возникли, 

обработать  принятые  на  этом  этапе  данные  и  подготовиться  к  опциональному  этапу 
передачи  данных  (Data  stage).  Четыре  регистра  SETUP1_0,  SETUP3_2,  SETUP5_4  и 
SETUP7_6 хранят данные, принятые контрольной точкой на этапе передачи команды. 

 
Этап передачи данных (Data stage) 

В случае управляющей записи с передачей данных, когда происходит OUT-передача, 

принятые данные записываются в буфер контрольной точки,  генерируется прерывание и 
устанавливается  флаг  DATAPKTRECINT  в  регистре  USB_EP_x_IRQ_STAT  (x  –  номер 
контрольной точки). ЦП должен обработать принятые данные, количество байт  которых 
указывается в регистре OUT_TRNSFR_CNT. Передача данных показана на рисунке 20.5. 

 

 

 

199 

 

 

Рисунок 20.5 – Передача данных 

 
В случае управляющего чтения с передачей данных, когда происходит IN-передача, 

ЦП  должен  загрузить  буфер  контрольной  точки  данными  для  передачи  хосту,  затем 
загрузить регистр IN_TRNSFR_CNT значением количества передаваемых данных. Запись 
значения количества байт в регистр разрешает USB-устройству передать данные хосту на 
приходящий  IN-токен. После,  ЦП  может  ожидать  прерывание,  которое  будет 
сигнализировать  о  завершении  этапа  передачи  данных  и  установки  флага 
DATAPKTTRINT в регистре USB_EP_x_IRQ_STAT. 

В  случае  если  требуется  послать  STALL-Handshake  хосту,  ЦП  должен  установить 

бит STALL в регистре CEP_CTRL_STAT. 

 

Этап подтверждения (Status stage) 

После того, как микроконтроллер завершил этап передачи данных, бит NAK_CLEAR 

должен  быть  сброшен  (см.  рисунок  20.6).  Сбрасывая  этот  бит,  ЦП  позволяет  хосту 
перейти  к  следующей  управляющей  передаче.  Этот  бит  устанавливается  USB-
устройством после приема Setup-токена. 

В  случае  если  требуется  послать  STALL-Handshake  хосту,  ЦП  должен  установить 

бит STALL и сбросить бит NAK_CLEAR. 

 

 

 

Рисунок 20.6 – Подтверждение 

 

Работа при приеме IN-токенов 

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

приема  устройством  IN-токена  от  хоста.  Есть  три  различных  режима  подтверждения 
данных, при которых они будут посланы хосту: 

- автоподтверждения; 
- подтверждения вручную; 
- подтверждения «на лету». 

 

 

200 

Режим автоподтверждения 

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

отсылать  количество  байт  данных,  равное  значению  EP_MPS  регистра  USB_EP_x_MPS. 
Контроллер  конечной точки  будет  ждать,  пока  количество  байт  данных  в  буфере  станет 
равным  EP_MPS,  после  чего  подтвердит  отправку.  Если  микроконтроллеру  требуется 
отправить  короткий  пакет  в  конце  передачи,  следует  установить  бит  PKTEND  регистра 
USB_EP_x_RSP_SC.  Когда  бит  будет  установлен,  оставшееся  количество  байт  данных 
будет отправлено хосту на следующий IN-токен. 

Этот  режим  требует  минимум  вмешательства  центрального  процессора,  т. к. 

большинство  работы  будет  сделано  на  аппаратном  уровне.  Режим  может  быть  выбран, 
когда  размер  пересылаемых  данных  в  хост  всегда  равен  значению  EP_MPS.  Более 
подробно действия контроллера точки отображены в таблице 20.1. 
 
Т а б л и ц а   2 0 . 1   – Действия Endpoint в режиме автоподтверждения  

Бит 

PacketEnd 

Количество доступных 

данных в буфере 

Действие 

< EP_MPS 

Ответ NAK 

≥ EP_MPS 

Ответ количеством данных, равных EP_MPS 

< EP_MPS 

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

≥ EP_MPS 

Ответ количеством данных, равных EP_MPS 

 

Режим подтверждения вручную 

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

будет отсылать данные тогда, когда это будет разрешено микроконтроллером. ЦП сначала 
записывает  данные  в  буфер,  а  затем  записывает  количество  байт  данных  (значение 
EP_CNT)  в  регистр  USB_EP_x_CNT.  Как  только  будет  записано  верное  количество 
передаваемых байт, данные будут отправлены хосту на следующий  IN-токен.  

Этот режим требует вмешательства ЦП каждую посылку и может быть использован, 

если  количество  передаваемых  байт  каждый  раз  непостоянное  и  решается  ЦП.  Более 
подробно действия контроллера точки отображены в таблице 20.2. 
 
Т а б л и ц а   2 0 . 2   – Действия Endpoint в режиме подтверждения вручную 

EP_CNT 

записан 

Количество доступных 

данных в буфере 

Действие 

Нет 

Ответ NAK 

Да 

EP_CNT 

Ответ количеством данных, равных EP_CNT 

 

Режим подтверждения «на лету» 

Простейший  режим  работы,  где  не  требуется  процедуры  подтверждения.  Буфер 

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

Этот  режим  требует  минимум  вмешательства  ЦП  и  лучше  всего  подходит  для 

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

 
 
 
 
 
 

 

 

201 

Т а б л и ц а   2 0 . 3   – Действия Endpoint в режиме подтверждения «на лету» 

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

в буфере 

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

>= EP_MPS 

Ответ количеством данных, равных EP_MPS 

< EP_MPS 

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

 

20.4

 

USB OTG 

USB OTG –  это портативные  устройства, которые используют  единственное гнездо 

типа  Micro-AB  для  работы,  как  в  режиме  хоста,  так  и  в  режиме  периферийного 
устройства. OTG-устройства всегда могут работать, как стандартное USB-устройство при 
подключении к стандартному USB-хосту. 

OTG-устройства  так  же  могут  соединяться  друг  с  другом.  Режим  работы  (хост  или 

устройство) определяется OTG-кабелем либо протоколом HNP (Host Negotiation Protocol). 

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

физического «переворачивания» OTG-кабеля.  

 

Описание работы 

После подключения OTG-кабеля через вывод ID определяется тип OTG-устройства. 

При  неподключенном  кабеле  вывод  ID  подтянут  внутренним  резистором  до  логической 
единицы,  что  определяет  тип  устройства  B-device  (периферийное  устройство).  Если  в 
OTG-гнездо  устройства  Micro-AB  подключена  вилка  типа  Micro-A,  то  вывод  ID 
переводится  в  логический  ноль,  что  указывает  на  хост.  Если  подключена  вилка  типа 
Micro-B,  то  вывод  ID  не  меняет  своего  логического  состояния  (остается  в  единице),  что 
указывает на периферийное устройство. 

Изменение  вывода  ID  вызывает  прерывание  и  установку  флага  HANDOFF_INTR  в 

регистре OTG_IRQ_STAT.  

 
П р и м е ч а н и е  – Для разрешения прерывания, следует установить соответствующий 

бит в регистре OTG_IRQ_EN. 

 
Тип подключенной вилки Micro-A  или Micro-B отображается в битах A_DEVICE и  

B_DEVICE. 

В зависимости от типа (хост или устройство), следует  установить бит  B_BUS_REQ 

или бит A_BUS_REQ. 

Если  устройство  является  B-device,  то  после  установки  бита  B_BUS_REQ  оно 

начинает генерировать SRP-запросы (включается на некоторое время подтяжка по линии 
D+,  после  чего  анализируется  шина  питания  VBUS).  Хост,  видя  запрос  SRP,  должен 
подать  питание  на  устройство.  После  подачи  питания  хостом    на  устройство  по  SRP 
запросу,  возникнет  прерывание  и  установится  флаг    DEV_SYNCCHNG,  а  также  бит 
DEVICE, что говорит о том, что устройство перешло в состояние «b_peripheral» (согласно 
диаграмме состояний B-device).  По этому прерыванию можно настраивать устройство на 
работу.  

Если  устройство  является  A-device,  то  при  SRP-запросе  от  B-device  возникнет 

прерывание  и  установится  флаг  SRPDETINTR.  В  этом  прерывании  следует  установить 
бит  A_BUS_REQ.  После  установки  этого  бита  контроллер  с  помощью  управляющего 
сигнала  USB_DRVVBUS  начнет  подавать  питание  на  USB-разъем.  После  этого 
подключенное  периферийное  устройство  будет  готово  к  дальнейшей  работе,  а  хост 
перейдет  в  состояние  «a_host»  (согласно  диаграмме  состояний  A-device),  установив  бит 
HOST. 

После  этого  будет  сгенерировано  прерывание  и  установлен  флаг 

HOSTSYNCCHNG. 

 

 

202 

USB_DRVVBUS 

(альтернативная  функция  вывода  E.7  микроконтроллера) 

активируется  аппаратно  при  работе  в  режиме  хоста  и  управляет  подачей  питания  на   
USB-разъем.  В  режиме  устройства  вывод  всегда  удерживается  в  состоянии  логического 
нуля.  В  приложении  Д  приводится  схема  подключения  USB  разъема  micro_AB  с 
питанием, управляемым сигналом USB_DRVVBUS. 

При  подключении  двух  OTG-устройств  друг  к  другу,  если  контроллер,  работая  в 

режиме B-device, принимает от хоста Set_Feature (протокол HNP), то следует установить 
бит  B_HNP_EN.  Аналогично,  если  контроллер  работает  в  режиме  A-device,  после 
отправления запроса Set_Feature (протокол HNP) к B-device, должен быть установлен бит 
A_HNP_EN. 

Если в режиме A-device больше не требуется использование линии USB, то следует 

установить бит A_BUS_DROP. 

Чтобы  послать  запрос  SUSPEND  на  линию  USB,  следует  установить  бит 

SUSPEND_EN. 

 

 

 
 

 

 

203 

21

 

Блок АЦП 

Блок  АЦП  объединяет  12  модулей  АЦП  последовательного  приближения 

(архитектура  SAR),  ОЗУ  результатов  измерений  и  схему  управления  прерываниями. 
Структурная схема блока АЦП показана на рисунке 21.1.  

 

 

 

Рисунок 21.1 – Структурная схема блока АЦП 

 
В блок АЦП входят: 
- 12 двухканальных (каждый может работать в дифференциальном режиме) модулей 

АЦП разрядностью 12/10 бит и рабочей частотой 12/24 МГц; 

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

измерений по всем 24 каналам АЦП и по окончании выставить прерывание; 

- 24  независимых  цифровых  компаратора,  отслеживающих  и  сравнивающих 

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

- восемь буферов результатов измерений (каждый организован по типу FIFO); 
- блок управления прерываниями. 

 

 

 

 

204 

Блок АЦП имеет 24 канала – по два (А и В) на каждый модуль АЦП. Соответствие 

номеров каналов и входов модулей АЦП указано в таблице 21.1.    

Примечание –  23  канал  не  способен  работать  в  одиночном  режиме.  Он  может 

работать только в дифференциальном режиме А - B (Канал 22 – Канал 23). 

 

Т а б л и ц а   2 1 . 1  – Соответствие номеров каналов контроллера АЦП и входов его модулей 

Номер 

канала 

Вход 

модуля 

АЦП 

Модуль 

 

Номер 

канала 

Вход 

модуля 

АЦП 

Модуль 

А 

АЦП0 

12 

А 

АЦП6 

13 

А 

АЦП1 

14 

А 

АЦП7 

15 

А 

АЦП2 

16 

А 

АЦП8 

17 

А 

АЦП3 

18 

А 

АЦП9 

19 

А 

АЦП4 

20 

А 

АЦП10 

21 

10 

А 

АЦП5 

22 

А 

АЦП11 

11 

23 

 

Настройка  тактирования  контроллера  АЦП  и  его  модулей  осуществляется 

посредством регистров ADC_CTRL0, ADC_CTRL1 и ADC_CTRL2. 

Для правильной работы необходимо обеспечить тактирование модулей АЦП: 
- в 10-разрядном режиме частотой 24 МГц (диапазон от 6 до 28,8 МГц); 
- в 12-разрядном режиме частотой 12 МГц (допустимый диапазон от 5 до 14,4 МГц). 
 

21.1

 

Секвенсор 

Секвенсор  представляет  собой  управляющий  блок,  позволяющий  разгрузить 

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

 

 

 
 

Рисунок 21.2 – Структурная схема секвенсора 

 

 

205 

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

выбирается полем EMs регистра EMUX: 

- установка бита GSYNC регистра PSSI;   
- сигнал от одного из блоков аналоговых компараторов; 
- сигнал от блока таймеров; 
- сигнал от одного из блоков ШИМ; 
- сигнал прерывания GPIO. 
 
После  запуска  по  событию  секвенсор  формирует  сигнал  запуска  модуля  АЦП. 

Задержка запуска модуля задается полем TMR регистра TMR секвенсора. По окончании 
измерения  секвенсор  может  автоматически  перезапустить  модуль  АЦП.  Перезапуск 
может  выполняться  до  256  раз  (поле  RCNT  регистра  CTL)  с  заданной  периодичностью 
(поле  TMR).  Также  секвенсор  может  быть  запрограммирован  на  циклический  запуск 
модулей АЦП без остановки (в этом случае значение поля RCNT не важно). 

Секвенсор может одновременно запустить измерения на всех 24 каналах блока АЦП. 

Если выбранный канал соответствует входу А модуля АЦП, то измерение будет запущено 
только для этого входа. В случае если выбранный канал соответствует входу B, то сначала 
будет  запущено  измерение  по  входу  А,  а  затем  по  входу  В  (реализовано  на  аппаратном 
уровне и влияет на время измерений).  

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

Результаты измерений сохраняются в буфере результатов секвенсора. Контроль состояния 
буфера осуществляется посредством регистров FSTAT, OSTAT и USTAT. 

Секвенсор  может  генерировать  прерывания  с  заданной  периодичностью  (по 

умолчанию  –  в  конце  каждого  измерения).  По  завершении  каждого  измерения 
инкрементируется счетчик запусков, и как только он достигает значения, заданного полем 
ICNT регистра CTL, генерируется прерывание. Сброс счетчика запусков происходит при 
запуске секвенсора по событию (если ICNT ≠ 01h) или программно – при каждой записи в 
поле ICNT.  

Прерывания, генерируемые секвенсором и передаваемые в контроллер NVIC, могут 

использоваться  блоком  DMA  для  аппаратного  копирования  содержимого  буфера 
результатов АЦП в ОЗУ.  

Для каждого секвенсора выделена одна из восьми линий прерываний IS0 – IS7. 
Флаги INRs и INs прерываний секвенсоров устанавливаются в регистрах RIS и ISC 

(маскированные  прерывания).  Маска  прерываний  задается  регистром  IM.  Флаги 
сбрасываются записью единиц в соответствующие биты регистра ISC.   

Диаграмма работы секвенсора показана на рисунке 21.3. 
 

 

 

Рисунок 21.3 – Диаграмма работы секвенсора 

 

 

 

206 

Проведение измерений 

1  Если  сигнал  запуска  получает  только  один  секвенсор,  то  он  запускается.  Если 

модуль  настроен  на  проведение  нескольких  измерений,  то  по  окончании  измерения 
секвенсор  запускается  снова  и  запуск  происходит  по  истечении  времени,  определяемого 
задержкой TMR (незамедлительно, если TMR = 00000h).  

Если в течение преобразования возникают сигналы запуска других  секвенсоров, то 

эти секвенсоры переходят в состояние ожидания.  

2  Если  несколько  секвенсоров  получают  сигнал  запуска  одновременно,  то  сначала 

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

 

 

 

Рисунок 21.4 – Запуск нескольких секвенсоров 

 
3 На момент окончания измерения происходит проверка состояния всех секвенсоров 

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

При  этом  секвенсор,  закончивший  преобразование  (измерение),  в  этот  момент  не 

запускается  (например,  если  работает  в  непрерывном  цикле),  а  переходит  в  состояние 
ожидания.  

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

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

 

21.2

 

Модуль АЦП 

Структурная схема двухканального модуля АЦП показана на рисунке 21.5. 
 

 

 

Рисунок 21.5 – Модуль АЦП 

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

от  одного  до  12  модулей  АЦП.  Модуль  АЦП  выбирается  автоматически,  если 
секвенсором  выбран  хотя  бы  один  из  его  каналов.  Поскольку  один  канал  может  быть 
выбран  несколькими  секвенсорами,  то  на  один  модуль  АЦП  могут  приходить 
одновременно  несколько  сигналов  запусков.  Все  эти  сигналы  объединены  по  ИЛИ.  Не 
выбранные  модули  АЦП  не  функционируют.  Для  разрешения  работы  модуля  АЦП 
следует установить бит ENA в регистре PPm, а также записать единицы в первые два бита 
поля OM.  

 

 

207 

Режимы работы 

Модуль  АЦП  может  функционировать  как  в  однополярном,  так  и  в 

дифференциальном режиме работы. Выбор режима задается полем OM регистра PPm. 

Диапазон  входных  напряжений  в  однополярном  режиме  от  0  до  1,5

 

В,  в 

дифференциальном от 0,15 до 1,65 В. 

В  однополярном  (см.  рисунок  21.6)  режиме  сигналы  с  входов  A  и  B  через  схему 

задержки передаются к регистру последовательного приближения (РПП) напрямую.      

Далее: 
- если  для  измерения  был  выбран  канал  A,  то  на  выходе  РПП  будет  результат 

измерения только канала А; 

- если  для  измерения  был  выбран  канал  B  или  оба  канала,  то  сначала  будет 

выполнено  измерение  канала  A,  а  затем  канала  B,  и  на  выходе  РПП  будут  результаты 
измерения обоих каналов (общее время измерения, соответственно, увеличивается вдвое). 

 

 

Рисунок 21.6 – Функционирование модулей АЦП в однополярном режиме 

 
В  дифференциальном  режиме  дифференциальный  усилитель  (SHA)  усиливает 

разность  напряжений  между  входами  A  и  B.  Усиленное  таким  образом  значение  через 
схему задержки передается к РПП. В составе модуля АЦП функционируют два усилителя 
SHA1 и SHA1 (см. рисунок 21.5). На выходе первого формируется значение «A – B», а на 
выходе второго –  «B – A». Дифференциальный режим не может быть включен для двух 
блоков усилителей одновременно. 

Модуль  АЦП  имеет  схему  фазовой  задержки,  которая  позволяет  задержать  начало 

преобразования входных сигналов после того как модуль АЦП получил сигнал запуска от 
секвенсора  (см.  рисунок  21.7).  Задержка  включается  одновременно  для  обоих  каналов  и 
программируется посредством соответствующего регистра SPCn. 

 

 

Рисунок 21.7 – Фазовая задержка 

 

 

208 

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

составе модуля АЦП два усреднителя, для которых задается общий параметр AVGm. Если 
AVGm = 0, то усреднители не используются; в противном случае модуль АЦП выполняет 
количество  измерений,  задаваемое  полем  AVGm,  усреднители  суммируют  результаты  и 
вычисляют усредненное значение для каждого из каналов.   

Усреднители сбрасываются при поступлении сигнала запуска от секвенсора. 
Результаты измерений с выходов модуля АЦП записываются в буферы секвенсоров 

и/или передаются на компараторы. 

 
Расчет времени одного измерения 

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

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

 

T = R × A × (Tadc + 1t + tsysclk × (Padc + k)),  

(21.1) 

 

где  R – количество перезапусков (R = 1 при RCNT = 00h);  

А – количество измерений при усреднении (A = 1 при AVGm = 0h); 
Tadc – время преобразования для: 

-  одного  канала  (А)  равняется  семи  тактам  рабочей  частоты  (например,  для 

24 МГц параметр Tadc = 292 нс); 

- двух каналов (сначала A, затем В) равняется 14 тактам рабочей частоты (для 

24 МГц параметр Tadc = 584 нс); 

1t – один такт рабочей частоты; 
tsysclk – длительность такта системной частоту SysCLK, нс; 
Padc – фазовая задержка (Padc = 0 при PHASEm = 0h); 
k  –  количество  тактов  системной  частоты  (4  для  однократного  режима  запуска  и 

12 для циклического). 
 

21.3

 

Буфер результатов измерений 

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

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

Количество ячеек в буфере:  
- 32 для секвенсоров 0 и 1; 
- 16 для секвенсоров 2 – 5; 
- одна для секвенсоров 6 и 7. 
 
Результаты измерений модулей АЦП записываются в буферы секвенсоров в порядке 

возрастания  номеров  каналов,  т. е.  первым  будет  записан  результат  канала  А  модуля 
АЦП0,  а  последним  –  результат  канала  В  модуля  АЦП11.  Каналы,  на  которые  не 
поступили  сигналы  запуска,  пропускаются.  При  этом  порядок  записи  не  изменяется. 
После записи последнего значения в буфер и/или компаратор, формируется прерывание.  

 
П р и м еч а н и е  – Запущенные модули АЦП могут иметь разное время измерения и, 

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

По  мере  заполнения  буфера  секвенсора  инкрементируется  счетчик  количества 

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

 

 

 

 

 

 

 

содержание      ..     11      12      13      14     ..