Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Режим CTC работы таймеров-счетчиков. Обслуживание внешних и внутренних прерываний. Программирование на языке C с использованием компилятора WinAV

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 24.11.2024

Лабораторная работа №2 (4 часа)

«Режим CTC работы таймеров-счетчиков. Обслуживание внешних и внутренних прерываний. Программирование на языке C с использованием компилятора WinAVR»

Цель работы

  1.  Изучить систему прерываний микроконтроллеров AVR.
  2.  Изучить работу таймеров в режиме CTC.
  3.  Изучить приемы программирования микроконтроллеров AVR на языке C.

Порядок выполнения работы

1. Изучить теоретический материал.

2. Изучить цикл программирования микроконтроллеров с использованием компилятора WinAVR на примере реализации циклического переключения светодиодов с фиксированной скоростью. Для этого:

1) В программе ProgrammersNotepad создать файл с исходным кодом (согласно п. 3 раздела «Теоретические сведения»).

Исходный код программы для реализации циклического переключения светодиодов с фиксированной скоростью.

 

#include <avr/io.h>

#include <avr/interrupt.h>

#include <avr/signal.h>

unsigned int d;

INTERRUPT(SIG_OVERFLOW1)

{

 if((d&0x80)==0x80){d<<=1;d++;}else{d<<=1;};

 PORTB=d;

}

int main(void)

{

 d=254;

 DDRB=255;

 PORTB=d;

 TCCR1B=0b00000011;

 TIMSK=0b00000100;

 sei();

 while(1){}

}

2) Создать makefile. Установить в нем следующие значения параметров:

  Main file name – имя файла с исходным кодом;

  MCU type – atmega128;

  F_CPU = 4000000.

3) Откомпилировать исходный код. В результате должен получиться файл с расширением .hex для прошивки микроконтроллера.

4) Прошить микроконтроллер и убедиться, что программа работает корректно.

2. Самостоятельно реализовать на индикаторной матрице контроллера включение светодиодов по заданному алгоритму:

  •  произвести последовательное циклическое включение светодиодов "бегущий огонь". Использовать первый таймер в качестве формирователя времени свечения светодиодов индикаторной матрицы контроллера;
  •  использовать кнопки стенда для переключения скорости «бегущего огня». Кнопки подключены к входам INT0…INT3 внешних прерываний микроконтроллера.

Для выполнения задания использовать режим работы таймера «Сброс при совпадении».

Теоретические сведения

1. Прерывания в ATMega128

1.1. Общие сведения

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

1.2. Таблица векторов прерываний

Микроконтроллеры AVR семейства Mega имеют многоуровневую систему приоритетных прерываний. Младшие адреса памяти программ, начиная с адреса $0002, отведены под таблицу векторов прерывания. Каждому прерыванию соответствует адрес в этой таблице, который загружается в счетчик команд при возникновении прерывания. Положение вектора в таблице также определяет и приоритет соответствующего прерывания: чем меньше адрес, тем выше приоритет прерывания. Размер вектора прерывания составляет 2 байта. Соответственно, для перехода к подпрограммам обработки прерываний используются команды JMP.

Положение таблицы векторов прерываний может быть изменено. Таблица может располагаться не только в начале памяти программ, но также и в начале области загрузчика, причем перемещение таблицы может быть осуществлено непосредственно в ходе выполнения программы. Для управления размещением таблицы прерываний используется регистр управления микроконтроллера MCUCR, расположенный по адресу $35 ($55).

Распределение адресов таблицы векторов прерываний для микроконтроллера ATmega128 приведено в Табл. 1.1. При размещении векторов прерываний в области загрузчика к значениям, указанным в таблице, следует прибавить значение начального адреса области загрузчика.

Таблица 1.1. Таблица векторов прерываний ATmega128

Источник

Описание

M103C=1

M103C=0

Адрес

Адрес

INT0

Внешнее прерывание 0

1

$0002

1

$0002

INT1

Внешнее прерывание 1

2

$0004

2

$0004

INT2

Внешнее прерывание 2

3

$0006

3

$0006

INT3

Внешнее прерывание 3

4

$0008

4

$0008

INT4

Внешнее прерывание 4

5

$000A

5

$000A

INT5

Внешнее прерывание 5

6

$000C

6

$000C

INT6

Внешнее прерывание 6

7

$000E

7

$000E

INT7

Внешнее прерывание 7

8

$0010

8

$0010

TIMER2COMP

Совпадение таймера/счетчика Т2

9

$0012

9

$0012

TIMER2 0VF

Переполнение таймера/счетчика Т2

