Модуль прерывания

 

 

PIC12F675 имеет 7 источников прерываний:

--Внешнее прерывание (INT)

--Переполнение TMR0

--Изменение уровня сигнала на входах GPIO

--Прерывание от компаратора

--Прерывание от модуля АЦП

--Переполнение TMR1

--Завершение цикла записи в постоянную память данных

Для организации прерывания в данном микроконтроллере используется три регистра специального назначения:

1)INTCON – содержит биты:

а)GIE –разрешение работы модуля прерывания (0 – прерывания запрещены).

б)PEIE – бит разрешения прерывания от дополнительных модулей.

в)Биты разрешения прерывания и флаги прерывания от основных модулей МК Microchip

биты флаги описание
T0IE I0IF по переполнению таймера TMR0
INTE INTF по внешнему прерыванию INT
GPIE GPIF изменение уровня на портах GPIO

 

2)РIЕ1 и PIR1 для организации работы прерывания от дополнительных модулей МК. Первый содержит биты разрешения прерывания оставшихся периферийных модулей, второй – флаги события. В случае, если МК имеет содержит большое количество периферийных модулей, имеющие возможность организации прерывания, в структуре присутствуют дополнительные регистры PIE2, PIR2 и т.д.

Переход на подпрограмму возможен в случае, если установлен в 1 глобальный бит разрешения прерывания. При этом при переходе на подпрограмму обработки прерывания данный бит аппаратно сбрасывается, тем самым запрещая дополнительные прерывания. Одновременно с этим содержимое счетчика команд загружается в стек, а в сам счетчик команд из него загружается адрес вектора прерывания 004 (от любого источника). При разрешенного прерывания от нескольких источников, непосредственно источник прерывания определяется проверкой флага события, который устанавливается аппаратно при возникновения соответствующего события. По завершению обработки прерывания флаг события должен быть сброшен программным путем для избегания дальнейшего повторного вызова.

 

Прерывание по INT

При разрешении соответственного прерывания программным путем устанавливается фронт события (передний/задний, регистр OPTIONREG). Флаг устанавливается по соответствующему указанному фронту. Когда активный фронт сигнала появляется на входе INT, бит INTF устанавливается в 1. Запрет соответствующего прерывания осуществляется сбросом бита INTE, который может вывести МК из режима энергосбережения.

 

Прерывание по изменению уровнях на портах GPIO

Осуществляется путем сравнивания состояния порта в каждом машинном цикле. При несоответствии содержимого предыдущему, осуществляется проверка регистра IOCB (маска). Если прерывания разрешены, то аппаратно генерируется бит GPIF. Данное прерывание может вывести МК из режима sleep.

 

Прерывание по переполнению таймеров TMR0,1

Соответствующий флаг события устанавливается в 1 при переходе значения буферного регистра из состояния «все F» во «все 0». В режиме sleep таймер TMR0 не работает, TMR1 может вывести МК из этого режима.

 

Прерывание от компаратора

Происходит при изменении выходного состояния встроенного компаратора, путем установки в 1 флага CMIF. Работа компаратора не связана с системной тактовой частотой, работа возможна в режиме sleep.

 

Прерывание от модуля АЦП

Модуль АЦП генерирует прерывание по завершению цикла преобразования уровня аналогового значения напряжения в цифровой код (13-15 тактов). По завершению цикла преобразования осуществляется установка в 1 бита ADIF.

 

Прерывание от модуля постоянной памяти данных.

Флаг события устанавливается в 1 по завершению цикла записи байта данных в EEPROM память. Используется для проверки сохраненных данных и загрузки следующих операндов.

 

Работа с модулем прерывания

При возникновения разрешенного прерывания в стек происходит аппаратная загрузка содержимого счетчика команд, т.е. адреса возврата. Учитывая, что в основной программе и подпрограммах прерывания используется ряд одних и тех же регистров, то содержимое этих регистров необходимо сохранять программным путем. Из чего следует последовательность программа обработки прерывания:

1)проверка источника прерывания по выставленному флагу в регистре управления прерывания

2)сохранение содержимого аккумулятора в дополнительный резервный регистр, независимо от текущего банка памяти.

3)сохранение регистра признака STATUS в дополнительном регистре

4)выполнение основного модуля подпрограммы обработки прерывания

5)восстановления регистра STATUS.

6)восстановление аккумулятора.

7)сброс флага, вызвавшего прерывание.

8)разрешение глобального прерывания.

9)выход из подпрограммы.

Для организации системы прерывания используются следующие регистры:

--INTCON

--PIE1

--PIR1

--IOCB

 

Модуль таймера TMR0

 

 

Структурная схема дополнительно связана с модулем сторожевого таймера. Основные характеристики:

--8-разрядный таймер/счетчик

--Возможность чтения и записи текущего значения счетчика

--8-разрядный программируемый предделитель, который работает в 2-х режимах: режим счетчика (от внешнего сигнала линии) и режим таймера (от внутреннего сигнала). Модуль является синхронным, т.к. счет зависит от синхронизации системной тактовой частоты. Максимальная частота счета – системная тактовая частота/4.

--возможность выбора активного фронта внешнего тактового сигнала

--Прерывания при переполнении (переход от FFh к 00h)

Для организации работы модуля таймера используются разряды регистра OPTIONREG.

Режим таймера: приращение содержимого буферного регистра происходит в каждом машинном цикле выполнения команды.

Режим счетчика: работа осуществляется от внешнего сигнала со входа C0CKI. Выбор активного фронта осуществляется битом T0SE. Прерывание от модуля TMR0 происходит при переходе значения от FF к 00. При возникновения прерывания устанавливается флаг события. По завершении обработки прерывания данный флаг должен быть сброшен программно. В режиме sleep модуль не работает (нет синхронизации с системной тактовой частотой) и не может генерировать прерывания.

Модуль содержит дополнительный 8-разрядный счетчик, который работает как предделитель. Коэффициенты предделителя определяются битами PS0..2 и может составлять от 1/1 до 1/256. Предделитель может подключаться как к модулю таймера TMR0, так и к сторожевому таймеру через управляющий сигнал PSA. Если предделитель включен в режим работы таймера TMR0, любые команды записи/сброса таймера осуществляются обнулением предделителя. Буфер данного счетчика является программно недоступным для чтения/записи.

Работу таймера организуют следующие регистры:

--OPTIONREG – регистр управления

--TMR0 – буфер модуля

--INTCON – организация прерывания от модуля

--TRISIO – определение направления порта в режиме счетчика.

 

 

Модуль таймера TMR1

 

Основные характеристики модуля:

--16-разрядный коэффициент счета, доступного к чтению/записи.

--2 режима работы: счетчика (асинхронный и синхронный режим) и таймера.

--Возможность работы в режиме sleep

--Выбор источника тактового сигнала (внешний или внутренний)

--Генерация прерываний по переполнению от FFFFh к 0000h

--Выход из режима SLEEP при переполнении (асинхронный режим)

--Вход внешнего включения таймера -T1G (опционально)

Работой таймера управляет регистр специального назначения T1CON, который содержит следующие биты?

--бит разрешения аппаратного включения таймера по линии T1G - TMR1CE

--определение коэффициента предделителя – T1CKPS1,0

--определяет режим тактового генератора – T1OSCEN

--определяет режим синхронизации и таймера – T1SYNH

--выбор режима модуля (счетчик/таймер) – TMR1SC

--бит включения модуля – TMR1ON

В качестве буферного элемента модуля используются 2 8-разрядных регистра с автоматическим переносом между разрядами: TMR1H и TMR1L.

Работа таймера. Данный таймер может работать в 1 из 3 режимах:16-разрядный таймер, 16-разрядный синхронный/асинхронный счетчик

