Файл: Микропроцессорные устройства систем управления (Ю.И. Иванов, 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