Микроконтроллеры для систем автоматики - часть 13

 

  Главная      Учебники - Производство     

 

поиск по сайту           правообладателям

 

 

 

 

 

 

 

 

 

содержание   ..  11  12  13  14   ..

 

 

Микроконтроллеры для систем автоматики - часть 13

 

 

 

51 

º 

Бит 3 – WDRF (Watchdog Reset Flag) – флаг  сторожевого  таймера.  Бит 
устанавливается  при  сбросе  процессорного  ядра  сторожевым  таймером, 
сбрасывается при включении питания или путем записи логического нуля. 

º 

Бит 2 – BORF (Brown-out Reset Flag) – флаг  сброса  при  кратковременном 
провале  питания.  Бит  устанавливается  при  сбросе  от  кратковременного 
провала  напряжения  питания,  сбрасывается  при  включении  питания  или 
путем записи логического нуля. 

º 

Бит  1 – EXTRF (External Reset Flag) – флаг  внешнего  сброса.  Флаг 
устанавливается  при  сбросе  от  внешнего  источника,  сбрасывается  при 
включении питания или путем записи логического нуля. 

º 

Бит 0 – PORF (Power-on Reset Flag) – флаг сброса при включении питания. 
Бит  устанавливается  при  включения  питания,  сбрасывается  только  путем 
записи логического нуля. 

Флажки  сброса  используются  для  определения  причины  сброса.  Если  регистр 

очищен программно до момента сброса, то источник сброса может быть найден чтением 
регистра целиком или его отдельных флажков. 

6.2. Сторожевой таймер 

Сторожевой  таймер  (Watchdog)  синхронизирован  от  отдельного  внутреннего 

генератора на кристалле, работающего с частотой 1 МГц (при напряжении питания Vcc=5 
В).  

Задержка сброса устанавливается с помощью предделителя (Prescaler). Настройка 

предделителя  осуществляется  установкой  или  сбросом  битов WDP0….WDP2 регистра 
управления  сторожевым  таймером WDTCR (WDT Control Register).  По  истечении 
установленного  времени  задержки  сторожевой  таймер  подает  сигнал  сброса  на 
микроконтроллер.  

Таблица. 6.2.  

Интервалы задержки сторожевого таймера микроконтроллера ATmega163 

WDP2 WDP1 WDP0 Количество циклов 

Задержка сброса  

0 0 0 

16K 

15 ms 

0 0 1 32K 

30 

ms 

1 0 

64K 

60 

ms 

128K 0.12 s 

1 0 0 

256K 

0.24 

1 0 1 

512K 0.49 

1 0 

1,024K 0.97 

1 2,048K 

1.9 s 

Сброс может быть предотвращен инструкцией wdr (

Watchdog Reset). 

 

Бит WDE (Watchdog Enable) в регистре WDTCR (рис. 6.3) позволяет подключать или 

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

 

52 

 

 

Биты 7 6 

5  4  3  2  1 0 

WDTCR   $21 ($41) 

WDTOE  WDE  WDP2  WDP1  WDP0 

Рис. 6.3. Регистр управления сторожевым таймером WDTCR 

º 

Бит 4 – WDTOE (Watchdog Turn-off Enable) - разрешение  отключения 
сторожевого  таймера.  Бит  должен  быть  установлен  в  состояние  1  при 
очистке  бита WDE. В  ином  случае  сторожевой  таймер  не  будет  запрещен. 
Установленный бит аппаратно очищается после четырех тактовых циклов. 

 

º 

Бит 3 – WDE (Watchdog Enable): разрешение сторожевого таймера. Если бит 
WDE  установлен  в  состояние  1  (сторожевой  таймер  разрешен)  и  если  бит 
WDE  очищен,  то  функционирование  сторожевого  таймера  запрещено.  Бит 
WDE может быть очищен, только если до этого установлен бит WDTOE. Для 
запрещения  разрешенного  сторожевого  таймера  необходимо  выполнить 
следующую процедуру: 

В  одной  операции  записать  1  в  биты WDTOE и WDE. Логическая  1 
должна  быть  записана  в WDE, даже  если  этот  бит  был  установлен 
перед началом операции запрета сторожевого таймера.  

За время последующих четырех тактовых циклов записать 0 в WDE.  

º 

Биты 2..0 - WDP2, WDP1, WDP0 (Watch Dog Timer Prescaler 2, 1 and 0) - биты 
установки  коэффициента  предварительного  деления  сторожевого  таймера. 
Состояния  битов WDP2, WDP1  и WDP0 определяют  коэффициент 
предварительного  деления  тактовой  частоты  разрешенного  сторожевого 
таймера.  Коэффициенты  и  соответствующие  им  промежутки  времени 
представлены в таблице 6.2. 

7. СИСТЕМА ПРЕРЫВАНИЙ 

7.1. Алгоритм обработки прерываний 

Сигнал запроса на прерывание вырабатывается периферийным устройством при 

его готовности к обмену информацией. Сигнал может появиться в произвольный момент 
времени.  

Процессорное  ядро  может  реагировать  на  запросы  прерываний  по-разному.  В 

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

