8-разрядные КМОП RISC микроконтроллеры с внутрисистемно программируемым Flash ПЗУ
8-разрядные КМОП RISC микроконтроллеры с внутрисистемно программируемым Flash ПЗУ
Южно-Уральский государственный университет
Заочный инженерно - экономический факультет
Контрольная (курсовая) работа №3
По Информатике
Выполнил студент- заочник 2го курса
Шифр - ЭПА-04-588
Группа - 247
«____»___________2009г. «____»___________2009г.
Срок предоставления работы по графику Дата отправки работы
№_____________ по журналу «____»___________2009г.
___________________ Хусаинов Р.З.
отметка о зачете работы
Преподаватель
____________________
Подпись преподавателя
«____»_____________2009г.
1. Построить два графика в одной координатной сетке: функция f(x)=Sin(x)+Sin(3x)/3 и F(x)=Sin(x)+Sin(3x)/3+Sin(5x)/5+Sin(7x)/7. Диапазон изменения переменной х Є[0;6.28]. На графике вывести обозначение масштабов переменных, вывести название графика.
Программа:
/* Программа построения графиков функции*/
/* F(x)=Sin(x)+Sin(3x)/3+Sin(5x)/5+Sin(7x)/7*/
/* и f(x)=Sin(x)+Sin(3x)/3*/
#include <conio.h>
#include <graphics.h>
#include <math.h>
void main()
{
/* Инициализация графического режима и переменных*/
int i,a,bf=220,bF=220;
float x,db;
double dx;
int dr=VGA, mode=VGAHI;
initgraph(&dr,&mode,"c:\\TC\\BGI");
/*initgraph (&dr,&mode,"G:\\lang\\tc\\bgi");*/
/* Прорисовка осей*/
setbkcolor(BLACK); setlinestyle(0,0,2);
line (20,220,640,220); /*X*/
moveto (630,218);lineto(640,220);lineto(630,222);lineto(630,218);
line (20,0,20,440); /*Y*/
moveto (20,0);lineto(18,10);lineto(22,10);lineto(20,0);
/*Разметка осей*/
setcolor (WHITE);
for(i=20;i<440;i=i+20)
{outtextxy (20,i-3,"-");}
outtextxy (30,420,"-1");
outtextxy (30,20,"1");
outtextxy (32,2,"Y");
outtextxy (630,205,"X");
/* Название графика*/
setfillstyle (1,GREEN);
bar (50,435,68,445);
settextstyle (6,0,1);
outtextxy (80,429,"-Функция f(x)=Sin(x)+Sin(3x)/3");
setfillstyle (1,RED);
bar (50,455,68,465);
outtextxy (80,450,"-Функция F(x)=Sin(x)+Sin(3x)/3+Sin(5x)/5+Sin(7x)/7");
/*Определение приращения (x) и координат по осям*/
dx=6.28/580; /*dx с шагом в 1 пиксель по х*/
db=(460-20)/2;
/*Построение графика Sin(x)+(Sin(3x))/3*/
moveto (20,220);
for (i=0;i<=580;i++)
{
setlinestyle(0,0,4);
setcolor(GREEN);
x=dx*i;
a=20+i;
bf=220-db*(sin(x)+(sin(3*x))/3);
lineto(a,bf); /*Рисуем f(х)*/
moveto(a,bF); /*Переходим к F(x)*/
/*Построение графика Sin(x)+(Sin(3x))/3+(Sin(5x))/5+(Sin(7x))/7*/
setcolor(RED);
bF=220-db*(sin(x)+(sin(3*x))/3+(sin(5*x))/5+(sin(7*x))/7);
lineto(a,bF); /*Рисуем F(х)*/
moveto(a,bf); /*Переходим к f(x)*/
/*Ставим метку по оси Х*/
if(i%(580/10)==0)
moveto(a,bf);
}
getch();
closegraph();
}
Пример исполнения:
2.Выполнить расчет определенного интеграла функции f (x)=Sin(x)+(Sin(3x))/3 методом трапеции. Диапазон изменения переменной х=[0;6.28]. Построить график зависимости погрешности расчета интеграла от количества точек расчета N=20…150. Истинное значение рассчитывается с помощью формулы Ньютона-Лейбница.
Программа:
/*Программа построения графика зависимости погрешности расчета интеграла*/
/* функции f(x)=Sin(x)+(Sin(3x))/3 при х=[0;6.28], методом трапеции, */
/* от количества точек расчета 'n'=20...150 */
#include <conio.h>
#include <math.h>
#include <graphics.h>
void main()
{
/* Инициализация графического режима и переменных*/
int i,n,nn,nx=150-20,a,a1,b,b1;
float w,da,db,k,ny=4.45;
double st,sl,y,x,dx;
int dr=VGA, mode=VGAHI;
initgraph(&dr,&mode,"c:\\TC\\BGI");
/*initgraph (&dr,&mode,"G:\\lang\\tc\\bgi");*/
/* Прорисовка осей*/
textcolor(7); setcolor(7); setbkcolor(BLACK); setlinestyle(0,0,2);
line (50,380,640,380); /*X*/
moveto (630,382);lineto(640,380);lineto(630,378);lineto(630,382);
line (50,0,50,380); /*Y*/
moveto (50,0);lineto(48,10);lineto(52,10);lineto(50,0);
/*Разметка осей*/
/*По оси 'Y'*/
for(i=380,k=0;i>=60;i=i-(380-60)/10,k+=ny/10)
{
outtextxy (45,i-3,"-");
gotoxy (1,i/16+1);
printf ("%3.2f",k);
}
/*По оси 'X'*/
for(i=50,k=20;i<=570;i=i+(570-50)/13,k+=10)
outtextxy (62,8,"%");
outtextxy (630,360,"n");
/*Название графика*/
settextstyle(6,0,2); setcolor(7);
outtextxy(10,420,"График зависимости погрешности расчета интеграла, методом");
outtextxy(10,438,"трапеции, функции f(x)=Sin(x)+(Sin(3x))/3 при х=[0;6.28]");
outtextxy(10,456,"от количества точек расчета.");
outtextxy(160,8,"Количество точек расчета?(20...150)-");
gotoxy(70,2); scanf("%d",&nn);
/*Определение приращения по осям*/
da=(570-50)/nx;
db=(380-60)/ny;
/*Расчет итеграла f(x)=Sin(x)+(Sin(3x))/3*/
for(n=20;n<=150;n++)
{
dx=6.28/n;
st=0;sl=0;
for(i=0;i<n;i++)
{
x=dx*i;
/*методом трапеции*/
st+=(((sin(x)+(sin(3*x))/3)+(sin(x+dx)+(sin(3*(x+dx)))/3))/2)*dx;
/*методом Ньютона-Лейбница*/
y=sin(x)+(sin(3*x))/3;
y+=3*(sin(x+dx/3)+(sin(3*(x+dx/3)))/3);
y+=3*(sin(x+dx*2/3)+(sin(3*(x+dx*2/3)))/3);
y+=(sin(x+dx)+(sin(3*(x+dx)))/3);
sl+=y/8*dx;
}
/*Расчет погрешности*/
w=(sl-st)/sl*100;
if(n==nn)
{
setcolor(7);
outtextxy(160,24,"Погрешность");
gotoxy(56,3);
printf("- %6.4f%",w);
outtextxy(80,24*2,"Значение интеграла:");
outtextxy(160,24*3,"метод трапеции");
gotoxy(53,6);
printf("- %+20.18f",st);
outtextxy(160,24*4-8,"метод Ньютона-Лейбница");
gotoxy(53,7);
printf("- %+20.18f",sl);
}
/*Вывод в график*/
setlinestyle(0,1,1);setcolor(GREEN);
a=50+da*(n-20);
b=380-db*w;
if(n==20){a1=a;b1=b;}
else {line(a,b,a1,b1); a1=a; b1=b;}
if(n==nn)
{
setlinestyle(1,1,1);setcolor(7);
moveto(a,b);lineto(a,380);moveto(a,b);
lineto(50,b);moveto(a,b);
}
}
getch();
closegraph();
}
Пример исполнения:
Алгоритм:
1. Высокопроизводительные 8-разрадные RISC микроконтроллеры семейства AT90S AT90S\LS8535 и AT mega8535 фирмы Atmel Corporation: параметры , архитектура, система команд.
AT mega8535
AT mega8535L
8-разрядные КМОП RISC микроконтроллеры с внутрисистемно программируемым Flash ПЗУ
Общие сведения
Как и все микроконтроллеры AVR фирмы «Atmel», микроконтроллеры семейства Mega являются 8-разрядными микроконтроллерами, предназначенными для встраиваемых приложений. Они изготавливаются по малопотребляющей КМОП-технологии, которая в сочетании с усовершенствованной RISC - архитектурой позволяет достичь наилучшего соотношения быстродействие/энергопотребление. Контроллеры описываемого семейства являются наиболее развитыми представителями микроконтроллеров AVR.
Отличительные особенности
К числу особенностей микроконтроллеров AVR семейства Mega относятся:
* FLASH-память программ объемом 8 Кбайт (число цикле стирания/записи не менее 1000);
* оперативная память (статическое ОЗУ) объемом 512 байт;
* память данных на основе ЭСППЗУ (EEPROM) объем 512 байт (число циклов стирания/записи не мене 100000);
* возможность защиты от чтения и модификации памяти программ и данных;
* возможность программирования непосредственно в системе через последовательные интерфейсы SPI и JTAG;
* возможность самопрограммирования;
* возможность внутрисхемной отладки в соответствии со стандартом IEEE 1149.1 (JTAG);
* различные способы синхронизации: встроенный RC-генератор с внутренней или внешней времязадающей RC-цепочкой или с внешним резонатором (пьезокерамическим или кварцевым); внешний сигнал синхронизации;
* наличие нескольких режимов пониженного энергопотребления;
* наличие детектора снижения напряжения питания (brown-out detector,BOD);
* возможность программного снижения частоты тактового генератора.
Характеристики процессора
Подавляющее большинство основных характеристик процессора микроконтроллеров семейства Mega такие же, что и у микроконтроллеров других семейств -- Classic и Tiny:
* полностью статическая архитектура; минимальная тактовая частота равна нулю;
* АЛУ подключено непосредственно к регистрам общего назначения;
* многоуровневая система прерываний; поддержка очереди прерываний.
В то же время процессор микроконтроллеров семейства Mega имеет ряд характеристик, присущих именно этому семейству:
* 130 команд, большинство команд выполняются за один машинный цикл;
* 17 внутренних+3 внешних источников прерываний;
* наличие программного стека во всех моделях семейства;
* наличие аппаратного умножителя.
Характеристики подсистемы ввода/вывода
Все характеристики подсистемы ввода/вывода микроконтроллеров семейства Mega такие же, как и у микроконтроллеров других семейств:
* программное конфигурирование и выбор портов ввода/вывода;
* выводы могут быть запрограммированы как входные или как выходные независимо друг от друга;
* входные буферы с триггером Шмитта на всех выводах;
* возможность подключения ко всем входам внутренних подтяги-вающих резисторов (сопротивление резисторов составляет 35...120кОм).
Периферийные устройства
Микроконтроллеры семейства Mega имеют наиболее богатый набор периферийных устройств (ПУ). При этом в большинстве моделей имеются все ПУ, которые вообще встречаются в составе микроконтроллеров AVR. Этими устройствами являются:
* 2а 8-разрядных таймера/счетчика (таймеры ТО и Т2
* 16-разрядный таймер/счетчик (таймер ТЗ);
* 4 генератора сигнала с ШИМ разрядностью 8 бит (один из режимов работы 8-разрядных таймеров/счетчиков ТО и Т2);
* аналоговый компаратор;
* многоканальный 10-разрядный АЦП как с несимметричными, так и с дифференциальными входами;
* полнодуплексный универсальный синхронный/асинхронный приемопередатчик (USART);
* последовательный синхронный интерфейс SPI;
* последовательный двухпроводный интерфейс TWI (аналог интерфейса 12С).
Архитектура ядра
Ядро микроконтроллеров AVR семейства Mega выполнено по усовершенствованной RISC-архитектуре (enhanced RISC). Арифметико-логическое устройство (АЛУ), выполняющее все вычисления подключено непосредственно к 32-м рабочим регистрам, объединенным в регистровый файл. Благодаря этому АЛУ выполняет одну операцию (чтение содержимого регистров, выполнение операции и запись результата обратно в регистровый файл) за один машинным цикл. Практически каждая из команд (за исключением команд у которых одним из операндов является 16-разрядный адрес) занимает одну ячейку памяти программ.
AT90S8535
AT90LS8535
8-разрядные КМОП RISC
микроконтроллеры с внутрисистемно программируемым Flash ПЗУ
Отличительные особенности
* AVR RISC архитектура - архитектура высокой производительности и малого потребления
* 118 команд, большинство которых выполняется за один машинный цикл
* 8 Кбайт Flash ПЗУ программ, с возможностью внутрисистемного перепрограммирования и загрузки через SPI последовательный канал,1000 циклов стирание/запись
* 512 байтов ЭСППЗУ данных, с возможностью внутрисистемного перепрограммирования и загрузки через SPI последовательный канал, 100000 циклов стирание/запись
* 512 байтов встроенного СОЗУ
* 32 x 8 бит регистра общего назначения
* 32 программируемые линии ввода/вывода
* 8-канальный 10-разрядный аналого-цифровой преобразователь
* 16-разрядный и 32-разрядный формат команд
* Программируемый полный дуплексный UART
* Диапазон напряжений питания от 2,7 В до 6,0 В (AT90LS8535) и от 4,0 В до 6,0 В (AT90S8535)
* Полностью статический прибор - работает при тактовой частоте от 0 Гц до 8 МГц
(AT90S8535) и при тактовой частоте от 0 Гц до 4 МГц (AT90LS8535)
* Производительность до 8 MIPS при частоте 8 МГц
* Два 8-разрядных таймера/счетчика с отдельным прескалером и режимом сравнения
* 16-разрядный (с режимами сравнения и захвата) таймер/счетчик с отдельным прескалером
* Три ШИМ канала
* Внешние и внутренние источники сигналов прерывания
* Программируемый сторожевой таймер с собственным встроенным генератором
* Встроенный аналоговый компаратор
* Встроенные часы реального времени с собственным встроенным генератором и режимом счетчика
* Блокировка режима программирования
* Режимы энергосбережения: пассивный (idle), экономичный (power save) и стоповый(power down)
* Встроенная схема сброса по подаче питания
* Промышленный (-40°C...85°C) и коммерческий (0°C...70°C) диапазоны температур
* 40-выводной корпус PDIP и 44-выводные PLCC и TQFP
Архитектура микроконтроллеров семейства Mega
Микроконтроллеры AVR семейства Mega являются 8-разрядными микроконтроллерами с RISC-архитектурой. Они имеют электрически стираемую память программ (FLASH) и данных (EEPROM), а также разнообразные периферийные устройства. Следует отметить, что микро контроллеры семейства Mega имеют самый богатый набор периферийных устройств по сравнению с микроконтроллерами других семейств. Более того, состав этих устройств от модели к модели практически не меняется (меняются только их функциональные возможности). К устройствам, присутствующим не во всех моделях семейства, относятся АЦП, модуль двухпроводного интерфейса TW1 (Two Wire Interface, аналог шины 12С), а также модуль интерфейса JTAG. Структурная схема микроконтроллеров семейства Mega приведена на Рис.
Организация памяти
В микроконтроллерах AVR реализована Гарвардская архитектура, в соответствии с которой разделены не только адресные пространства памяти программ и памяти данных, но также и шины доступа к ним. Способы адресации и доступа к этим областям памяти также различны. Такая структура позволяет центральному процессору работать одновременно как с памятью программ, так и с памятью данных, что существенно ограничивает производительность. Каждая из областей памяти данных (ОЗУ и EEPROM) также расположена в своем адресном пространстве.
Память программ
Память программ предназначена для хранения команд, управляющих функционированием микроконтроллера. Память программ также часто используется для хранения таблиц констант, не меняющихся во время работы программы.
Как уже было сказано, память программ представляет собой электрически стираемое ППЗУ (FLASH-ПЗУ). В связи с тем что длина всех команд кратна одному слову (16 бит), память программ имеет 16-разрядную организацию. Соответственно, объем памяти микроконтроллеров семейства составляет 8К (8x1024) 16-разрядных слов. Логически память программ разделена на две неравные части -- область прикладной программы и область загрузчика. В последней может располагаться специальная программа (загрузчик), позволяющая микроконтроллеру самостоятельно управлять загрузкой и выгрузкой прикладных программ. Если же возможность самопрограммирования микроконтроллера не используется, прикладная программа может располагаться и в области загрузчика.
Для адресации памяти программ используется счетчик команд (PC -- Program Counter). Размер счетчика команд составляет 12разрядов
По адресу $0000 памяти программ находится вектор сброса. После инициализации (сброса) микроконтроллера выполнение программы начинается с этого адреса (по этому адресу должна размещаться коман-да перехода к инициализационной части программы). Начиная с адреса $001 памяти программ, располагается таблица векторов прерываний. Размер этой области 20 байт ($001…$014).
При возникновении прерывания после сохранения в стеке текущего значения счетчика команд происходит выполнение команды, расположенной по адресу соответствующего вектора. Поэтому по этим адресам располагаются команды перехода к подпрограммам обработки прерываний. В качестве этих команд используются команды относительного перехода (RJMP.
Если прерывания в программе не используются либо таблица векторов прерываний располагается в области загрузчика, то основная программа может начинаться непосредственно с адреса $0001.
Как известно, память программ может использоваться не только для хранения кода программы, но также и для хранения различных констант. Для пересылки байта из памяти программ в память данных имеется специальная команда -- LPM. При использовании команды LPM адрес, по которому производится чтение, определяется содержимым индексного регистра Z. При этом старшие 15 разрядов содержимого регистра будут определять адрес слова (0...32К), а младший разряд будет определять, какой из байтов будет прочитан: «О» -- младший байт, «1» -- старший байт
В заключение следует отметить, что FLASH-ПЗУ, используемое в микроконтроллерах AVR, рассчитано как минимум на 1000 циклов стирания/записи.
Память данных
Память данных микроконтроллеров разделена на три части: регистровая память, оперативная память (статическое ОЗУ) и энерго независимое ЭСППЗУ (EEPROM).
Регистровая память включает 32 регистра общего назначения (РОН), объединенных в файл, и служебные регистры ввода/вывода (РВВ).
В обеих областях регистров ввода/вывода располагаются различные служебные регистры (регистр управления микроконтроллером, регистр состояния и т. п.), а также регистры управления периферийными устройствами, входящими в состав микроконтроллера
Для хранения переменных программ помимо регистров общего назначения также может использоваться статическое ОЗУ объемом 512 байт.
Для долговременного хранения различной информации, которая может изменяться в процессе функционирования готовой системы (калибровочные константы, серийные номера, ключи и т. п.), в микроконтроллерах используется EEPROM-память. Ее объем составляет 512 байт. Эта память расположена в отдельном адресном пространстве, а доступ к ней осуществляется с помощью определенных РВВ.
Статическое ОЗУ
Прежде всего, следует сказать, что в микроконтроллерах AVR используется линейная организация памяти. Объем статического ОЗУ составляет 512 байт
В адресном пространстве ОЗУ также расположены все регистры микроконтроллеров, под них отведены младшие 96 адресов. Остальные адреса отведены под 512ячеек статического ОЗУ
Каждый регистр имеет свой собственный адрес в пространстве памяти данных. Поэтому к ним можно обращаться двумя способами (как к регистрам и как к памяти), несмотря на то что физически эти регистры не являются ячейками ОЗУ. Такое решение является еще одной отличительной особенностью архитектуры AVR, повышаю щей эффективность работы микроконтроллера и его производительность.
. Регистры ввода/вывода
Все регистры ввода/вывода условно можно разделить на две группы -- служебные регистры микроконтроллера и регистры, относя щиеся к конкретным периферийным устройствам (в т. ч. регистры портов ввода/вывода).
Во всех микроконтроллерах семейства Mega (как и в микроконтрол лерах остальных семейств) регистры ввода/вывода располагаются в так называемом пространстве ввода/вывода размером 64 байта
К РВВ, расположенным в основном пространстве ввода/вывода, можно напрямую обратиться с помощью команд IN и OUT, выполняющих пересылку данных между одним из 32-х РОН и пространством ввода/вывода. В системе команд имеется также четыре команды поразрядного доступа, использующие в качестве операндов регистры ввода/вывода: команды установки/сброса отдельного бита (SBI и CBI) и команды проверки состояния отдельного бита (SBIS и SBIC). К сожалению, эти команды могут обращаться только к 1-й половине основных регистров ввода/вывода (адреса $00...$1F).
Помимо непосредственной адресации (с помощью команд IN и OUT), к РВВ можно обращаться и как к ячейкам ОЗУ с помощью соответствующих команд ST/SD/SDD и LD/LDS/LDD
В первом случае используются адреса РВВ, принадлежащие основному пространству ввода/вывода ($00...$3F). Во втором случае адрес РВВ необходимо увеличить на $20.
Среди всех РВВ есть один регистр, используемый наиболее часто в процессе выполнения программ. Этим регистром является регистр состояния SREG. Он располагается по адресу $3F ($5F) и содержит набор флагов, показывающих текущее состояние микроконтроллера. Большинство флагов автоматически устанавливаются в «1» или сбрасываются в «О» при наступлении определенных событий (в соответствии с результатом выполнения команд). Все разряды этого регистра доступны как для чтения, так и для записи; после сброса микроконтроллера все разряды регистра сбрасываются в «О».
Способы адресации памяти данных
Микроконтроллеры поддерживают 8 способов адресации для доступа к различным областям памяти данных (РОН, РВВ,ОЗУ).
Вообще говоря, в действительности способов адресации всего два: прямая адресация и косвенная. Однако каждый способ адресации имеет несколько разновидностей в зависимости от того, к какой области памяти производится обращение (при прямой адресации) или какие дополнительные действия выполняются над индексным регистром (при косвенной адресации).
Прямая адресация
При прямой адресации адреса операндов содержатся непосредственно в слове команды. В соответствии со структурой памяти данных существуют следующие разновидности прямой адресации: прямая адресация одного РОН, прямая адресация двух РОН, прямая адресация РВВ, прямая адресация ОЗУ.
Косвенная адресация
При использовании команд косвенной адресации с постинкрементом после обращения по адресу, который находится в индексном регистре, содержимое индексного регистра увеличивается на 1.
Адресация ОЗУ
Микроконтроллеры семейства поддерживают 6 команд (по 2 для каждого индексного регистра) косвенной адресации с постинкрементом: LD Rd, X+/Y+/Z+ (пересылка байта из ОЗУ в РОН) и ST X+/Y+/Z+, Rd (пересылка байта из РОН в ОЗУ). Адрес регистра общего назначения содержится в разрядах 8... 4 слова команды.
Энергонезависимая память данных (EEPROM)
Все микроконтроллеры семейства Mega имеют в своем составе энергонезависимую память (EEPROM-память). Объем этой памяти 512 байт. EEPROM-память расположена в своем адресном пространстве и так же, как и ОЗУ, организована линейно. Для работы с EEPROM-памятью используются три регистра ввода/вывода: регистр адреса, регистр данных и регистр управления.
Регистр адреса
Регистр адреса EEPROM-памяти EEAR (EEPROM Address Register) физически размещается в двух РВВ EEARH:EEARL, расположенных по адресам $1F (S3F) и $1Е ($ЗЕ) соответственно. В этот регистр загружается адрес ячейки, к которой будет производиться обращение. Регистр адреса доступен как для записи, так и для чтения. При этом в регистре EEARH задействуются только младшие разряды (количество задействованных разрядов зависит от объема EEPROM-памяти). Незадействованные разряды регистра EEARH доступны только для чтения и содержат «О».
Регистр данных
Регистр данных EEPROM-памяти EEDR (EEPROM Data Register) расположен по адресу $1D ($3D). При записи в этот регистр загружаются данные которые должны быть загружены в EEPROM. При чтении помещаются данные считанные из EEPROM.
Регистр управления
Регистр управления EEPROM-памяти EECR (EEPROM control Register) расположен по адресу $1С ($3C). Этот регистр используется для управления доступом к EEPROM-памяти
Прерывания
Общие сведения
Прерывание прекращает нормальный ход программы для выполнения приоритетной задачи, определяемой внутренним или внешним событие» микроконтроллера. При возникновении прерывания микроконтроллер сохраняет в стеке содержимое счетчика команд PC и загружает в него адрес соответствующего вектора прерывания. По этому адресу, как правило, находится команда безусловного перехода к подпрограмме обработки прерывания. Последней командой подпрограммы обработки прерывания должна быть команда RETI, которая обеспечивает возврат в основную программу и восстановление предварительно сохраненного счетчика команд.
Поскольку источниками прерываний, в частности, являются различные периферийные устройства микроконтроллеров, количество прерываний зависит от конкретной модели.
Таблица векторов прерываний
Как и все микроконтроллеры AVR, микроконтроллеры семейства Mega имеют многоуровневую систему приоритетных прерываний. Младшие адреса памяти программ начиная с адреса $0001 отведены под таблицу векторов прерывания. Каждому прерыванию соответствует адрес в этой таблице, который загружается в счетчик команд при возникновении прерывания. Положение вектора в таблице также определяет и приоритет соответствующего прерывания: чем меньше адрес, тем выше приоритет прерывания. Размер вектора прерывания зависит от объема памяти программ микроконтроллера и составляет 1 байт. Соответственно для перехода к подпрограммам обработки прерываний используются команды RJMP.
Таблица может располагаться не только и начале памяти программ, а также и в начале области загрузчика. Причем перемещение таблицы может быть осуществлено непосредственно в ходе выполнения программы.
Управление размещением таблицы прерываний осуществляется двумя младшими разрядами регистров GICR: IVSEL (1-й разряд) и IVSE (0-й разряд). Состояние флага IVSEL определяет положение таблицы в памяти программ. Если флаг сброшен в «О», таблица векторов прерываний располагается в начале памяти программ, если флаг установлен в «1» -- в начале области загрузчика. Конкретное значение начального адреса области загрузчика зависит от установок конфигурационных ячеек BOOTSZ1 и BOOTSZO. Разряд IVСЕ предназначен для разрешения изменения флага IVSEL.
Для изменения положения таблицы векторов прерываний необходимо установить разряд IVСЕ в «1» и затем в течение следующих четырех машин-ных циклов занести требуемое значение в разряд IVSEL. При этом разряд IVCE сбрасывается в «О». В противном случае разряд IVСЕ будет сброшен аппаратно по истечении четырех машинных циклов, запрещая дальнейшее изменение флага IVSEL.
На время выполнения описанной последовательности прерывания автоматически запрещаются и разрешаются только после сброса флага IVCE. Состояние флага I регистра SREG при этом не меняется. Если прерывания в работе микроконтроллера не предусматриваются, то на месте таблицы векторов прерываний может быть размещена часть основной программы
Счетчик команд и выполнение программы
Счетчик команд
Счетчик команд представляет собой регистр, в котором содержится адрес следующей исполняемой команды. Напрямую из программы он недоступен. Размер счетчика команд зависит от объема имеющейся памяти программ и составляет 12 разрядов.
При нормальном выполнении программы содержимое счетчика команд автоматически увеличивается на 1 или на 2 (в зависимости от выполняемой команды) в каждом машинном цикле. Этот порядок нарушается при вы-полнении команд перехода, вызова и возврата из подпрограмм, а также при возникновении прерываний.
После включения питания, а также после сброса микроконтроллера в счетчик программ автоматически загружается стартовый адрес $0000 или начальный адрес сектора загрузчика. Как правило, по этому адресу располагается команда безусловного перехода к инициализационной части программы.
При возникновении прерывания в счетчик команд загружается адрес соответствующего вектора прерывания. Если прерывания используются в программе, по адресам векторов прерываний должны размещаться команды перехода к подпрограммам обработки прерываний.
Как и во всех микроконтроллерах AVR, в микроконтроллерах семейства Mega используется конвейерная обработка команд.
Абсолютный вызов подпрограммы -- команда CALL
При выполнении команды после сохранения в стеке текущего значения счетчика команд в последний загружается число, являющееся операндом команды. С помощью этой команды можно осуществлять вызов в пределах всего адресного пространства имеющихся на сегодняшний день микроконтроллеров AVR.
Команда абсолютного вызова подпрограмм выполняется за 4 машинных цикла.
Косвенный вызов подпрограммы -- команда ICALL
Команда ICALL сначала сохраняет в стеке значение счетчика команд. Затем в счетчик команд загружается содержимое индексного регистра. Максимально возможная величина перехода составляет 64К слов (128 Кбайт), поэтому данная команда также не имеет ограничений по области действия.
Как и команда RCALL, команда косвенного вызова подпрограмм вы-полняется за 3 машинных цикла.
Команды возврата из подпрограмм
В конце каждой подпрограммы обязательно должна находиться команда возврата из нее. В системе команд микроконтроллеров семейства имеется две таких команды. Для возврата из обычной подпрограммы, вызываемой командой RCALL, используется команда RET. Для возврата из подпрограммы обработки прерывания используется команда RETI.
Обе команды восстанавливают из стека содержимое счетчика команд, сохраненное там перед переходом к подпрограмме. Команда возврата из подпрограммы RETI дополнительно устанавливает в «1» флаг общего разрешения прерываний I регистра SREG, сбрасываемый аппаратно при возникновении прерывания.
На выполнение каждой из команд возврата из подпрограммы требуется 4 машинных цикла.
Стек
Во всех микроконтроллерах семейства стек реализован программно. Он размещается в памяти данных, и его глубина определяется только размером свободной области памяти программ. В качестве указателя стека во всех моделях используется пара регистров ввода/вывода SPH:SPL, расположенных по адресам $ЗЕ ($5Е) и $3D ($5D) соответственно. Так как после подачи напряжения питания (или после сброса) в регистрах содержится нулевое значение, в самом начале программы указатель стека необходимо проинициализировать, записав в него значение верхнего адреса памяти данных.
При вызове подпрограмм адрес команды, расположенной за командой вызова, сохраняется в стеке. Значение указателя стека при этом уменьшается на 2, т. к. для хранения счетчика команд требуется 2 байта. При возврате из подпрограммы этот адрес извлекается из стека и загружается в счетчик команд. Значение указателя стека соответственно увеличивается на 2. То же происходит и во время прерывания. При генерации прерывания адрес следующей команды сохраняется в стеке, а при возврате из подпрограммы обработки прерывания он восстанавливается из стека.
Во всех моделях микроконтроллеров семейства стек доступен программно. Для работы со стеком в наборе команд имеется две команды: команда занесения в стек (PUSH) и команда извлечения из стека (POP).
Порты ввода/вывода
Общие сведения
Каждый порт микроконтроллеров состоит из определенного числа выводов, через которые микроконтроллер может осуществлять прием и передачу цифровых сигналов. Задание направления передачи данных через любой контакт ввода/вывода может быть произведено программно в любой момент времени.
Выходные буферы всех портов, имея симметричные нагрузочные харак-теристики, обеспечивают высокую нагрузочную способность при любом уровне сигнала. Нагрузочной способности достаточно для непосредствен-ного управления светодиодными индикаторами.
Входные буферы всех выводов построены по схеме триггера Шмитта. Для всех входов имеется возможность подключения внутреннего подтяги-вающего резистора между входом и шиной питания.
Отличительной особенностью портов микроконтроллеров семейства Mega (как и всех микроконтроллеров AYR) при использовании их в качестве цифровых портов ввода/вывода общего назначения является реализация истинной функциональности вида «чтение/модификация/запись». Благо-даря этому можно выполнять операции над любым выводом (с помощью команд SBI и CBI), не влияя на другие выводы порта. Это относится к изме-нению режима работы контакта ввода/вывода, к изменению состояния вы-ходного буфера (для выходов) и к изменению состояния внутреннего подтя-гивающего резистора (для входов).
Регистры портов ввода/вывода
Обращение к портам производится через регистры ввода/вывода. Под каждый порт в адресном пространстве ввода/вывода зарезервировано по 3 адреса, по которым размещены следующие регистры: регистр данных пор-та PORTx, регистр направления данных DDRx и регистр выводов порта PINx. Действительные названия регистров получаются подстановкой названия порта вместо символа «х», соответственно регистры порта А называются PORTA, DDRA, PINA, порта В -- PORTB, DDRB, PINB и т. д. Поскольку с помощью регистров PIN* осуществляется доступ к физическим значениям сигналов на выводах порта, они доступны только для чтения, тогда как ос-тальные два регистра доступны и для чтения, и для записи.
Таймеры
Таймер/счетчик ТО имеет минимальный набор функций. Он может использоваться только для отсчета и измерения временных интервалов или как счетчик внешних событий, возможность генерации сигналов с широтно-импульсной модуляцией (ШИМ) фиксированной разрядности, а также возможность работать в асинхронном режиме в качестве часов реального времени.
Таймер/счетчик Т2 полностью аналогичен таймеру/счетчику ТО
Таймер/счетчик ТЗ имеет те же функциональные возможности, что и ТО, он может работать в качестве широтно-импульсного модулятора, но уже переменной разрядности и к тому же многоканальный.
Сторожевой таймер
Страницы: 1, 2
|