Файл: Микропроцессорные устройства систем управления (Ю.И. Иванов, 2005).pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 16.06.2025

Просмотров: 1582

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Регистр управления UCR содержит 8 бит управления работой интерфей­ са.

Символические имена битов управления регистра UCR [RXCIEJ TXCIE| UDRIE j RXEN TXEN CHR9 \ RXBjTj TXB8 |

RXCIE - бит разрешения прерывания по окончании рабочего цикла приема данных (вектор прерывания UARTJRXC с адресом $00Ь).

TXCIE - бит разрешения прерывания по окончании рабочего цикла пере­ дачи данных (вектор прерывания UARTJTXC с адресом $00d).

UDRIE - бит разрешения прерывания по перезаписи данных из регистра UDR в буфер передатчика, т.е. предыдущее сообщение еще об­ рабатывается передатчиком интерфейса UART, но уже разреше­ на запись следующего сообщения для подготовки к передаче

(вектор прерывания UART_DRE с адресом $00с).

RXEN - бит разрешения приема, разрешает работу приемника интерфейса. TXEN - бит разрешения передачи, разрешает работу передатчика интер­

фейса.

CHR9 - бит разрешения 9-битового формата сообщения.

RXB8 - дополнительный 9-й бит сообщения приемника (бит 8). ТХВ8 - дополнительный 9-й бит сообщения передатчика (бит 8).

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

Регистр состояния USR содержит флаги выполнения интерфейсом

раз­

личных операций.

Символические имена флагов в регистре USR

[ RXC j ТХС

UDRE | FE

OR

-

-

-

j

RXC - флаг окончания приема сообщения; устанавливается после приема очередного сообщения в UDR и вызывает вектор прерывания UARTJRXC, если биты разрешения RXCIE (в регистре UCR) и I (в регистре SREG) установлены. Флаг очищается при чтении регист­ ра UDR, т.е. подпрограмма обработки прерывания RXC должна обязательно предусматривать чтение регистра UDR для очистки флага.

53


ТХС - флаг завершения передачи сообщения; аналогично флагу RXC вы­ зывает вектор прерывания UARTTXC. Флаг ТХС очищается ав­ томатически при вызове вектора прерывания или программно за­ писью " 1" в этот бит.

UDRE - флаг готовности регистра UDR к приему нового сообщения для передачи (до завершения передачи ТХС); аналогично флагу RXC вызывает вектор прерывания UARTDRE. Флаг очищается при за­ писи в регистр UDR, что должно обязательно выполняться в под­ программе обработки прерывания.

FE - флаг ошибки формата сообщения; устанавливается, например, когда столовый бит принятого сообщения имеет нулевой уровень. Очи­ щается при приеме сообщения установленного формата.

OR - флаг перегрузки; устанавливается, когда предыдущее принятое со­ общение еще не прочитано из регистра UDR, а следующее уже по­ ступает в приемник. Очищается, когда сообщение принято и пере­ дано в UDR.

Регистр UBRR определяет скорость обмена данными интерфейса. Ско­ рость обмена данными BAUD определяется формулой

BAUD =

£и

,

16(UBRR + 1)

где f-ги - частота тактового генератора микроконтроллера,

UBRR - содержимое регистра скорости (число в диапазоне $00 - $FF). Вычисленное значение скорости округляется до ближайшего стандартного значения (не рекомендуется использование скоростей, отличающихся от стандартных более, чем на 1 %).

Таким образом, в интерфейсе UART скорости передачи и приема сооб­ щения одинаковы и определяются UBRR, разрешение на выполнение раз­ личных операций задается программно изменением содержимого регистра UCR. Операции обмена данными выполняются по флагам регистра USR векторами соответствующих прерываний. Подпрограммы обработки пре­ рываний должны выполнять обмен данными с интерфейсом UART через регистр UDR.

3.4. Таймеры микроконтроллера

Микроконтроллер содержит 3 таймера-счетчика, которые работают не­ зависимо друг от друга. Таймер 0 и таймер 2 состоят из 8-разрядных счет­ чиков, таймер 1 содержит 16-разрядный счетчик. Счетчики таймеров рабо­ тают в режиме суммирования. Каждый из таймеров может работать от так­ тового генератора микроконтроллера с программируемым коэффициентом деления частоты (от 1 до 1024) либо от внешнего источника входного сиг­ нала. При использовании внешнего источника входные сигналы стробируются тактовыми импульсами микроконтроллера. Кроме того, таймер 2 мо54


жет работать в асинхронном режиме от дополнительного генератора, со­ держащегося в микроконтроллере. Этот генератор оптимизирован для ра­ боты с кварцевым резонатором часов частотой 32,768 кГц, что позволяет получать с помощью таймера 2 импульсы с периодом 1 с.

Управление работой таймеров и обработка их сигналов производится через соответствующие регистры файла регистров ввода-вывода. Регистр масок TIMSK и регистр флагов прерываний TIFR - общие для всех тайме­ ров и программно доступны для чтения и записи. Остальные регистры управления индивидуальны для каждого таймера. Взаимодействие с тайме­ рами при формировании заданных временных интервалов практически все­ гда необходимо производить процедурами ввода-вывода по соответствую­ щим прерываниям. Основное назначение регистров TIMSK и TIFR - управление прерываниями таймеров.

Регистр TIMSK содержит биты разрешения, а регистр TIFR содержит флаги всех прерываний, вырабатываемых таймерами. Биты одноимен­ ных разрядов обоих регистров обеспечивают обработку соответствующих прерываний таймеров. Эти вектора прерываний будут описаны далее для каждого таймера.

Символические имена битов разрешения в регистре TIMSK

OCIE2 | TOIE2 | Т1СШГ

OCIE1A | OCIE1B

TOIE1 | -

j TOIE0 1

Символические имена битов разрешения в регистре TIFR

[ OCF2 | TOV2 | ICF1 ~

OCF1A j OCF1B

| TOV1 | -

TOV0 1

Например, с помощью битов 6 обоих регистров (TOIE2 - TOV2) произ­ водится обработка прерывания по переполнению таймера 2. Установленное программно единичное значение бита TOIE2 разрешает прерывание, а при переполнении таймера 2 устанавливается единичное значение флага TOV2, которое вызывает вектор прерывания TIM20VF (адрес вектора $004), если общее разрешение прерывания установлено. Все флаги регист­ ра TIFR очищаются аппаратно при вызове векторов прерываний либо про­ граммно записью единицы в соответствующий бит этого регистра. Анало­ гично и попарно работают все остальные биты регистров TIMSK и TIFR.

3.4.1. Таймер О

Таймер 0 содержит 8-разрядный суммирующий двоичный счетчик и формирует прерывание только по переполнению с помощью битов TOIE0 и TOV0 регистров TIMSK и TIFR. Кроме этих регистров, таймер 0 использу-

55


ет регистры TCCRO и TCNTO из файла регистров ввода-вывода. Флаг TOV0 при выполнении условий, указанных выше, вызывает вектор пре­ рывания TIM0_OVF с адресом $009. Регистр TCCR0 управляет работой таймера, а регистр TCNT0 содержит текущее состояние счетчика таймера, оба регистра программно доступны и для чтения, и для записи.

В регистре TCCR0 используются только три младших бита CS02, CS01, CS00. Эти биты управляют входным сигналом таймера 0:

000 - входной сигнал блокируется, таймер остановлен.

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

010 - частота входного сигнала fn/8.

011 - частота входного сигнала fTH/64.

100 - частота входного сигнала £„,/256.

101 - частота входного сигнала £^/1024.

110 - внешний входной сигнал, поступающий на вход ТО (альтер­ нативная функция PB0), падающий фронт.

111 - внешний входной сигнал ТО (PB0), нарастающий фронт.

С помощью регистра TCNT0 можно производить программную обра­ ботку состояния таймера, запись байта в этот регистр не останавливает ра­ боту счетчика, а чтение этого же регистра позволяет программно анализи­ ровать изменение состояния счетчика от момента запуска битами управле­ ния. Прерывание в таймере 0 с вызовом соответствующего вектора преры­ вания формируется только флагом переполнения TOV0.

Пример программного управления таймером 0:

ml:

clr

rl

; очистка г1 (г1=0),

т2:

out

TCCRO, rl;

пересылка байта из rl

(0) в регистр

; управления TCCR0,

тЗ:

out

TCNTO, rl;

пересылка байта из rl

(0) в регистр

Idi

; таймера TCNT0,

т4:

г16,1

; загрузка в г16 константы 1,

т5: out

TIMSK, г16

; пересылка в регистр TIMSK константы

Idi

;

для разрешения прерывания таймера 0,

тб:

г16, 3

; загрузка в г16 константы управления таймера 0,

ml:

out

TCCRO, rl6

; запуск таймера 0,

Команды ml-тЗ

выполняют подготовку таймера 0 для работы (т2 - ос-

тановка таймера, тЗ - сброс счетчика в нулевое состояние). Команды т4, т5 необходимы для разрешения прерывания таймера 0. Команды тб, ml производят запуск таймера 0. После выполнения команды ml таймер на­ чинает работать: частота входного сигнала fmx/64 в соответствии с константой управления, равной 3, через каждые 256 входных импульсов фор-

56


мируется флаг прерывания TOV0. Следовательно, вызов соответствующего вектора прерывания будет производиться каждые 64*256=16384 тактов работы микроконтроллера.

3.4.2. Таймер 1

Таймер 1 построен на основе 16-разрядного двоичного счетчика, форми­ рует прерывания по 4 различным векторам прерываний, может использо­ ваться в качестве широтно-импульсного модулятора (ШИМ) и обладает существенно расширенными возможностями по сравнению с таймером 0. Управление прерываниями, в соответствии с ранее описанными процеду­ рами, производится соответствующими битами регистров TIMSK и TIFR. Кроме этих двух регистров, режимы и параметры работы таймера 1 опре­ деляют еще 10 регистров файла регистров ввода-вывода.

Переполнение таймера 1 формирует флаг прерывания TOV1 (аналогичен флагу TOV0), который при выполнении необходимых условий вызывает

вектор прерывания TIMl_OVF с адресом $008. В таймере 1 также пре­ дусмотрены два канала сравнения эталонных значений, хранящихся в реги­ страх OCR1А и OCR IB, с текущим состоянием счетчика (Compare A, Com­ pare В). При совпадении эталонного значения с текущим состоянием счет­ чика формируется соответствующий флаг прерывания OCF1A или OCF1B в регистре TIFR и выполняется такая же стандартная процедура обработки аппаратных прерываний, как и для остальных флагов. Вектор прерывания

канала А - TIM1COMPA с адресом $006, вектор прерывания канала

В- Т1М1_СОМРВ с адресом $007.

Последний флаг прерывания таймера 1 - прерывание режима захват

ICF1. Когда на вход режима захват ICP (альтернативная функция ли­ нии ввода-вывода PD6) поступает сигнал, текущее состояние таймера за­ писывается в специальный регистр захвата ICR1 и формируется флаг прерывания ICF1 регистра TIFR со стандартной процедурой вызова векто­ ра прерывания Т1М1_САРТ с адресом $005. Основное назначение этого режима - отсчет интервала времени от программного запуска таймера до внешнего события, изменившего входной сигнал PD6.

Двухбайтовый регистр ICR1 программно доступен только для чтения и содержит оба байта текущего состояния 16-битового счетчика (ICR1L - ре­ гистр младшего байта, ICR1H - регистр старшего байта). При чтении со­ держимого регистра ICR1 в подпрограмме обработки прерывания сначала должна выполняться команда чтения младшего байта (регистр ICR1L) и только после этого - команда чтения старшего байта (регистр ICR1H) \

Чтение и запись содержимого всех 16-битовых регистров необходимо произво­ дить в определенной последовательности для обеспечения одновременного доступа к обоим байтам. В процедурах доступа старший байт всегда помещается в регистр временного хранения TEMP.

57