10

$0014

10

$0014

TIMER1 САРТ

Захват таймера/счетчика Т1

11

$0016

11

$0016

TIMER1 СОМРА

Совпадение А таймера/счетчика Т1

12

$0018

12

$0018

TIMER1 СОМРВ

Совпадение В таймера/счетчика Т1

13

$001A

13

$001A

TIMER1 OVF

Переполнение таймера/счетчика Т1

14

$001C

14

$001C

TIMER0COMP

Совпадение таймера/счетчика ТО

15

$001E

15

$001E

TIMER0OVF

Переполнение таймера/счетчика ТО

16

$0020

16

$0020

SPI, STC

Передача по SPI завершена

17

$0022

17

$0022

USARTO, RX

USARTO, прием завершен

18

$0024

18

$0024

USARTO, UDRE

Регистр данных USARTO пуст

19

$0026

19

$0026

USARTO, TX

USARTO, передача завершена

20

$0028

20

$0028

ADC

Преобразование АЦП завершено

21

$002A

21

$002A

EE_RDY

EEPROM готово

22

$002C

22

$002C

ANA_COMP

Аналоговый компаратор

23

$002E

23

$002E

TIMER1 СОМРС

Совпадение С таймера/счетчика Т1

24

$0030

-

-

TIMER3CAPT

Захват таймера/счетчика ТЗ

25

$0032

-

-

TIMER3 СОМРА

Совпадение А таймера/счетчика ТЗ

26

$0034

-

-

TIMER3 СОМРВ

Совпадение В таймера/счетчика ТЗ

27

$0036

-

-

TIMER3 СОМРС

Совпадение С таймера/счетчика ТЗ

28

$0038

-

-

TIMER3 OVF

Переполнение таймера/счетчика ТЗ

29

$003A

-

-

USART1,RX

USART1, прием завершен

30

$003C

-

-

USART1,UDRE

Регистр данных USART1 пуст

31

$003E

-

-

USART1,TX

USART1, передача завершена

32

$0040

-

-

TWI

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

33

$0042

-

-

SPM_RDY

Готовность SPM

34

$0044

-

-

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

1.3. Обработка прерываний

Для глобального разрешения/запрещения прерываний предназначен флаг I регистра SREG. Для разрешения прерываний он должен быть установлен в 1, а для запрещения — сброшен в 0. Индивидуальное разрешение или запрещение (маскирование) прерываний производится установкой/сбросом соответствующих битов регистров масок прерываний, рассматриваемых ниже.

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

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

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

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

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

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

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

1.4. Внешние прерывания

В микроконтроллерах семейства Mega имеется две разновидности внешних прерываний. Прерывания первого типа генерируются при появлении на входе внешнего прерывания заданного сигнала. Прерывания второго типа генерируются при любом изменении состояния определенных выводов микроконтроллера.

Для разрешения/запрещения внешних прерываний используется регистр маскирования внешних прерываний EIMSK.

Для индикации наступления внешних прерываний используется регистр флагов внешних прерываний EIFR.

Рис.1.1. Формат регистра EIMSK

Рис.1.2 Формат регистра EIFR

Прерывания INT0...INT7 могут быть сгенерированы по нарастающему/спадающему фронту сигнала или при появлении НИЗКОГО уровня на входе.

Условия генерации прерываний INT0...INT3 определяются состоянием определенных битов регистра EICRA. Условия генерации прерываний INT7...INT4 определяются регистром EICRB.

а)

б)

Рис.1.3. Формат регистров EICRA (а) и EICRB (б)

Таблица 1.2. Определение условий генерации внешних прерываний

ISCn1

ISCn0

Условие

0

0

По НИЗКОМУ уровню на выводе INTn

0

1

Зарезервировано

1

0

По спадающему фронту сигнала на выводе INTn

1

1

По нарастающему фронту сигнала на  выводе INTn 

Таблица 1.3. Альтернативные функции выводов портов микроконтроллера

Вывод порта

Функция

Описание

PD0

INT0

Вход внешнего прерывания 0

PD1

INT1

Вход внешнего прерывания 1

PD2

INT2

Вход внешнего прерывания 2

PD3

INT3

Вход внешнего прерывания 3

PE4

INT4

Вход внешнего прерывания 4

PE5

INT5

Вход внешнего прерывания 5

PE6

INT6

Вход внешнего прерывания 6

PE7

INT7

Вход внешнего прерывания 7

2. Шестнадцатибитные таймеры/счетчики

