Материал: Микропроцессорные устройства систем управления (2005)

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Кроме регистров ADMUX, ADCH, ADCL, работа АЦП определяется ре­ гистром ADCSR, который также содержится в файле регистров вводавывода.

Символические имена битов управления в регистре ADCSR

ADENl ADSC| ADFR I ADIF [ ADIE | ADPS2 | APPSlj APPS20J

ADEN - бит разрешения, 0 - АЦП выключен, 1 - АЦП включен.

ADSC - бит запуска преобразования, в режиме однократного преобразова­ ния единица должна записываться при каждом запуске, в цикличе­ ском режиме - один раз для запуска первого преобразования.

ADFR - бит режима преобразования, 1 - циклический режим, 0 - одно­ кратный.

ADIF - флаг прерывания, устанавливается после завершения преобразова­ ния и записи кода в выходной регистр АЦП. Очищается автомати­ чески при вызове вектора прерывания либо записью 1 в этот бит.

ADIE - бит разрешения прерывания АЦП, 1 разрешает прерывание. ADPS2, ADPS1, ADPS20 - биты управления тактовой «частотой АЦП, оп­

ределяют коэффициент деления тактовой частоты микроконтрол­ лера следующим образом:

000 - коэффициент деления 2,

001 - коэффициент деления 2,

010 - коэффициент деления 4,

011 — коэффициент деления 8,

100 - коэффициент деления 16,

101 - коэффициент деления 32,

110 - коэффициент деления 64,

111 - коэффициент деления 128.

Дополнительное снижение уровня помех для повышения точности пре­ образования можно получить, если на время преобразования АЦП приос­ тановить работу процессора в микроконтроллере переходом в режим "idle". Возврат в рабочее состояние должна обеспечивать подпрограмма обработ­ ки прерывания АЦП. Более подробную информацию о работе АЦП можно найти в руководствах фирмы ATMEL.

Для управления работой АЦП подпрограмма его вектора прерывания должна выполнить чтение результатов завершенного цикла преобразования из выходных регистров, определить через регистр мультиплексора номер следующего входного канала и произвести запуск следующего цикла пре­ образования.

65

3.7. Чтение и запись данных EEPROM

Доступ к данным в EEPROM производится с помощью 4 регистров фай­ ла регистров ввода-вывода: регистра управления EECR, регистра дан­

ных EEDR, регистра старшего байта адреса EEARH, регистра младше­ го байта адреса EEARL. Время доступа не превышает 4 мс и зависит от напряжения питания. Завершение процедуры доступа формирует флаг пре­ рывания готовности EEPROM со стандартной процедурой вызова вектора

прерывания EERDY с адресом SOOf.

Обмен данными с EEPROM производится через регистр данных EEDR по двухбайтовому адресу, указанному в регистрах EEARH, EEARL. Про­ цедурами доступа управляют биты регистра EECR.

Символические имена битов в регистре управления EECR

l - l - l - l - l EERIE | EEMWE 1 EEWE j EERE [

EERIE - бит разрешения прерывания EEPROM, это прерывание формиру­ ется при нулевом значении бита разрешения записи EEWE.

EEMWE - бит записи данных в EEPROM, при единичном значении EEWE записывает в EEPROM данные из регистра EEDR по адресу, ука­ занному в регистрах адреса.

EEWE - бит разрешения записи.

EERE - бит управления чтением данных, при единичном значении произ­

водится чтение данных из EEPROM в регистр EEDR.

Процедура записи данных усложнена для защиты от несанкционирован­ ного изменения данных. Более подробную информацию можно найти в ру­ ководствах фирмы ATMEL.

3.8. Система прерываний и регистры общего управления

Аппаратные прерывания в микроконтроллере обрабатываются 17 векто­ рами прерываний с жестко закрепленными адресами во флэш-памяти в диапазоне от $000 до $010. Уровни приоритетов векторов прерываний оп­ ределяются их адресами, наименьшему адресу $000 соответствует самый высокий приоритет. Стандартный текст программы со ссылками на метки подпрограмм обработки прерываний должен быть следующим:

$000

rjmp

RESET

;

Reset

Handler

$001

rjmp

EXT__INT0

 

;

IRQ0

Handler

$002

rjmp

EXT_INT1

 

;

IRQ1

Handler

$003

rjmp

TIM2_COMP

;

Timer2

Compare Handler

66

$004

rjmp

TIM2__OVF

 

;

Timer2

Overflow

Handler

$005

rjmp

TIM1_CAPT

;

Timerl Capture Handler

$006

rjmp

TIM1_C0MPA

 

;

Timerl

CompareA

Handler

$007

rjmp

TIM1_C0MPB

 

;

Timerl

CompareB

Handler

$008

rjmp

TIM1_0VF

 

;

Timerl

Overflow

Handler

$009

rjmp

TIM0_OVF

 

;

TimerO

Overflow

Handler

$00a

rjmp

SPI_STC

;

SPI T r a n s f e r

Complete

 

 

 

 

;

Handler

 

 

$00b

rjmp

UART_RXC

 

;

UART RX Complete

Handler

$00c

rjmp

UART_DRE

 

;

UDR Empty

Handler

$00d

rjmp

UART_TXC

 

;

UART TX Complete

Handler

$00e

rjmp

ADC

;

ADC Complete

I n t e r r u p t

 

 

 

 

;

Handler

 

 

$00f

rjmp

EE_RDY

;

EEPROM Ready

Handler

$010

rjmp

ANA_COMP

 

;

Analog

Comparator Handler

Использовать эту область памяти для хранения кодов других команд не­ целесообразно, так как ошибочное формирование флага прерывания может привести к вызову соответствующего вектора с некорректным выполнени­ ем процедуры обработки. Вектора прерываний с адресами $003 - $010 опи­ саны в предыдущих разделах и служат для вызова подпрограмм, необхо­ димых для реализации соответствующих функций встроенных аппаратных средств микроконтроллера.

Вектор RESET с адресом $000 выполняет инициализацию микрокон­ троллера при начальном сбросе. Обработка этого вектора не требует ника­ ких условий, т.е. вектор может быть вызван в произвольный момент време­ ни независимо от состояния и режима работы микроконтроллера. RESET загружает в программный счетчик начальный адрес $000 и вызывается в следующих случаях: при включении питания микроконтроллера или вре­ менном снижении напряжения питания в процессе работы ниже критиче­ ской величины, при поступлении на вход микроконтроллера RESET сиг­ нала низкого уровня длительностью более 50 не, при формировании сиг­ нала RESET сторожевым таймером.

Врегистре микроконтроллера MCUSR биты EXTRF (бит 1), PORF (бит

0)позволяют определить причину начального сброса. EXTRF устанавлива­ ется при начальном сбросе внешним сигналом, PORF устанавливается при

67

сбросе по включению питания. Если эти биты обнулить программной запи­ сью содержимого этого регистра, после следующего начального сброса можно определить источник формирования этого сигнала. Сброс стороже­ вым таймером при чтении определится кодом 00, сброс внешним сигналом - кодом 10, сброс включением питания - кодами 01, 11.

Процедура вызова всех остальных векторов прерывания отличается от RESET. Во-первых, должен быть установлен флаг общего разрешения пре­ рываний I в регистре SREG и бит разрешения данного прерывания в соот­ ветствующем регистре. Во-вторых, установка определенного флага преры­ вания вызывает соответствующий вектор прерывания (только при выпол­ нении первого условия). При одновременном формировании нескольких флагов прерываний очередность обработки определяется уровнями при­ оритетов (чем меньше адрес вектора, тем выше уровень приоритета). В- третьих, при загрузке адреса прерывания в программный счетчик автома­ тически очищаются флаг I, запрещая другие прерывания, и флаг данного прерывания, а текущее состояние программного счетчика загружается в стек. Подпрограмма обработки прерывания должна завершаться командой "reti", которая восстанавливает разрешение прерываний (флаг I) и состоя­ ние программного счетчика (загружается из стека). Возможен програм­ мный сброс флага прерывания (без вызова вектора прерывания) записью единицы в соответствующий бит регистра флагов прерываний, а также программное разрешение прерываний (флаг I) в любой подпрограмме об­ работки прерываний.

Регистр состояния микроконтроллера SREG, как и остальные регистры управления, находится в файле регистров ввода-вывода. Кроме флага об­ щего разрешения прерываний, регистр SREG содержит флаги - стандарт­ ные признаки результатов преобразования данных, необходимые для вы­ полнения ряда команд в рабочих программах микроконтроллера. Содержа­ ние регистра может измениться в процессах обработки прерываний, необ­ ходимо в подпрограммах обработки прерываний предусмотреть сохране­ ние содержимого этого регистра в стеке с восстановлением перед выходом из подпрограммы.

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

| I | T ! H | S | V | N | Z | C |

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

Т- бит копирования, используется для временного хранения отдельных битов командами BLD, BST.

68

Н- флаг полупереноса, формируется в некоторых арифметических опера­ циях как результат переноса между младшей тетрадой и старшей тет­

радой в байте.

S - флаг знака, его значение определяется суммой по mod 2 флагов N ® V. V - флаг дополнения до двух.

N - флаг отрицательного результата арифметических или логических опе­ раций.

Z - флаг нулевого результата арифметических или логических операций. С - флаг переноса в арифметических или логических операциях.

Регистр - указатель стека имеет размер 2 байта и состоит из двух реги­ стров SPL, SPH файла регистров ввода-вывода. При инициализации необ­ ходимо всегда определять адрес вершины стека. Рекомендуется задавать максимальный физический адрес ОЗУ с символическим именем RAMEND, тогда объем стека будет определяться физическим объемом ОЗУ. Стек все­ гда используется при вызове векторов прерываний для сохранения текуще­ го состояния программного счетчика.

Сигналы внешних прерываний INTO (альтернативная функция линии PD2) и INT1 (альтернативная функция линии PD3) обрабатываются с помощью регистров GIFR, GIMSK и общего регистра управления MCUCR файла регистров ввода-вывода. В регистре GIMSK биты INT1 (бит 7) и INTO (бит 6) определяют разрешение внешних прерываний, а в регистре GIFR флаги INTF1 (бит 7) и INTFO (бит 6) обеспечивают вызов векторов внешних прерываний по процедурам, аналогичным обработке других векторов прерываний.

Параметры сигналов, формирующие флаги внешних прерываний, опре­ деляются битами ISC01, ISC00 и ISCll, ISC10 регистра MCUCR. Осталь­ ные биты этого регистра определяют параметры режима sleep, в этом ре­ жиме приостанавливается работа основных устройств микроконтроллера для снижения энергопотребления и уровня помех.

Символические имена битов управления в регистре MCUCR

1 - 1 SE | SMI | SMO | ISCll | ISC10 \ ISC01 I ISCOO I

SE - бит разрешения режима sleep; если бит установлен, микроконтроллер программно переводится в режим sleep командой "sleep".

SMI и SMO определяют вид режима sleep: 00 - режим idle,

01 - не используется,

10 - режим power-down,

11 - режим power save.

Младшие 4 бита определяют параметры сигналов внешних прерываний для формирования флагов INTF1, INTF0. Биты попарно управляют обработкой

69

Источник: https://studfile.net/preview/16521245/