Включение работы модуля независимо от режима возможно внешним сигналом T1G. Если процессорное ядро МК работает от собственного генератора, то внешние линии OSC1,2 могут быть использованы для подключения внешнего генератора модуля TMR1 (LP режим). В этом режиме модуль работает как асинхронный счетчик. Счет таймера выполняется в спаренных регистрах TMR1H,L, инкрементирует значения от 0000 до FFFF.Далее происходит сброс счетчика с формированием бита события (флаг переполнения).

Модуль имеет в своем составе дополнительный счетчик-предделитель с программно выбираемыми коэффициентами деления от 0 до 8. Данный предделитель недоступен для чтения/записи и сбрасывается аппаратно при доступе к регистрам TMR1H/TMR1L.

Если бит синхронизации T1SYNH сброшен, внешний тактовый сигнал не синхронизируется с внутренним, т.е. с тактовым сигналом МК. В этом режиме таймер работает в режиме sleep. При этом флаг события при разрешенном прерывании выводит МК из sleep.

Чтение буферных регистров во время счета в асинхронном режиме гарантирует получения текущего значения счетчика, что реализовано аппаратно. Запись в модуль в асинхронном режиме следует выполнять после остановки модуля, иначе влияние на содержимое приводит к непредсказуемому значению в регистре.

В режиме асинхронного счета МК может подсчитывать значения тактовых импульсов с частотой, превышающей системную тактовую. При этом оптимальная частота определяется только скоростью работы внутренних схем.

Для организации работы таймера TMR1 необходимо использовать следующие регистры:

--T1CON – регистр управления

--TMR1H,L – сдвоенный буфер

--INTCON, PIR1, PIE1 – организация прерывания

 

Модуль компаратора

Данный МК содержит в своем составе 1 аналоговый компаратор, входы которого мультиплексированы с портами GP0, GP1, а выход может подключаться к линии GP2. Для организации работы используется регистр CMCON, который содержит следующие управляющие биты:

 

CMOUT Выход компаратора
CINV Инверсный выход компаратора
CIS Подключение входов компаратора в режимах мультиплексирования
СМ2-0 Режим работы компаратора В соответствии с линиями CM определяется 8 различных режимов работы компаратора.  

 

В соответствии с линиями СМ определяется 8 режимов работы компаратора:

 

Когда аналоговый сигнал на линии VN+ < VN- на цифровом выходе устанавливается логический 0, при обратном значении – логическая 1. Выход компаратора с помощью соответствующего бита CINV можно инвертировать, тем самым переопределяя линии СN+, СN-.

Ряд режимов предусматривает использование источника опорного напряжения. В этом случае свободные линии работают как цифровые.

Существует режима (6ой и 7ой), при которых внешние порты GP0, GP1 можно коммутировать на инверсный вход с помощью сигнала CIS.

Чаще всего используется либо 1-ый режим, либо 3-ий.

Т.к. аналоговые входы мультиплексированы с цифровыми, то данные линии имеют пару защитных диодов (напряжение питании и«земля»). При этом амплитуда входного сигнала ограничена от -0.6В «земли» до +0.6В питания. Внутреннее сопротивление источника аналогового сигнала должно быть меньше 10КОм. Компоненты, которые подключаются к аналоговым входам, должны иметь минимальные токи утечки.

В любой момент времени состояние компаратора можно прочитать в регистре TMCON. Данный бит является доступным только для чтения.

Выход компаратора может быть подключен к каналу порта ввода/вывода (GP2). При этом канал порта становится не синхронизированным выходом.

Модуль компаратора содержит в своем составе дополнительный внутренний источник опорного напряжения, который может подключаться к одному из входов компаратора. Организует работу источника опорного напряжения специальный регистр VRCON. С помощью данного регистра можно определить 32 различных уровня напряжения по соответствующей формуле, получая опорное напряжение от 0В до 5В. Полный диапазон опорных напряжения этого источника не может быть реализован из-за особенности схемы. Выходные напряжения формируются относительно напряжения питания, поэтому изменяются пропорционально самому напряжению питания.