В модели ATmega128 имеется два 16-битных таймера/счетчика — Т1 и ТЗ. Как и 8-битные таймеры/счетчики Т0 и Т2, они могут использоваться для формирования временных интервалов, для подсчета числа внешних событий, формирования сигналов и генерации сигналов с ШИМ. В дополнение к этому 16-битные таймеры/счетчики могут по внешнему сигналу сохранять свое текущее состояние в отдельном регистре ввода/вывода.  16-битные таймеры/счетчики имеют по три блока сравнения.

В состав каждого таймера/счетчика входят следующие регистры ввода/вывода:

• 16-битный счетный регистр TCNTn;

• 16-битный регистр захвата ICRn;

• три 16-битных регистра сравнения OCRnA, OCRnB, OCRnC;

• три 8-битных регистра управления TCCRnA, ТССRnВ, TCCRnC.

Каждый из 16-битных регистров физически размещается в двух регистрах ввода/вывода, названия которых получаются добавлением к названию регистра буквы «Н» (старший байт) и «L» (младший байт). Счетный  регистр таймера/счетчика T1 TCNT1, например, размещается в регистрах TCNT1H:TCNT1L. Таймеры/счетчики Т1 и ТЗ могут генерировать прерывание при наступлении следующих событий:

• переполнение счетного регистра;

• равенство счетного регистра и регистра сравнения (по одному  прерыванию на каждый блок сравнения);

• сохранение счетного регистра в регистре захвата.

Флаги всех прерываний 16-битных таймеров/счетчиков находятся в регистрах флагов TIFR/ETIFR, а разрешение/запрещение этих прерываний осуществляется установкой/сбросом соответствующих  флагов регистров TIMSK/ETIMSK.

Счетный регистр таймера/счетчика TCNTn входит в состав основного блока модуля — блока реверсивного счетчика. В зависимости от режима работы модуля содержимое счетного регистра сбрасывается, инкрементируется или декрементируется по каждому импульсу тактового сигнала таймера/счетчика clkTn. Регистр доступен в любой момент времени как для чтения, так и для записи. После подачи напряжения питания в регистре TCNTn находится нулевое значение. При некоторых изменениях состояния  таймера/счетчика, определяемых режимом его работы, устанавливается бит ТОVn в соответствующем регистре флагов. Разрешение прерывания  осуществляется установкой в 1 бита ТOIЕn соответствующего регистра маски.

Регистры сравнения OCRnA/OCRnB/OCRnC входят в состав блоков сравнения. Во время работы таймера/счетчика производится непрерывное (в каждом такте) сравнение этих регистров с регистром TCNTn. В случае равенства содержимого регистра сравнения и счетного регистра в  следующем такте устанавливается флаг OCFnA/OCFnB/OCFnC в  соответствующем регистре флагов и генерируется прерывание (если оно разрешено). Также при наступлении этого события может изменяться состояние  вывода ОСnА/ОСnВ/ОСnС микроконтроллера. Чтобы таймер/счетчик мог  управлять состоянием какого-либо из этих выводов, он должен быть сконфигурирован как выходной (соответствующий бит регистра DDRx должен быть установлен в 1).

Регистр захвата ICRn входит в состав блока захвата, назначение  которого — сохранение в определенный момент времени состояния  таймера/счетчика в регистре захвата. Это действие может производиться либо по активному фронту сигнала на выводе IСРn микроконтроллера, либо (для таймера/счетчика Т1) по сигналу от аналогового компаратора. Одновременно с записью в регистр захвата устанавливается флаг ICFn соответствующего регистра флагов и генерируется запрос на прерывание. Разрешение прерывания осуществляется установкой в 1 бита TICIEn регистра маски.

Для управления таймером/счетчиком используются три регистра  управления: TCCRnA, TCCRnB, TCCRnB. Формат этих регистров приведен на рис. 2.1…2.3, а описание их битов — в Табл. 2.1…2.3.

а)

б)

Рис. 2.1. Формат регистров TCCR1A (a), TCCR3A (б)

Таблица 2.1. Биты регистров TCCRnA

Название

Описание

СОМnА1:СОМnА0

Режим работы блока сравнения. Эти биты определяют состояние вывода ОСnх при наступлении события «Совпадение». Влияние содержимого этих битов на состояние вывода зависит от режима работы таймера/счетчика

СОМnВ1:СОМnВ0

СОМnС1:СОМnС0

WGMnl:WGMn0

Режим работы таймера/счетчика. Совместно с битами WGMn3:WGMn2 регистра ТССRnВ определяют режим работы таймера/счетчика Тn (см. Табл. 7.25)

FOCnA

