Кроме регистров 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