Если компаратор и источник опорного напряжения включены, то при приходе МК в режим sleep они продолжают свою работу. В случае разрешенного прерывания от компаратора и возникновению события на входе (изменение состояния выхода компаратора) МК выходит из режима sleep. При этом значение регистров управления не изменяется. Флаг прерывания от компаратора устанавливается аппаратно, сброшен должен быть программно.

Для организации работы модуля компаратора используются следующие регистры:

--TMCON – регистр управления

--VRCON – регистр управления источником опорного напряжения

--TRISIO – определяет направление соответствующих портов ввода/вывода (GP0, GP1, GP2).

--INTCON, PIR1, PIE1 – обеспечивают прерывание от компаратора.

 

Работа функциональной схемы осуществляется с помощью регистра управления VRCON, в котором присутствуют следующие разряды:

--VREN (включение модуля)

--VRR (выбор диапазона опорного напряжения)

--VR0-3 (определяет 16 различных уровней опорного напряжения)

 

 

Модуль АЦП

Модуль АЦП преобразует входной аналоговый сигнал в соответствующий 10-разрядный цифровой код. В PIC12F675 четыре аналоговых канала, мультиплексируемые на одну схему выборки и хранения.

Структурная схема модуля АЦП

 

 

Содержит коммутатор мультиплексоров, непосредственно модуль преобразования (ADC), модуль выравнивания результата и буфер.

Работа заключается в следующем: входной аналоговый сигнал с одной из внешних линий через коммутатор заряжает внутренний конденсатор АЦП (Сзар). Далее модуль АЦП преобразует напряжения, удерживаемое на конденсаторе в соответствующий ему 10-разрядный код методом последовательного приближения.

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

--ADFM

--VCFG

--CHS1,0

--GO/DONE

--ADON

В данном МК в качестве аналогового порта могут выступать линии AN0-AN3, выбор которых осуществляется с помощью битов CHS0,1.

С помощью разряда VCFG осуществляется выбор источника опорного напряжения преобразования АЦП. В качестве которого может быть текущее напряжения питания и внешнее напряжение, подаваемое на линии AN1 (в этом случае в качестве аналогового сигнала линия использоваться не может).

Сигнал ADON разрешает работу АЦП. Для инициализации преобразования осуществляется установка в 1 бита GO/DONE программно, который находится в таком состоянии до завершения преобразования. После завершения преобразования данный бит аппаратно сбрасывается в 0, тем самым фиксируя завершение работы АЦП.

10-разрядный результат преобразования сохраняется в спаренном регистре ADRES емкостью 16 разрядов в области регистровой памяти (ADRESH – старший разряд, ADRESL – младший разряд).

В модуле преобразования результат может формироваться с правым и левым выравниванием (определяет бит ADFM). При правом выравнивании 8 младших разрядов записывается в младший буферный регистр, 2 старших хранятся в 0ом и 1ом разряде старшего регистра. При левом выравнивании старшие 8 разрядов хранятся в старшем буферном регистре, младшие разряды хранятся в 7ом и 6ом разрядах младшего буферного регистра. Первый способ используется при необходимости получения полного 10-разрядного результата измерения (в программе используются 16-разрядные операнды). Второй способ используется при достаточной точности преобразования 8 разрядов.

Для организации работы аналогового модуля используется дополнительный регистр ANSEL, который содержит 2 модуля битов:

1)ADCS2..0 – определяет источник тактового сигнала, задающий режим работы АЦП. Время получения одного бита результата определяется параметром «период преобразования одного разряда». Для получения 10-разрядного результат требуется как минимум 11 периодов. Для получения корректного результата преобразования необходимо выбрать источник тактового сигнала АЦП, обеспечивающего время периода преобразования не менее 1 мкс. В качестве источника тактового сигнала может использоваться системная тактовая частота/2, /8, /32, а также собственный отдельный внутренний RC генератор.