Принудительное изменение состояния вывода ОСnх. При записи в бит FOCnx лог. 1 состояние вывода ОСnх изменяется в соответствии с установками  битов СОМn1х:СОМn0x регистра TCCR/jA. Прерывание при этом не  генерируется и сброс таймера (в режиме СТС) не производится. Эта функция  доступна только в тех режимах, которые не используются для генерации сигнала с ШИМ. При чтении бита всегда возвращается 0

FOCnB

Примечание, n = 1,3; х = А, В или С.

а)

б)

Рис. 2.2. Формат регистров TCCR1B (a), TCCR3B (б).

Таблица 2.2. Биты регистров TCCRnB

Бит

Название

Описание

7

ICNCn

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

6

ICESn

Выбор активного фронта сигнала захвата. Если бит \CESn сброшен в 0,  сохранение счетного регистра в регистре захвата осуществляется по  спадающему фронту сигнала. Если бит установлен в 1, то сохранение счетного регистра в регистре захвата осуществляется по нарастающему фронту  сигнала. Одновременно с сохранением счетного регистра устанавливается также флаг прерывания ICF/i регистра флагов

5

-

Не используется, читается как 0

4,3

WGMn3:WGMn2

Режим работы таймера/счетчика. Совместно с битами WG Мn1:WGМnО регистра TCCRnA определяют режим работы таймера/счетчика In (Табл. 7.25)

2-0

CSn2...CSn0

Управление тактовым сигналом. Эти биты определяют источник  тактового сигнала микроконтроллера (см. подраздел 7.6.2)

а)

б)

Рис. 2.3. Формат регистров TCCR1C (а), TCCR3C (б)

Таблица 2.3. Биты регистров TCCRnС

Бит

Название

Описание

7

FOCnA

Принудительное изменение состояния вывода ОСnх. При записи в бит ОСnх1 лог. 1 состояние вывода ОСnх изменяется в соответствии с установками битов СОМn1х СОМn0х регистра TCCRnA Прерывание при этом не генерируется и сброс таймера (в режиме СТС) не производится. Эта функция доступна только в тех режимах, которые не используются для генерации сигнала с ШИМ При чтении бита всегда возвращается 0

6

FOCnB

5

FOCnC

4..0

-

Не используются, читаются как 0

Примечание, п = 1, 3, х = А, В или С

2.1. Управление тактовым сигналом

Формирование тактового сигнала 16-битных таймеров/счетчиков clkTn (n = 1,3,) осуществляется блоком предделителя. В качестве тактового сигнала clkTn таймеров/счетчиков Т1 и ТЗ, может использоваться:

• системный тактовый сигнал (clkTn = clkI/0);

• масштабированный системный тактовый сигнал (clkTn = clkI/0/N);

• внешний сигнал, поступающий на вход Т1 (ТЗ) микроконтроллера ( clkTn = clkEXT).

Выбор источника тактового сигнала, а также запуск и остановка  таймеров/счетчиков осуществляются с помощью битов CSn2...CSn0 регистра  управления таймером TCCRnB согласно Табл. 2.4.

Таблица 2.4. Выбор источника тактового сигнала 16-битных таймеров/счетчиков

CSn2

CSn1

CSn0

Источник тактового сигнала

0

0

0

Таймер/счетчик остановлен

0

0

1

clkI/0

0

1

0

clkI/0/8

0

1

1

clkI/0/64

1

0

0

clkI/0/256

1

0

1

clkI/0/1024

1

1

0

Вывод Тn, счет осуществляется по спадающему фронту импульсов

1

1

1

Вывод Тn, счет осуществляется по нарастающему фронту импульсов

Примечание, n = 1,3.

2.2. Режимы работы

Режим работы таймеров/счетчиков Т1 и ТЗ определяется состоянием битов WGMn3:WGMn2 регистра TCCRnB совместно с битами WGMn1:WGMn0 регистра ТССRnА. Зависимость режима работы  таймеров/счетчиков от состояния этих битов показана в Табл. 2.5.

Таблица 2.5. Режимы работы 16-битных таймеров/счетчиков Т1 и ТЗ

WGMn3

WGMn2

WGMn1

WGMn0

Режим работы таймера/счетчика Тn

Модуль счета (TOP)

Обновление регистров OCRnx

Момент установки флага TOVn

0

0

0

0

0

Normal

$FFFF

Немедленно

$FFFF

1

0

0

0

1

Phase correct PWM, 8-битный

$00FF

При TOP

$0000

2

0

0

1

0

Phase correct PWM, 9-битный

$01FF

При TOP

$0000

3

0

0

1

1

