При появлении ошибок в процессе обмена в регистре состояния TWSR появляются коды иные, чем указаны в табл.6 и 7.
Разряд TWWC регистра TWCR устанавливается в единичное состояние при попытке записать код в регистр TWDR во время сдвига кода в регистре.
Таймер-счетчик Т/СХ (X = 0, 1, 2 - цифра в имени таймера-счетчика) любого типа содержит базовый счетчик TCNTX, имеющий восемь или шестнадцать разрядов, и восьмиразрядный регистр управления TCCRX. Кроме того, в состав таймера-счетчика входят один или несколько разрядов регистра запросов, прерывания TIFR (№ $38, у МК типа 128 - № $05) и столько же разрядов регистра маскирования прерываний TIMSK (№ $39, у МК типа t28 - № $06). Регистры TIFR и TIMSK являются общими для всех таймеров-счетчиков микроконтроллера.
Разряд регистра TIFR устанавливается в единичное состояние при формировании в таймере-счетчике определенного запроса прерывания. Запрос прерывания проходит в блок прерываний при единичном состоянии соответствующего разряда регистра TIMSK. Разряд регистра TIFR сбрасывается в нулевое состояние аппаратно при переходе микроконтроллера к выполнению соответствующей прерывающей программы или программно при выполнении команды установки бита в единичное состояние (!).
В состав таймера-счетчика, выполняющего функцию сравнения/PWM, входит регистр сравнения OCRX, а в состав таймера-счетчика, выполняющего функцию захвата, - регистр захвата ICRX. Разрядность регистров OCRX и ICRX равна разрядности базового счетчика TCNTX.
Для записи кода в шестнадцатиразрядный счетчик или регистр сначала выполняется команда записи (OUT) байта в старшую половину разрядов (Н), при этом поступавший из регистра общего назначения старший байт запоминается в регистре временного хранения. Затем выполняется команда записи (OUT) младшего байта в младшую половину разрядов (L), при этом оба байта одновременно записываются в счетчик или регистр.
Для чтения кода из шестнадцатиразрядного счетчика или регистра сначала выполняется команда чтения (IN) байта из младшей половины разрядов (L), при этом считанный младший байт поступает в регистр общего назначения, а старший байт запоминается в регистре временного хранения. Затем выполняется команда чтения байта из старшей половины разрядов (Н), при этом старший байт из регистра временного хранения поступает в указанный в команде регистр общего назначения.
Таймер-счетчик типа А есть у микроконтроллеров всех типов кроме микроконтроллера типа тЮЗ. Он имеет имя Т/СО (X = 0). Таймер-счетчик типа А формирует запрос прерывания Т/СО OVF при переполнении восьмиразрядного базового счетчика TCNT0 (№ S32, у МК типа t28 - № $03).
Тактовый сигнал микроконтроллера СК поступает в пересчетную схему (prescaler) ПС, представляющую собой десятиразрядный счетчик, где выполняется деление частоты тактового сигнала на 8, 64, 256 и 1024. Сигналы с четырех выходов пересчетной схемы поступают в схему управления СУ (мультиплексор). При наличии в микроконтроллере таймера-счетчика Т/С1 эти же сигналы поступают в Т/С1.
В схему управления поступают также тактовый сигнал СК и сигнал из внешнего источника, принимаемый на вход ТО. В качестве входа то у микроконтроллеров типа 1200, 2313 и 4433 используется вывод порта PD4, у микроконтроллеров типа 2323, 2343 и серии ATtiny - вывод порта РВ2, а у микроконтроллеров типа 8515, 8535 и m163 - вывод порта РВО.
Схема управления в зависимости от комбинации состояний разрядов CSOO, CS01 и CS02 регистра управления TCCR0 (№$33, у МК тип t28 - № $04) передаст один из поступающих сигналов на счетный вход базового счетчика TCNT0, ведущего счет па сложение. Сигналы, используемые для счета в счетчике TCNT0 при разных комбинациях значений в разрядах регистра TCCR0, указаны в табл.8.
Таблица 8
CS02 | CS01 | CS00 | сигнал |
0 | 0 | 0 | нет |
0 | 0 | 1 | СК |
0 | 1 | 0 | СК/8 |
0 | 1 | 1 | СК/64 |
1 | 0 | 0 | СК/256 |
1 | 0 | 1 | СК/1024 |
1 | 1 | 0 | Отрицательный фронт на ТО |
1 | 1 | 1 | Положительный фронт на ТО |
При переполнении счетчика TCNT0 устанавливается в единичное состояние разряд TOV0 регистра TIFR и при единичном состоянии разряда TOIE0 регистра TIMSK в блок прерываний поступает запрос прерывания Т/СО OVF.
В микроконтроллере типа tl5 в работе таймера-счетчика типа А Участвуют разряд PSR0 регистра SFIOR (№ $2С). При установке этого Разряда в единичное состояние сбрасывается в исходное (нулевое) состояние пересчетная схема ПС. Разряд PSR0 возвращается в нулевое состояние аппаратно. В микроконтроллере типа ш163 аналогичная операция выполняется при установке в единичное состояние разряда PSR10 Регистра SFIOR (№ $30).
Таймер-счетчик типа В входит в состав периферийных устройств микроконтроллеров типа 115 (Т/С1) и ml03 (Т/С2). Он формирует запрос прерывания Т/СХ OVF при переполнении восьмиразрядного базового счетчика TCNTX и выполняет функцию сравнения / PWM с формированием запроса прерывания Т/СХ СОМР.
Тактовый сигнал микроконтроллера СК поступает в пересчетную схему ПС, где частота сигнала делится на 8, 64., 256 и 1024. Сигналы с четырех выходов пересчетной схемы поступают в схему управления СУ1 и в таймер-счетчик Т/С1 типа Е. В схему управления СУ1 поступают также тактовый сигнал СК и сигнал из внешнего источника, принимаемый на вход Т2 (вывод порта PD7). При выполнении функции сравнения/PWM вывод порта РВ7 используется в качестве выхода OC2/PWM2 для выдачи сигнала, формируемого при совпадении сравниваемых кодов или сигнала PWM2.
Схема управления СУ1 в зависимости от комбинации состоянии разрядов CS20, CS21 и CS22 регистра управления TCCR2 передает на счетный вход базового счетчика TCNT2 одни из поступающих сигналов в соответствии с табл.8 (при X = 2).
При переполнении базового счетчика устанавливается в единичное состояние разряд TOV2 регистра TIFR и при единичном состоянии разряда TOIE2 регистра TIMSK в блок прерываний поступает запрос прерывания Т/С2 OVF.
Режим работы таймера-счетчика определяется комбинацией состояний разрядов PWM2, СОМ21 и СОМ20 регистра TCCR2. При нулевом состоянии трех названных разрядов формируется только запрос прерывания Т/С2 OVE При PWM2 = 0 и других комбинациях состояний разрядов СОМ21 и СОМ20 выполняется функция сравнения. Код, формируемый в базовом счетчике TCNT2, с помощью компаратора К сравнивается с кодом, записанным в регистре OCR2. При совпадении кодов устанавливается определенное значение сигнала на выходе ОС2 (вывод порта РВ7), переводится в единичное состояние разряд OCF2 регистра TIFR и при единичном состоянии разряда OCIE2 регистра T1MSK в блок прерываний поступает запрос прерывания Т/С2 СОМР. Значение сигнала, устанавливаемого на выходе ОС2 при совпадении кодов, определяется комбинацией состояний разрядов СОМ20 и С0М21 регистра TCCR2 в соответствии с табл.9.
Таблица 9
СОМ21 | СОМ20 | Значение сигнала |
0 1 1 | 1 0 1 | Изменяется 0 1 |
Работа базового счетчика при выполнении функции сравнения зависит от состояния разряда СТС2 регистра TCCR2. При СТС2 = 0 базовый счетчик после совпадения кодов продолжает счет до переполнения и далее выполняет счет, начиная с 0. При СТС2 = 1 базовый счетчик при совпадении кодов сбрасывается в пулевое состояние и продолжает счет, начиная с 0. При PWM2 = 1 и СОМ21 = 1 выполняется функция PWM. Базовый счетчик ведет счет на сложение до получения кода максимального числа (255), переводится в режим счета на вычитание и в этом режиме ведет счет до получения кода минимального числа (0) и далее вновь переходит в режим счета на сложении. Акт переполнения (переход от кода числа 255 к коду числа 0) в данном случае отсутствует.
Запрос прерывания Т/С2 OVF формируется при переходе от числа 0 к числу 1.
Состояние разряда СОМ20 определяет вид изменения выходного сигнала при совпадении кодов в счетчике и регистре сравнения. На изображены графиках изменения числа в счетчике TCNT2 и временные диаграммы сигнала PWM на выходе ОС2 при заданном коде числа в регистре сравнения (OCR2) при разных состояниях разряда СОМ20.
Период сигнала PWM (T) в 510 раз больше периода сигнала, поступающего на счетный вход базового счетчика.
При записи байта в регистр OCR2 (по команде с мнемокодом операции OUT) байт принимается в регистр временного хранения, из регистра второго переписывается в регистр OCR2 при появлении в базовом счетчике кода числа 255.
При этом исключается появление в сигнале PWM импульса со случайной длительностью.
а) C0M20=0 б) С0М20=1
Рис.1
Таймер-счетчик типа В в микроконтроллере типа t15 имеет имя Т/С1 (Х = 1). Исходный сигнал для работы таймера-счетчика (РСК) имеет частоту 25,6 МГц при частоте тактового сигнала микроконтроллера 1,6 МГц (1/16 РСК). В регистре управления имеется дополнительный разряд CS1 Выбор сигнала для передачи на счетный вход базового счетчика определяется комбинацией состояний разрядов CS13, CS12, CS11 и CS10 в соответствии с табл.10. Вход для приема сигнала из внешнего источника отсутствует.
Таблица 10
CS13 | CS12 | CS11 | CS10 | Сигнал |
0 | 0 | 0 | 0 | нет |
0 | 0 | 0 | 1 | РСК (16СК) |
0 | 0 | 1 | 0 | РСК/2 (8 СК) |
0 | 0 | 1 | 1 | РСК/4 (4 СК) |
0 | 1 | 0 | 0 | РСК/8 (2 СК) |
0 | 1 | 0 | 1 | РСКЛб (СК) |
0 | 1 | 1 | 0 | СК/2 |
0 | 1 | 1 | 1 | СК/4 |
1 | 0 | 0 | 0 | СК/8 |
1 | 0 | 0 | 1 | СК/16 |
1 | 0 | 1 | 0 | СК/32 |
1 | 0 | 1 | 1 | СК/64 |
1 | 1 | 0 | 0 | СК/128 |
1 | 1 | 0 | 1 | СК/256 |
1 | 1 | 1 | 0 | СК/512 |
1 | 1 | 1 | 1 | СК/1024 |
В состав таймера-счетчика входят два регистра сравнения - OCR10 и OCR11. Регистр OCR10 используются при выполнении функции сравнения. Регистр OCR11 используется совместно с регистром OCR10 при выполнении функции PWM. Базовый счетчик работает в режиме счета на сложение и ведет счет от 0 до числа, код которого записан в регистре OCR11. Сигнал 0C1/PWM выдается на вывод порта РВ1.