2)ANS3..0 – осуществляет настройку выводов как аналоговые входы (0 определяет цифровой канал, 1 – аналоговый). По умолчанию линии находятся в аналоговом состоянии.

Если на модуль АЦП мультиплексируется большее количество портов ввода/вывода, то в блоке регистров присутствуют дополнительные регистры ANSEL0,1 и т.д. В ряде МК регистр ANSEL заменен на регистр ADCON1. В этом случае 0 заменен на аналоговый вход, 1 – цифровой.

Модуль завершения работы преобразования модуля АЦП формирует знак события, который при разрешенном прерывании (общий и от АЦП) может переходить по вектору прерывания.

Модуль АЦП может работать в режиме sleep при условии, что источников импульсов преобразования АЦП является собственный RC генератор (не системная тактовая частота). Если разрешено прерывание от АЦП, то МК выходит из режима энергосбережения. В случае, если был выбран другой источник тактового сигнала АЦП, то выполнение программой инструкции режима sleep прерывает процесс преобразования и выключает модуль АЦП.

Регистры, которые необходимо настраивать при работе с АЦП:

--регистр управления ADCON

--регистр настройки портов ввода/вывода и выбор тактового сигнала ANSEL

--определение направления портов ввода/вывода GPIO/TRISIO

--буферные регистры модуля АЦП ADREL, ADRESH.

--регистры прерывания от АЦП INTCON, PIR1, PIE1.

 

Постоянная память данных (EEPROM память данных)

Представляет собой отдельный периферийный модуль и является энергонезависимой памятью данных, которая доступна для чтения и записи в нормальном режиме работы МК, т.е. при выполнении программы. Содержимое данной памяти не отображается на адресное пространство регистровой памяти данных и памяти программ. Доступ к данным памяти осуществляется через регистры специального назначения косвенным образом.

Для организации доступа к EEPROM памяти данных используются 4 регистра специального назначения:

--EECON1

--EECON2

--EEDATA

--EEADR

Чтение и запись EEPROM памяти выполняется побайтно. В регистре EEDATA сохраняются 8-разрядные данные записи/чтения, а регистр EEADR содержит адрес ячейки EEPROM памяти данных. PIC12F675 содержат 128 байт EEPROM памяти данных (диапазон адресов 00h-7Fh).

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

Регистр EECON2 не реализован физически, читается как 00h. Он используется в операциях записи в EEPROM память данных для реализации обязательной последовательности команд.

Регистр EECON1 организует чтение и запись в соответствующую запись. Содержит следующие биты:

 

WRERR Флаг ошибки (сбойя) записи в EEPROM память данных
WREN Разрешение записи в EEPROM память данных
WR Инициализировать запись в EEPROM память данных
RD Инициализировать чтение из EEPROM памяти данных

 

 

Чтение из EEPROM памяти данных

Для чтения EEPROM памяти данных необходимо записать адрес в регистр EEADR и установить бит RD (EECON1) в 1. В следующем машинном цикле данные доступны для чтения из регистра EEDATA. Прочитанное значение из EEPROM памяти данных будет храниться в регистре EEDATA до следующего чтения или записи в этот регистр по команде микроконтроллера.

 

Запись в EEPROM память данных

Для записи в EEPROM память данных необходимо записать адрес в регистр EEADR, данные в регистр EEDATA и установить бит WR и WREN (EECON1) в 1. Рекомендуется запрещать прерывания при выполнении записи в EEPROM память. Если во время записи произойдет переход по вектору прерывания, запись байта выполнена не будет.

Чтобы разрешить запись в EEPROM память данных, необходимо перед началом записи установить бит WREN в 1, защищающий от случайной записи.

После выполнения операции записи в EEPROM память данных рекомендуется производить контрольное чтение.