пятница, 8 февраля 2013 г.

программы на си для atiny2313 в avrstudio

Чем же так привлекательны прерывания? Первое  это то, что мы можем остановить основной процесс для выполнения каких либо других функции, с последующим продолжением этого процесса. Вторым, и наверное во многих случаях основным считается ускорение процесса выполнения всех функций, за счет внутренних дополнительных устройств. Вернемся к нашему примеру. Допустим, мой друг взялся мыть посуду, когда его жена уже пришла домой. Увидев жирную посуду, он просит ее найти средство для мытья посуды, и пока он моет, она уже принесет ему это средство. Но, вот зазвонил телефон, трубку поднимет жена, поговорит с мамой и сходит в магазин. Совместно все дела сделаны очень быстро! А еще проще зациклится т.е. основной программы нет. Мой друг сидит на диване и ничего не делает, домоработница увидев грязную посуду, говорит ему об этом, и получив разрешение, начинает мыть сама. Когда звонит телефон, он говорит жене, чтобы она подняла трубку, жена разговаривает по телефону, и поле разговора идет в магазин за продуктами Красота! В таком случае в микроконтроллере одновременно работают несколько устройств ввода-вывода (в современных микроконтроллерах их может быть достаточно много) и общая производительность процессора возрастает во много раз, но прерывания от устройств обрабатываются последовательно одно за другим (не одновременно), в зависимости от приоритета (в нашем примере жена имеет больший приоритет, нежели домоработница).За управление прерываниями отвечают несколько регистровSREG регистр статуса (состояния). Смотрим таблицу устройств ввода-вывода. Седьмой бит регистра SREG флаг I (interrupt), который называется флагом глобального разрешения прерываний. Если флаг опущен (седьмой бит равен нулю), то все прерывания запрещены. Если флаг поднять (установить I в 1), мы разрешим прерывания. Устанавливается и сбрасывается флаг I командами: SEI  разрешить прерывания CLI  запретить прерывания Какие из прерываний будут работать, задается с помощью регистров называемых масками прерываний.Обозначаются маски прерываний следующим образом: TIMSK,..,..,.. управление прерываниями от таймеров и других встроенных устройств.GIMSK (GIKR в семействе Mega)  управление всеми внешними прерываниями. Маски прерываний в свою очередь зависят от флагов прерываний: TIFR и GIFR соответственно (не путайте с флагом глобального разрешения прерываний).Последовательность выполнения прерываний: При включении микроконтроллера все флаги прерываний сброшены в 0. Для включения прерываний программа должна установить флаг I регистра SREG в 1. После этого прописать регистры маски с установленными локальными прерываниями (прерывания, которые нам нужны).Когда приходит (сигнал) запрос на прерывание, то он поднимает флаг прерывания (даже в том случае если прерывание запрещено, для организации вложенных прерываний и приоритета между разными прерываниями). Если нет запрета прерываний, то контроллер обратится к соответствующему (Interrupt Vectors)  вектору прерываний, приостанавливая текущую программу. Вектор прерывания это фиксированная строка программной области, куда переходит программа в случае возникновения прерывания.Весь список векторов прерывания называется таблицей векторов прерывания, который располагается в начале программного кода.Итак, в момент обращения к вектору прерывания, флаг I регистра SREG и флаг вызвавший прерывание сбрасывается в 0, запрещая другие прерывания. Если в процессе выполнения прерывания, возникли другие запросы прерываний, флаги этих прерываний остаются поднятыми. По окончании выполнения текущего прерывания флаг I регистра SREG поднимается, разрешая выполнение следующего. Если пришли несколько запросов, и их флаги окажутся поднятыми то первым будет выполнено прерывание, чей вектор меньше по адресу в таблице, ближе к началу памяти. За ним второй, и так далее. Кроме этого программист может организовать так называемое вложенное прерывание, когда в процессе выполнения программы прерывания возникает еще одно прерывание. Тогда прекращается выполнение текущего прерывания и выполняется новое, после завершения которого, возобновляется выполнение остановленного прерывания.В качестве примера приведена таблица векторов прерывания для ATtiny2313 Таблица векторов прерывания для Атмега16 выглядит следующим образом: При сравнении, таблицы совершенно не совпадают.В семействе ATtiny строка вектора прерывания занимает 16 бит, а в семействе Me

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

| Опубликовал: | Просмотров: 9048

Програмирование в AVR Studio 5 с самого начала. Часть 7

» » Програмирование в AVR Studio 5 с самого начала. Часть 7

 Чужой компьютер

Здравствуй, путник!

Загрузка. Пожалуйста, подождите...

Програмирование в AVR Studio 5 с самого начала. Часть 7 » Схемы, усилители, гаджеты, компьютеры, станки, электроника

Комментариев нет:

Отправить комментарий