Phase correct PWM, 10-битный

$03FF

При TOP

$0000

4

0

1

0

0

CTC (сброс при совпадении)

OCRnA

Немедленно

$FFFF

5

0

1

0

1

Fast PWM, 8-битный

$00FF

При TOP

При TOP

6

0

1

1

0

Fast PWM, 9-битный

$01FF

При TOP

При TOP

7

0

1

1

1

Fast PWM, 10-битный

$03FF

При TOP

При TOP

8

1

0

0

0

Phase and Frequency Correct PWM

ICRn

$0000

$0000

9

1

0

0

1

Phase and Frequency Correct PWM

OCRnA

$0000

$0000

10

1

0

1

0

Phase correct PWM

ICRn

При TOP

$0000

11

1

0

1

1

Phase correct PWM

OCRnA

При TOP

$0000

12

1

1

0

0

CTC (сброс при совпадении)

ICRn

Немедленно

$FFFF

13

1

1

0

1

Зарезервировано

-

-

-

14

1

1

1

0

Fast PWM

ICRn

При TOP

При ТОР

15

1

1

1

1

Fast PWM

OCRnA

При TOP

При ТОР

Примечание, n = 1,3.

Режим СТС (сброс при совпадении)

В этом режиме счетный регистр тоже функционирует как обычный  суммирующий счетчик, инкрементирование которого осуществляется по  каждому импульсу тактового сигнала clkTn. Однако максимально возможное значение счетного регистра и, следовательно, разрешающая способность счетчика определяются либо регистром сравнения блока A OCRnA (WGMn3:0 = 0100), либо регистром захвата ICRn (WGMn3:0 = 1100). После достижения максимального значения счет продолжается со значения $0000. Как и в режиме Normal, флаг прерывания TOVn устанавливается при  изменении значения счетного регистра с $FFFF на $0000. При достижении счетчиком максимального значения устанавливается флаг:

• OCFnA, если модуль счета определяется регистром сравнения OCRnA (WGMn3:0 = 0100);

• ICFn, если модуль счета определяется регистром захвата ICRn (WGMn3:0=1100).

Одновременно с установкой флага может изменяться состояние  вывода ОСnх микроконтроллера. Состояние вывода определяется содержимым битов СОМn:1:СОМn0 регистра TCCRnx, как указано в Табл. 2.6.

Таблица 2.6. Управление выводами OCnA/OCnB/ОСnС в режиме СТС

COMnxl

COMnx0

Описание

0

0

Таймер/счетчик Тn отключен от вывода ОСnx

0

1

Состояние вывода меняется на противоположное

1

0

Вывод сбрасывается в 0

1

1

Вывод устанавливается в 1

Примечание, n = 1,3,4,5; х = А, В или С.

Как и в режиме Normal, состояние выводов ОСnА/ОСnВ/ОСnС при необходимости может быть изменено принудительно, записью лог. 1 в бит FOCnA/FOCnB/FOCnC регистра ТССRnС. Прерывание при этом не генерируется, и сброс счетного  регистра не производится.

2.3. Прерывания от таймеров/счетчиков

В ATmega128 для разрешения/запрещения прерываний от таймеров/счетчиков используется два регистра ввода/вывода: TIMSK и ETIMSK. Точно также в микроконтроллере присутствуют два регистра, содержащие флаги прерываний: TIFR и ETIFR.

Форматы регистров, используемых для разрешения/запрещения прерываний от таймеров/счетчиков, показаны на Рис. 2.4, а описание их битов приведено в Табл. 2.7.

Для разрешения какого-либо прерывания от таймера/счетчика необходимо установить в 1 соответствующий бит регистра TIMSK(ETIMSK) и, разумеется, флаг I регистра SREG.

а)

б)

Рис. 2.4. Формат регистров TIMSK (а) и ETIMSK (б)

Таблица 2.7. Биты регистров TIMSK, ETIMSK

Название бита

Описание

TOIEn

Флаг разрешения прерывания по переполнению таймера/счетчика Tn

OCIEn

Флаг разрешения прерывания по событию «Совпадение» таймера/счетчика Tn

OCIEnA

Флаг разрешения прерывания по событию «Совпадение A» таймера/счетчика Tn

OCIEnB

Флаг разрешения прерывания по событию «Совпадение B» таймера/счетчика Tn

OCIEnC

Флаг разрешения прерывания по событию «Совпадение C» таймера/счетчика Tn

TICIEn

Флаг разрешения прерывания по событию «Захват» таймера/счетчика Tn

