где К = 16 при U2X = 0, К = 8 при U2X = 1.
В табл.5. указаны выводы портов микроконтроллеров, используемые в качестве входа приемника (RXD) и выхода передатчика (TXD) у микроконтроллеров разных типов.
Таблица 5
Вывод | Тип | мк | ||||
порта UART | 2313 | 4433 | 8515 | 8535 | m163 | m10З |
RXD TXD | PD0 PD1 | PD0 PD1 | PD0 PD1 | PD0 PD1 | PD0 PD1 | РЕО РЕ1 |
Порт TWSI входит в состав периферийных устройств микроконтроллера типа ml6
Через порт TWSI микроконтроллер подключается к двухпроводной шине IС.
Устройство может работать в качестве ведущего или ведомого. Статус микроконтроллера, подключенного к шине 1С, устанавливается программными средствами.
Линия SCL предназначена для передачи синхросигнала из веду цего Устройства в ведомое. Линия SDA совместно с линией SCL используется для передачи сигналов начала и конца обмена, адресных байтов и байтов данных и сигналов подтверждения приема байта. Линии SCL и SDA соединены с одноименными выводами подключенных устройств.
Кроме того, они через резисторы R1 и R2 подключены к шине VCC. При отсутствии обмена в линиях SCL и SDA устанавливается высокий уровень сигнала.
Ведущее устройство после перевода его в активное состояние дожидается освобождения шины от обмена между другими устройствами и формирует в шине посылку начала обмена {Start, ST), которая представлена переходом сигнала в линии SDA от высокого уровня к низкому уровню при высоком уровне сигнала в линии SCL.
После выдачи посылки ST в линии SCL устанавливается низкий уровень сигнала и далее формируется последовательность из девяти положительных импульсов. Установка требуемого значения бита в линии SDA производится при низком уровне сигнала в линии SCL. Передача байта начинается со старшего разряда.
Первым байтом, выдаваемом в шину ведущим устройством после выдачи посылки ST, является адресный байт. Старшие семь битов адресного байта представляют номер (адрес) ведомого устройства, с которым будет выполняться обмен, (А6,..., АО), а младший бит W/R определяет направление обмена. При W/R = 0 байты данных будут передаваться из ведущего устройства в ведомое, при W/R = 1 - в противоположном направлении. Ведомое устройство после получения восьмого бита устанавливает в линии SDA низкий уровень сигнала, что является подтверждением приема байта для ведущего устройства, (Acknowledge, ACK).
После адресного байта ведущее устройство передает (при W/R = 0) или принимает (при W/R =1) байты данных.
При передаче байта данных принимающее устройство после приема восьмого бита устанавливает в линии SDA низкий уровень сигнала (АСК), а передающее устройство при появлении девятого импульса опрашивает состояние линии SDA. Низкий уровень сигнала является подтверждением приема байта данных. При обнаружении высокого уровня подтверждения нет (No Acknowledge, NAC), что свидетельствует об отсутствии обмена или ошибке при передаче байта.
После успешной передачи байта данных возможны три варианта продолжения работы ведущего устройства:
1) передача следующего байта в том же направлении с участием того же ведомого устройства;
2) выбор другого ведомого устройства пли смена направления обмена или то и другое;
3) окончание обмена с освобождением линии.
В нервом случае ведущее устройство формирует последовательность из девяти импульсов и выполняется пересылка очередного байта данных. Во втором случае ведущее устройство формирует посылку ST и выдает новый адресный байт. В третьем случае ведущее устройство формирует посылку конца обмена (Stop, SP), которая представляется переходом сигнала в линии SDA от низкого уровня к высокому при высоком уровне сигнала в линии SCL.
Все ведомые устройства при обнаружении в шине посылки ST принимают адресный байт и сравнивают полученный адрес с собственным адресом, который хранится в одном из регистров порта. При совпадении адресов формируется посылка АСК и устройство переводится в режим ожидания очередной серии из девяти импульсов для приема или передачи байта данных в зависимости от значения бита W/R в принятом адресном байте.
Все перечисленные операции в ведомом устройстве выполняются аппаратно.
Порт TWSI у микроконтроллера типа ml63 содержит 5 регистров ввода-вывода:
■ регистр данных TWDR (№ $03);
■ регистр адреса TWAR (№ $02);
■ регистр состояния TWSR (№ $01);
■ регистр задания скорости передачи TWBR (№ $00);
■ регистр управления TWCR (№ $36).
Порт переводится в активное состояние при установке в единичное состояние разряда TWEN регистра TWCR. При этом выводы порта SCL и SDA подключаются к внешним выводам микроконтроллера PC0 и РС1 соответственно.
Порт начинает работать в качестве ведущего после установки в единичное состояние разряда TWSTA регистра TWCR.
При работе в качестве ведущего генератор G формирует импульсный сигнал, который через буферную схему I/OCL выдается в линию SCL. Скорость передачи битов определяется числом, код которого записан в регистре TWBR. Положение фронтов импульсов в импульсном сигнале связано с выполнением определенных операций в порте и может изменяться в некоторых пределах. Осредненное значение скорости передачи BR, бит/с, определяется по формуле
где FCK - тактовая частота микроконтроллера; (TWBR) - число, код которого записан в регистр TWBR ( (TWBR) >7); tA - показатель, учитывающий растяжение некоторых интервалов между фронтами импульсов (tА = 200-600 нс).
При работе порта в качестве ведомого порядок его работы определяется импульсной последовательностью, которая через вывод SCL и буферную схему I/OCL поступает в схему управления СУ.
Регистр TWDR имеет цепи для сдвига кода влево. В него параллельно записываются байты, предназначенные для последовательного вывода в линию SDA через буферную схему I/ODA, и последовательно вводятся байты, поступающие из линии SDA через буферную схему I/ODA. импулсы сдвига поступают из схемы управления.
Регистр TWAR используется только при работе порта в качестве ведомого. Код, записанный в старших семи его разрядах, представляет собственный адрес микроконтроллера (А6,..., АО). Этот код сравнивается с помощью схемы сравнения СС с кодом в старших семи битах адресного байта, принятого в регистр TWDR.
Младший разряд TWGCE регистра TWAR разрешает прием байтов данных (при TWGCE = 1) после получения адресного байта с адресом общего вызова для всех ведомых микроконтроллеров ($00).
Регистр TWCR содержит разряды, определяющие работу схемы управления, (TWEA, TWSTA, TWSTO и TWEN), отражающие состояние порта (TWINT и TWWC) и разряд TWIE, разрешающий поступление запроса прерывания из порта в блок прерываний. Запрос прерывания TWSI поступает в блок прерываний при TWINT = 1 и TWIE = 1.
Код, формируемый в регистре TWSR, отражает состояние порта TWSI на различных этапах его работы.
Порт может работать в следующих режимах:
1) ведущий с передачей байтов данных;
2) ведущий с приемом байтов данных;
3) ведомый с приемом байтов данных;
4) ведомый с передачей байтов данных.
В табл.6. описан порядок управления портом TWSI при работе его в качестве ведущего с передачей байтов (табл.6, а) и с приемом байтов (табл.6,5) при отсутствии ошибок в процессе обмена.
В таблице используются следующие обозначения:
■ SLA, W/R - адресный байт, где SLA - адрес ведомого устройства;
■ DATA - байт данных;
■ (TWSR) - байт в регистре TWSR;
■ (TWDR) - байт в регистре TWDR;
■: = - знак операции установки разряда регистра TWCR в указанное состояние.
В исходном состоянии разряд TWEN в регистре TWCR находится в единичном состоянии, остальные разряды - в нулевом состоянии.
В табл.7. описан порядок управления портом TWSI при работе его в качестве ведомого с приемом байтов (в табл.7, а) и с передачей байтов (в табл.7, б) при отсутствии ошибок в процессе обмена.
В исходном состоянии разряды TWEN и TWEA регистра TWCK находятся в единичном состоянии, другие разряды - в нулевом состоянии; в регистре TWAR записан байт SLA, 0/1.
Таблица 6
№ шага | Операция по команде в программе | Условие перехода к следующему шагу |
а) ведущий с передачей байтов данных | ||
1 | TWSTA: =1 | TWINT=1, (TWSR) =$08 |
2 | SLA, 0→TWDR | |
3 | TWINT: =0 | TWINT=1, (TWSR) =$18 |
4 | DATA→TWDR | |
5 | TWINT: =0 | TWINT=1, (TWSR) =$28 |
… | Выполнение шагов 4, 5 | |
N | TWSTO: =1 - конец передачи, освобождение шины IC | |
N | TWSTO: =1, TWSTA: =1 | TWINT=1, (TWSR) =$10 |
N+1 | Выполнение шага 2 в табл. а) или б) и далее | |
б) ведущий с приёмом байтов данных | ||
1 | TWSTA: =1 | TWINT, (TWSR) =$08 |
2 | SLA, 1→TWDR | |
3 | TWINT: =0 | TWINT=1, (TWSR) =$40 |
4 | (TWRD) →Rd | |
5 | TWINT: =0 | TWINT=1, (TWSR) =$50 |
… | Выполнение шагов 4, 5 | |
M | TWSTO: =1 - конец приема, освобождение шины IC | |
M | TWSTO: =1, TWSTA: =1 | TWINT=1, (TWSR) =$10 |
M+1 | Выполнение шага 2 в табл. а) или б) и далее |
Таблица 7
№ шага | Операция по команде в программе | Условие перехода к следующему шагу |
а) ведомый с приемом байтов данных | ||
1 | TWINT=1, (TWSR) =$60/$70 | (TWDR) →Rd |
2 | TWINT: =0 | |
3 | TWINT=1, (TWSR) =$80/$90 | (TWDR) →Rd |
4 | TWINT: =0 | |
… | Далее шаги 3, 4 | |
б) ведомый с выдачей байтов данных | ||
1 | TWINT=1, (TWSR) =$A8 | DATA→TWDR |
2 | TWINT: =0 | |
3 | TWINT=1, (TWSR) =$B8 | DATA→TWDR |
4 | TWINT: =0 | |
… | Далее шаги 3, 4 |
Единичное состояние разряда TWINT в процессе обмена может определяться программными средствами с использованием команды условного перехода или аппаратными средствами по запросу прерывания TWSI. Во втором случае при инициализации порта необходимо установить в единичное состояние также разряд TWIE регистра TWCR.