º 

при поступлении запроса на прерывание завершается выполнение текущей 
инструкции программы; 

º 

записывается  в  стек  содержимое  программного  счетчика  и  текущее 
состояние некоторых наиболее важных регистров общего назначения;  

º 

идентифицируется прерывающее устройство; 

º 

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

º 

по  окончании  подпрограммы  восстанавливает  состояние  прерванной 
программы  за  счет  извлечения  из  стека  содержимого  регистров  общего 
назначения и программного счетчика; 

º 

возобновляется выполнение прерванной программы. 

 

53 

В различных системах обработки прерывания отдельные перечисленные действия 

реализуются аппаратно или программно.  

Пользователю  системы  всегда  предоставляется  возможность  отключить 

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

При  большом  количестве  источников  прерываний  порядок  их  обслуживания 

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

Наиболее  простым  является  фиксированное  распределение  приоритетов.  При 

этом  каждому  из  источников  запросов  присваивается  постоянный  приоритет, 
соответствующий его порядковому номеру в схеме.  

Циклическое  распределение  приоритетов  (очередь)  используется  в  тех  случаях, 

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

7.2. Вектора прерываний 

Идентификация  источника  прерывания  в  системе  может  выполняться  как 

программными, так и аппаратными средствами. 

В  первом  случае,  источник  прерывания  фиксируется  установкой  флажка  в  каком 

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

Во  втором  случае  каждому  источнику  прерываний  ставится  в  соответствие 

определенный  адрес  программы  (вектор  прерывания)  и  по  этому  адресу  программист 
размещает  команду  перехода  к  соответствующей  этому  источнику  подпрограмме 
обработки прерывания. 

Например,  контроллер  ATmega163  имеет  17  различных  источников  прерывания: 

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

Вектора прерываний занимают в пространстве памяти программы адреса с $0 до 

$22.  Самый  младший  вектор  прерываний  (с  адресом $0) определен  как  сигнал  сброса. 
Адрес  каждого  последующего  вектора  больше  предыдущего  на 2. Адреса $2 и $4 
присвоены внешним входам запросов на прерывания (Таблица 7.1). 

Таблица 7.1.  

Вектора внешних прерываний контроллера ATmega 163 

Вектор  Адрес 

Обозначение 

источника 

Описание источника 

1 $000 

RESET 

Сброс (External Pin, Power-on Reset, Brown-out 
Reset and Watchdog Reset

 

54 

Вектор  Адрес 

Обозначение 

источника 

Описание источника 

2 $002 

INT0 

Внешнее прерывание 0 (External Interrupt 0) 

3 $004 

INT1 

Внешнее прерывание 1 (External Interrupt 1

Полный  список  векторов  приведен  в  приложении 2. Приоритет  прерываний 

уменьшается  с  возрастанием  адресов  их  векторов.  Сигнал  сброса  (Reset)  имеет  самый 
высокий приоритет. Далее следуют прерывания от внешних источников, поступающие на 
контакты INT 0 и INT1 микроконтроллера. 

Любое прерывание может быть запрещено (замаскировано) специальными битами 

в регистрах ввода/вывода микроконтроллера. 

Типовая  программа  обработки  векторов  внешних  прерываний  выглядит 

следующим образом: 

.cseg 
.org $0 
jmp RESET  ; Переход к подпрограмме сброса 
jmp EXT_INT0  

; Переход к подпрограмме обработки IRQ0 

jmp EXT_INT1  

; Переход к подпрограмме обработки IRQ1 

… 
.org $24 
main:  

Начало программы пользователя 

Для  выхода  из  любой  подпрограммы  обработки  прерывания  в  системе  команд 

микроконтроллера  ATmega163 предусмотрена специальная команда reti (Interrupt Return

), 

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

Внешние  прерывания  вызываются  с  контактов INT1  и INT0. Для  их  обработки  и 

программирования в контроллере задействованы отдельные биты трех регистров:  

º 

регистра статуса SREG (Status Register),  

º 

регистра управления процессорным ядром MCUCR (MCU Control Register)  и  

º 

регистра  маски  прерываний GIMSK (General  Interrupt Mask register)  (рис. 
7.1). 

 

  Биты 7 6 5 

4 3 2 1 0 

SREG $3F ($5F) 

 

 

 

 

 

 

 

MCUCR $35 ($55) 

 

 

 

 ISC11 ISC10 ISC01 ISC00 

GIMSK $3B ($5B)  INT1 INT0 

   

 

 

 

 

 

Рис. 7.1. Регистры, задействованные в системе прерываний микроконтроллера 

ATmega163 

Прерывания  разрешаются  только  при  единичном  значении  бита  глобального 

разрешения  прерываний I (Interrupt)  в  регистре  статуса SREG. Сброс  бита I в  регистре 
SREG запрещает все прерывания. Если прерывания разрешены, то при появлении любого 
запроса  бит I в  регистре  статуса SREG сбрасывается,  а  все  дальнейшие  прерывания 

 

 

 

 

 

 

 

содержание   ..  11  12  13  14   ..