Форматы регистров, используемых для индикации наступления прерываний от таймеров/счетчиков, показаны на Рис. 2.5, а описание их битов приведено в Табл. 2.8.

а)

б)

Рис. 2.5. Формат регистров TIFR (а) и ETIFR (б)

Таблица 2.8. Биты регистров TIFR и ETIFR

Название бита

Описание

TOVn

Флаг прерывания по переполнению таймера/счетчика Tn

OCFn

Флаг прерывания по событию «Совпадение» таймера/счетчика Tn

OCFnA

Флаг прерывания по событию «Совпадение A» таймера/счетчика Tn

OCFnB

Флаг прерывания по событию «Совпадение B» таймера/счетчика Tn

OCFnC

Флаг прерывания по событию «Совпадение C» таймера/счетчика Tn

ICFn

Флаг прерывания по событию «Захват» таймера/счетчика Tn

При наступлении какого-либо события соответствующий флаг регистра TIFR/ETIFR устанавливается в 1. При запуске подпрограммы обработки прерывания он аппаратно сбрасывается в 0. Любой флаг может быть также сброшен программно, записью в него лог. 0.

2.4. Предделители таймеров/счетчиков

Блоки предделителей предназначены для формирования тактовых сигналов таймеров/счетчиков clkT0, clkT1, clkT2, clkT3.

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

2.4.1. Управление предделителями

Помимо управления тактовым сигналом таймера/счетчика, все микроконтроллеры семейства позволяют осуществлять сброс предделителей, а отдельные модели позволяют также осуществлять их остановку. Для этого используется регистр специальных функций SFIOR. Формат этого регистра приведен на Рис. 2.6 (биты, не используемые для управления предделителями таймеров/счетчиков, указаны на рисунке как X).

Рис. 2.6. Управление предделителями таймеров/счетчиков — регистр SFIOR

Для сброса предделителей таймеров/счетчиков используются биты PSRx регистра. При записи в эти биты лог. 1 предделители соответствующих таймеров/счетчиков переводятся в исходное состояние. Биты сбрасываются в 0 аппаратно после выполнения операции сброса. Поскольку, как было сказано выше, один предделитель используется несколькими таймерами/счетчиками, сброс предделителя повлияет на все таймеры/счетчики, которые его используют.

Остановка всех предделителей микроконтроллера осуществляется записью лог. 1 в бит TSM регистра SFIOR. Последующий запуск предделителей осуществляется записью в бит TSM лог. 0. Указанная функция может использоваться, в частности, для синхронизации таймеров/счетчиков. После установки бита TSM и битов PSRx соответствующие таймеры/счетчики останавливаются и могут быть проинициализированы требуемыми значениями. После сброса бита TSM биты PSRx аппаратно сбрасываются и все таймеры/счетчики начинают работать одновременно.


3. Программирование микроконтроллеров AVR на языке C с использованием компилятора WinAVR

WinAVR – компилятор, который представляет собой набор инструментальных средств, предназначенных для программирования RISC-микроконтроллеров семейства AVR на языке C.

В комплект поставки WinAVR, помимо непосредственно компилятора, входят программы ProgrammersNotepad и MFile.

3.1. Настойка ProgrammersNotepad

ProgrammersNotepad – это среда для написания программного кода и последующей его компиляции. Внешние средства компиляции и синтаксического анализа активируются через меню Tools (рис. 3.1).

Рис. 3.1. Внешний вид программы ProgrammersNotepad

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

Рис. 3.2. Добавление команды в меню Tools

Для того, чтобы добавить новый элемент в список, необходимо нажать кнопку Add и в диалоговом окне Edit Tool (рис. 3.3.) установить следующие параметры:

Рис. 3.3. Установка параметров для команды

  •  Name – имя средства, которое будет отображено в меню Tools.
  •  Command – исполняемая команда. В данном случае компиляция и сборка программы осуществляются с помощью программы make.exe, расположенной в папке WinAVR\Utils\bin. Параметры компиляции должны находиться в файле makefile, расположенном в той же директории, в которой находится исходный код программы.
  •  Folder – папка, в которой будут располагаться выходные файлы. Параметр %d означается, что выходные файлы будут помещаться в ту же директорию, в которой находится исходный код.
  •  Parameters – параметры, передаваемые при вызове make.exe. Возможны следующие значения данного поля:
  •  all – на выходе генерируются файлы для загрузки в микроконтроллер;
  •  clean – все выходные файлы удаляются;
  •  coffпреобразование файлов из формата ELF в формат AVR COFF для использования в среде AVRStudio 3.x;
  •  extcoff – преобразованиие файлов из формата ELF в расширенный формат AVR COFF для использования в среде AVRStudio 4.x и выше;
  •  program – загрузка HEX-файла в микроконтроллер с помощью специальной программы avrdude.exe, входящей в пакет WinAVR;
  •  filename.c – компиляция файла filename.c в ассемблерный код.
  •  Save – параметр, указывающий какие файлы будут автоматически сохраняться при вызове данного средства.
  •  This tool will modify the current file – это флажок необходимо включить, если вызываемое средство будет изменять текущий файл. Для программы make.exe оставить сброшенным.

