Читайте также:
|
|
Общее количество СФР, связанных с UART, равно 16 (а не 8, как в привычном COM-порте ПК), что связано с наличием дополнительных свойств у подсистемы UART в ADuC702x. Однако количество адресов, используемых для доступа к этим РСФ составляет всего 12, поскольку в подсистеме использован приём, когда несколько регистров доступны через один и тот же адрес (подробности смотри далее).
1.1. Буферный регистр передатчика COMTX один байт, доступ «только запись». Доступен при сброшенном в 0 бите COMCON0.7.
1.2. Буферный регистр приёмника COMRX один байт, доступ «только чтение» Доступен при сброшенном в 0 бите COMCON0.7.
1.3. Регистр-защёлка делителя (младший байт) COMDIV0 один байт, доступ «чтение-запись». Доступен при установленном в «1» бите COMCON0.7.
Три перечисленных регистра «видны» через один и тот же адрес 0xFFFF0700.
2.1. Регистр разрешения прерываний COMIEN0 один байт, доступ «чтение-запись». Доступен при сброшенном в 0 бите COMCON0.7.
2.2. Регистр-защёлка делителя (старший байт) COMDIV1 (). Доступен при установленном в 1 бите COMCON0.7.
Два последних регистра «видны» через один и тот же адрес 0xFFFF0704.
Для того, чтобы «открыть» доступ к регистру-защёлке делителя (с целью настройки частоты следования битовых интервалов Baud Rate), следует предварительно установить в «1» бит COMCON0.7.
3. Регистр идентификации прерываний COMIID0 один байт, доступ «только чтение»,
адрес 0xFFFF0708.
4. Регистр управления линией COMCON0 один байт, доступ «чтение-запись», адрес 0xFFFF070C.
5. Регистр управления модемом COMCON1 один байт, доступ «чтение-запись», адрес 0xFFFF0710.
6. Регистр состояния линии COMSTA0 один байт, «только чтение», адрес 0xFFFF0714.
7. Регистр состояния модема COMSTA1 один байт, доступ «только чтение», адрес 0xFFFF0718.
8. Регистр временного хранения COMSCR один байт, доступ «чтение-запись».
Последующие регистры являются расширением по сравнению со стандартным COM-портом, и специфичны для реализации ADuC702x.
9. Регистр дробного делителя COMDIV2 два байта, доступ «чтение-запись». Регистр позволяет получить широкий ряд значений битовых частот, вплоть до величины 1409000 Бод.
10. Регистр признака «адрес» в сетевом режиме COMSCR один байт, доступ «чтение-запись» адрес 0xFFFF071C.
11. Регистр разрешения сетевого режима COMIEN1 один байт, доступ «чтение-запись».
12. Регистр идентификации прерываний в сетевом режиме COMIID1 один байт, доступ «только чтение, адрес 0xFFFF0724
13. Регистр адреса в сетевом режиме COMADR один байт, доступ «чтение-запись»,
адрес 0xFFFF0728.
Последние четыре регистра используются в так называемом «сетевом» режиме работы UART, который позволяет организовать на базе сеть с адресацией и с возможностью Multi-Master.
Теперь опишем более подробно функции перечисленных регистров и отдельных битовых полей в них. После названия каждого регистра приведено символическое имя, определенное в заголовочных файлах, входящих в набор средств поддержки разработки. (Затем в скобках приведены англоязычные эквиваленты названий соответвтующих регистров, используемые в описаниях регистровой модели стандартных COM-портов персонального компьютера).
Буферный регистр передатчика COMTX (Transmit Holding Register ‑ THR). Доступ «только запись». Доступен при сброшенном в 0 бите COMCON0.7. Запись в COMTX вызывает немедленное копирование содержимого буфера передатчика в сдвиговый регистр передатчика и начало последовательной передачи в линию, при этом буферный регистр передатчика освобождается, и в него немедленно может быть помещено следующее передаваемое слово. В зависимости от формата слова, передача занимает от 7 до 11 битовых интервалов. По окончании передачи, если новое слово было помещено в буферный регистр, оно также немедленно копируется в сдвиговый регистр и передача возобновляется. Такая структура с дополнительным буферным регистром носит название «двойной буферизации» (double buffering). Ее преимущество в том, что для обеспечения непрерывной передачи программа должна записать последующее слово не позже окончания передачи предыдущего слова (т.е. в течение 7...11 битовых интервалов). В случае, если программа не успевает этого сделать, недоиспользуется пропускная способность передатчика.
Подсистема передатчика UART может находиться в трех состояниях:
1) буферный и сдвиговый регистры свободны, передача не происходит, программа может записывать в передатчик новое слово для передачи;
2) сдвиговый регистр занят и идет передача, буферный регистр свободен, программа может записать в него следующее слово;
3) сдвиговый и буферный регистры заняты, идет передача, программа должна дождаться окончания передачи слова и освобождения буферного регистра.
Поэтому для сигнализации о состоянии передатчика в UART используются два флага:
TEMT (Transmitter Empty) и THRE (Transmitter Holding Register Empty) ‑ см. описание регистра COMSTA0.
Буферный регистр приёмника COMRX (Receive Buffer Register ‑ RBR). Доступ «только чтение». Доступен при сброшенном в 0 бите COMCON0.7. При поступлении последовательности битов на вход приемника UART, они последовательно сохраняются в сдвиговом регистре. По окончании приема информационных битов слова, т.е. при поступлении на сдвиговый регистр СТОП-бита, содержимое сдвигового регистра (принятое слово) копируется в буферный регистр приемника, в результате чего сдвиговый регистр приемника немедленно освобождается, и готов к приему стартового бита следующего слова. У программы имеется время, не превышающее времени приема последующего слова для того, чтобы прочитать ранее принятое слово из буферного регистра. Если же программа не успеет этого сделать, то в UART микроконтроллера ADuC70xx ранее принятый пакет будет заменен принятым позднее. (В других реализациях подсистемы UART может быть сделано наоборот, потеряется новый пакет.)
Таким образом, подсистема приемника UART может находиться в трех состояниях:
1) буферный регистр пуст, программе читать нечего, в это же время сдвиговый регистр может как находиться в покое, так и принимать очередное слово;
2) принято предыдущее слово и скопировано в буферный регистр приемника, сдвиговый регистр может как находиться в покое, так и принимать следующее слово, программа может читать содержимое буферного регистра, и должна успеть это сделать до того, как сдвиговый регистр закончит принимать следующее слово;
3) буферный регистр содержит принятое слово, которое программа не успела прочитать, а сдвиговый регистр закончил прием следующего слова и скопировал его в буферный регистр – ранее принятое слово будет потеряно. Это состояние называется «переполнением» (overrun или overflow).
Для выявления этих состояний в подсистеме UART микроконтроллера ADuC70xx используются два флага: DR (Data Ready) и OE (Overrun Error) – см. описание регистра COMSTA0.
Регистр-защёлка делителя, младший байт COMDIV0 (Divisor Latch LSB ‑ DLL). Доступ «чтение-запись». Доступен при установленном в 1 бите COMCON0.7. Описание использования этого регистра – ранее, в подразделе «Задание скорости следования битовых интервалов».
Регистр разрешения прерываний COMIEN0, (Interrupt Enable Register IER), доступ «чтение-запись. Доступен при сброшенном в «0» бите COMCON0.7.
Биты | Имя поля | Описание (функция) |
7-4 | --- | Резервировано |
EDSSI | «1» ‑ Разрешение прерывания при изменении статуса модема. | |
ELSI | «1» ‑ Разрешение прерывания при изменении статуса линии. | |
ETBEI | «1» ‑ Разрешение прерывания при опустошении буфера передатчика. | |
ERBFI | «1» ‑ Разрешение прерывания при заполнении буфера приёмника. |
Запись в этот регистр позволяет программисту разрешить (или запретить) формирование запроса аппаратного прерывания при возникновении различных событий в подсистеме UART.
Регистр-защёлка делителя, старший байт COMDIV1 (Divisor Latch MSB ‑ DLH). Доступ «чтение-запись». Доступен при установленном в 1 бите COMCON0.7. Описание использования этого регистра было приведено ранее в подразделе «Задание скорости следования битовых интервалов».
Регистр идентификации прерываний COMIID0 (Interrupt Identification Register), доступ «только чтение». Анализ состояний битов этого регистра позволит определить причину запроса прерывания.
Биты | Имя поля | Описание (функция) | Операция очисткиCOMIID0, устанавливающая в нем значение 0x1 |
7-3 | Резервированы | ||
2-1 | Статус | (Это поле может быть ненулевым только при NINT=1) 00 – прерывание по изменению состояния модема 01 – прерывание по опустошению буфера передатчика 10 – прерывание по заполнению буфера приёмника 11 – прерывание по изменению состояния линии | Чтение COMSTA1 Запись в COMTX или чтение COMIID0 Чтение COMRX Чтение COMSTA0 |
NINT | «1» ‑ нет запросов прерывания, «0» ‑ есть запросы прерывания. | Установится в 1, если п |
Если программист разрешил формирование запроса прерывания изменению состояния подсистемы UART, код обработчика прерываний должен в первую очередь проанализировать состояние этого регистра, чтобы выяснить причину возникновения запроса прерывания.
Регистр управления линией COMCON0 (Line Control Register LCR), доступ «чтение-запись». Этот регистр позволяет настроить формат пакета (одновременно и одинаково для передатчика и для приемника). Старший бит регистра COMCON0, будучи установлен в 1, открывает доступ к регистрам делителя, позволяя задать частоту следования битовых интервалов. Бит 6 (BRK) используется только для тестовых целей. Если этот бит установлен в 1, выходной сигнал передатчика UART принудительно устанавливается в 0 до тех пор, пока программа не очистит бит 6 (BRK).
Биты | Имя поля | Описание (функция) |
DLAB | Divisor Latch Access Bit «1» ‑ разрешён доступ к делителю, «0» ‑ разрешён доступ к COMTX и COMRX. | |
BRK | «1» ‑ выход передатчика в состоянии 0 (Break), «0» ‑ обычный режим | |
SP | Sticky Parity Принудительная установка контрольного бита. | |
EPS | Even Parity Select При EPS=1 контрольный бит устанавливается по признаку «четность, при EPS=0 контрольный бит устанавливается по признаку «нечетность | |
PEN | Parity Enable Разрешение передачи-приема бита (признака) чётности. | |
STOP | «1» ‑ длина стопового бита 2 (или 1,5), «0» ‑ длина стопового бита 1 | |
1-0 | WLS | Word Length Select Длина слова: 00 – 5 бит; 01 – 6 бит; 10 – 7 бит; 11 – 8 бит. |
Биты [1:0] WLS позволяют выбрать длину информационной части пакета. В подавляющем большинстве современных приложений используется пакет, содержащий 8 информационных битов.
Бит [2] STOP позволяет задать длину стопового интервала. В подавляющем большинстве современных приложений используется стоповый интервал 1 бит. Длина стопового интервала 1.5 бита возможна (вместо 2 битов) только для пакета с 5-ю информационными битами. Следует заметить, что если приемник настроен на формат со стоповым интервалом 1 бит, то передатчик может работать как с 1- так и с 2-битовым стоповым интервалом, поскольку приемник анализирует лишь состояние первого стопового бита.
Бит 3 [PEN] будучи установлен в «1», разрешает наличие в пакете контрольного бита. В UART микроконтроллера ADuC70xx реализовано аппаратное формирование в передатчике и проверка в приемнике контрольного бита по правилу четности (нечетности) количества единичных битов в информационной части пакета.
Бит 4 [EPS] определяет правило аппаратного формирования контрольного бита. Если бит EPS равен 0, то контрольный бит устанавливается таким, чтобы суммарное количество «единиц» в информационной части пакета, включая и контрольный бит, было четным. Если EPS установить в 1, то контрольный бит будет устанавливаться так, чтобы количество единиц в информационной части пакета (включая контрольный бит) было нечетным.
Бит 5 [SP] будучи установлен в «1», включает режим, позволяющий программно задать значение контрольного бита, независимо от значений информационных битов. При PEN=SP=1 контрольный бит всегда имеет значение, обратное значению бита EPS. Это позволяет программисту сформировать и передавать пакет, в котором до 9ти битов могут использоваться для передачи данных. Программа должна сначала установить бит EPS в нужное состояние а затем произвести (как обычно) запись информационной части пакета в буфер передатчика.
Бит 6 [BRK] будучи установлен в «1», переключает выходной сигнал передатчика в состояние логического «0», для тестовых целей. Чтобы вернуть нормальное состояние линии, следует сбросить бит [BRK].
Бит 7 [DLAB] будучи установлен в «1», открывает доступ к регистрам делителя, если бит [DLAB] сброшен, открыт доступ к буферным регистрам приемника и передатчика и к регистру.
Регистр управления модемом COMCON1 (Modem Control Register MCR), доступ «чтение-запись».
Позволяет программно задавать состояния выходных сигналов аппаратного управления потоком
7-5 | 2-3 | ||||
--- | LOOPBACK | --- | RTS | DTR | Запись «1» вызывает установку сигнала DTR в «0» |
Запись «1» вызывает установку сигнала RTS в «0» | |||||
Резервированы | |||||
Запись «1» вызывает внутреннее соединение RTS с CTS и DTR с DSR. Для тестовых целей. | |||||
Резервированы |
Регистр состояния линии COMSTA0 (Line Status Register LSR), доступ «только чтение».
Для лучшего понимания значений битов этого регистра необходимо помнить о двойной буферизации регистров приемника и передатчика UART.
Биты | Имя поля | Описание (функция) |
--- | Reserved | |
TEMT | Transmitter Empty ‑ Флаг опустошения сдвигового регистра передатчика. Устанавливается автоматически по концу передачи слова. Сбрасывается автоматически при копировании слова из буфера передатчика, если последний не пуст. | |
THRE | Transmitter Holding Register Empty Флаг устанавливается при копировании содержимого буфера передатчика в сдвиговый регистр и сигнализирует о том, что можно поместить в буфер следующее слово. Сбрасывается при записи слова в буфер. | |
BI | Флаг ошибки (обрыва) линии. Устанавливается аппаратно, если линия SIN находится в состоянии Low дольше, чем время передачи байта. Сбрасывается автоматически после чтения регистра COMSTA0. (???). | |
FE | Флаг ошибки формата. Устанавливается аппаратно при неверном значении стоп-бита. Сбрасывается автоматически после чтения регистра COMSTA0. (???) | |
PE | Флаг ошибки чётности. Устанавливается по аппаратному обнаружению неверного бита чётности. Сбрасывается автоматически после чтения регистра COMSTA0. (???) | |
OE | Overrun Error ‑ Флаг ошибки перезаписи. Устанавливается аппаратно, если очередной принятый байт затирает предыдущий до того, как тот был считан. Сбрасывается автоматически после чтения регистра COMSTA0. (???) | |
DR | Data Ready ‑ Флаг готовности данных. Устанавливается аппаратно по концу приёма байта. Сбрасывается автоматически при считывании буфера приёмника. |
Регистр состояния модема COMSTA1 (Modem Status Register MSR), «только чтение».
Биты | Имя поля | Описание (функция) |
DCD | DataCarrierDetect Состояние входного сигнала DCD | |
RI | RingIndicator Состояние входного сигнала RI | |
DSR | DataSetReady Состояние входного сигнала DSR | |
CTS | CleatToSend Состояние входного сигнала CTS | |
DDCD | DeltaDCD Устанавливается автоматически при изменении состояния сигнала DCD. Сбрасывается автоматически при чтении регистра COMSTA1. | |
TERI | TrailingEdgeRI Устанавливается автоматически по спаду сигнала RI. Сбрасывается автоматически при чтении регистра COMSTA1. | |
DDSR | DeltaDST Устанавливается автоматически при изменении состояния сигнала DSR. Сбрасывается автоматически при чтении регистра COMSTA1 | |
DCTS | DeltaCTS Устанавливается автоматически при изменении состояния сигнала CTS. Сбрасывается автоматически при чтении регистра COMSTA1 |
Опрос битов регистра COMSTA1 позволяет определить состояния управляющих линий интерфейса UART.
8. Регистр временного хранения COMSCR один байт, доступ «чтение-запись». В микросхемах INS8250,... NS16550A этот регистр не выполнял каких-либо аппаратно-поддерживаемых функций, а был введен в микросхему, чтобы полностью занять диапазон из 8-ми адресов. С целью обеспечения полной совместимости со стандартными микросхемами UART аналогичный регистр введен и в микроконтроллеры серии ADuC70xx.
Перечисленные регистры аналогичны соответствующим регистрам стандартного последовательного порта 16450. Последующие регистры являются расширением этого стандарта.
Регистр дробного делителя COMDIV2, два байта, доступ «чтение-запись». Регистр позволяет получить широкий ряд значений битовых частот, вплоть до величины 1305600 Бод.
Разряд | Название | Описание |
FBEN | Бит разрешения работы генератора с дробным делителем. Устанавливается пользователем для разрешения работы генератора с дробным делителем. Сбрасывается пользователем, если необходима генерация стандартной частоты 450 UART | |
14–13 | Зарезервированы | |
12–11 | FBM[1:0] | Если (FBM == 00b), M = 4, иначе M=FBM |
10–0 | FBN[10:0] | N |
Использование дробного делителя обсуждалось ранее.
Дата добавления: 2015-09-10; просмотров: 78 | Поможем написать вашу работу | Нарушение авторских прав |