3.2. Создание исходного кода

Чтобы создать новый файл с исходным кодом на языке С, необходимо выполнить команду File->New->C/C++. Файл нужно сохранить с расширением .c (расширение обязательно нужно указывать!).

3.3. Компиляция программы

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

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

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

  •  имя файла с исходным кодом;
  •  тип микроконтроллера, для которого будет создаваться прошивка;
  •  частота тактирования микроконтроллера.

Для ввода имени файла с исходным кодом можно воспользоваться командой Makefile-> Main file name и в диалоговом окне ввести имя файла без расширения.

Чтобы указать тип микроконтроллера, нужно выполнить команду Makefile->MCU type и выбрать из списка нужный микроконтроллер.

Частота тактирования задается параметром F_CPU в makefile. Этот параметр надо найти в тексте makefile и установить в нужное значение.

Описание остальных параметров makefile можно найти в документации на WinAVR.

3.4. Особенности программирования на языке C для микроконтроллеров AVR

Ввод/вывод символов с помощью функций getchar() и putchar()

Простейшими функциями для ввода и вывода символов на языке С являются функции getchar() и putchar(). Обе они объявлены в заголовочном файле stdio.h.

Функция getchar() возвращает символ, принятый от приемопередатчика UART/USART, а функция putchar() выводит символ через UART/USART. В компиляторе WinAVR getchar() и putchar() предназначены именно для реализации функций приема/передачи через интерфейс UART/USART.

Директива #include

Синтаксис

#include <имя_файла>

или

#include “имя_файла”

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

Обработка прерываний

В среде WinAVR для обработки прерываний используется предустановленная таблица векторов прерываний, содержащая адреса соответствующих подпрограмм обработки прерываний с заранее определенными именами. Для каждой такой подпрограммы в заголовочном файле avr/signal.h определены два макроса: INTERRUPT() и SIGNAL().

Эти макросы регистрируют и помечают некоторую функцию как обработчик прерывания. Их различие в том, что макрос INTERRUPT() определяет функцию обработчика для случая, когда разрешены вложенные прерывания, а SIGNAL() – для случая, когда вложенные прерывания запрещены. (В общем случае, в AVR-микроконтроллерах вложенные прерывания запрещены. Т.е. при вызове подпрограммы обработки прерывания флаг I регистра SREG аппаратно сбрасывается и восстанавливает вновь при выполнении команды RETI. Использование макроса INTERRUPT() эквивалентно тому, что при написании кода на языке ассемблера подпрограмма обработки прерывания будет начинаться с установки флага I.)

Например, обработчик прерывания по переполнению от первого таймера-счетчика будет выглядеть следующим образом:

#include <avr/io.h>

#include <avr/interrupt.h>

#include <avr/signal.h>

INTERRUPT(SIG_OVERFLOW1)

{

.

.

.

}

 

или

#include <avr/io.h>

#include <avr/interrupt.h>

#include <avr/signal.h>

SIGNAL(SIG_OVERFLOW1)

{

.

.

.

}

Идентификаторы прерываний для микроконтроллера ATmega128 приведены в таблице 3.1.

Таблица 3.1. Таблица идентификаторов прерываний WinAVR для микроконтроллера ATmega128

Источник

Идентификатор WinAVR

Описание

Вектор

INT0

SIG_INTERRUPT0

Внешнее прерывание 0

$0002

INT1

SIG_INTERRUPT1

Внешнее прерывание 1

$0004

INT2

SIG_INTERRUPT2

Внешнее прерывание 2

$0006

INT3

SIG_INTERRUPT3

Внешнее прерывание 3

$0008

INT4

SIG_INTERRUPT4

Внешнее прерывание 4

$000A

INT5

SIG_INTERRUPT5

Внешнее прерывание 5

$000C

INT6

SIG_INTERRUPT6

Внешнее прерывание 6

$000E

INT7

SIG_INTERRUPT7

Внешнее прерывание 7

$0010

TIMER2COMP

SIG_OUTPUT_COMPARE2

Совпадение таймера/счетчика Т2

$0012

TIMER2 0VF

SIG_OVERFLOW2

Переполнение таймера/счетчика Т2

$0014

TIMER1 САРТ

SIG_INPUT_CAPTURE1

Захват таймера/счетчика Т1

$0016

TIMER1 СОМРА

SIG_OUTPUT_COMPARE1A

Совпадение А таймера/счетчика Т1

$0018

TIMER1 СОМРВ

SIG_OUTPUT_COMPARE1B

Совпадение В таймера/счетчика Т1

$001A

TIMER1 OVF

SIG_OVERFLOW1

Переполнение таймера/счетчика Т1

$001C

TIMER0COMP

SIG_OUTPUT_COMPARE0

Совпадение таймера/счетчика ТО

$001E

TIMER0OVF

SIG_OVERFLOW0

Переполнение таймера/счетчика ТО

$0020

SPI, STC

SIG_SPI

Передача по SPI завершена

$0022

USARTO, RX

SIG_USART0_RECV

SIG_UART0_RECV

USARTO, прием завершен

$0024

USARTO, UDRE

SIG_USART0_DATA

SIG_UART0_DATA

Регистр данных USARTO пуст

$0026

USARTO, TX

SIG_USART0_TRANS

SIG_UART0_TRANS

USARTO, передача завершена

$0028

ADC

SIG_ADC

Преобразование АЦП завершено

$002A

EE_RDY

SIG_EEPROM_READY

EEPROM готово

$002C

ANA_COMP

SIG_COMPARATOR

Аналоговый компаратор

$002E

TIMER1 СОМРС

SIG_OUTPUT_COMPARE1C

Совпадение С таймера/счетчика Т1

$0030

TIMER3CAPT

SIG_INPUT_CAPTURE3

Захват таймера/счетчика ТЗ

$0032

TIMER3 СОМРА

SIG_OUTPUT_COMPARE3A

Совпадение А таймера/счетчика ТЗ

$0034

TIMER3 СОМРВ

SIG_OUTPUT_COMPARE3B

Совпадение В таймера/счетчика ТЗ

$0036

TIMER3 СОМРС

SIG_OUTPUT_COMPARE3C

Совпадение С таймера/счетчика ТЗ

$0038

TIMER3 OVF

SIG_ OVERFLOW3

Переполнение таймера/счетчика ТЗ

$003A

USART1,RX

SIG_USART1_RECV

SIG_UART1_RECV

USART1, прием завершен

$003C

USART1,UDRE

SIG_USART1_DATA

SIG_UART1_DATA

Регистр данных USART1 пуст

$003E

USART1,TX

SIG_USART1_TRANS

SIG_UART1_TRANS

USART1, передача завершена

$0040

TWI

SIG_2WIRE_SERIAL

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

$0042

SPM_RDY

SIG_SPM_READY

Готовность SPM

$0044




1. Анализ проблем информационной безопасности в компьютерной сети организации, подключенной к сети Интернтет
2. МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ ДЛЯ ПРАКТИЧЕСКИХ ЗАНЯТИЙ ПО ПСИХИАТРИИ ТЕМА- Расстройства личности для ст
3. повна назва організації; галузева належність; Форма власності; основні види продукції що виробляю
4. Тема- Атмосферное давление
5. Проблема взаимодействия природы и культуры в творчестве Набокова
6. тематике 1. Как записать цифрами число тридцать тысяч одиннадцать
7. 85 Печатается по рекомендации Редакционноиздательского совета Удмуртского государственного университ
8. коммунальное хозяйство
9. на тему ldquo;Основи конституційного права країн Азіїrdquo; Японія довідка складається в письмовій формі за та
10. 1Постановка проблемы Деятельность страховщиков в системе ОМС подвергается сильной критике
11. и. Программмный ~ это следующий по расписанию
12. Несвятые святые и другие рассказы Открыто являясь тем кто ищет Его всем сердцем и скрываясь от т.html
13. Проблема применения моделей устойчивого развития на региональном уровне
14. ТЕМА- ЧЕРГУВАННЯ ФОНЕМ
15.  ЛКК 129 2 Клиент- Снежинская Роза Алексеевна 3
16. реферат дисертації на здобуття наукового ступеня кандидата юридичних наук Київ ~
17. тема Орех8 Соотношение международного публичного права с другими отраслями права
18.  Основные таможенные режимы - Выпуск для внутреннего потребления Экспорт Международный таможенный транзит
19. Статья 25 Конституции Республики Беларусь гласит что государство обеспечивает свободу неприкосновенность и
20. Тема- Энергетический обмен