Вопрос от котенка (новичек те) по внешним прерывания

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Adekamer
Родился
Сообщения: 19
Зарегистрирован: Ср июн 14, 2006 06:41:06

Вопрос от котенка (новичек те) по внешним прерывания

Сообщение Adekamer »

Товарисчи лохматые! сделал бегуший огонек на атмеге8 - теперь хочу разнообразить его поведение - тупо опрашивать кнопку считаю неэффективным - и неинтересно - посему жду от Вас примеров по реализации внешних прерываний на С. На асме информации полно - но хочется освоить С под AVR. Заранее спасибо
Мя: сцылки на интересующую информацию тоже принимаются с мурлыканьем !
Реклама
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

Каким компилятором пользуется уважаемый?
Например, в Code Vision все это легко делается CodeWizard'ом...
Реклама
Adekamer
Родился
Сообщения: 19
Зарегистрирован: Ср июн 14, 2006 06:41:06

Сообщение Adekamer »

пока WinAVR но весьма скоро перекачусь полностью на AVR-GCC @ Linux
вот - пока просто интересует более менее доступная инфа по внешним интераптам - тк то что на данный момент выяснил я - там далеко не все так просто (за счет гибкости конечно)
В основном пока на инглиш ресурсах по этой теме пасусь - но инглишь для меня не нативный - и в эл-ке он для меня совсем не нативный. Мучаюсь.
Посему и спрашивую у достопочтенного обшества совета - чтоб так сказать - лишних блох не нахватать на свой загривок
Adekamer
Родился
Сообщения: 19
Зарегистрирован: Ср июн 14, 2006 06:41:06

Сообщение Adekamer »

ну уважаемые, ну неужто никто не может поделиться простеньким примерчиком на С по организации внешних прерываний на Атмеге 8 ?
просто на асме - инфы полно - а на С - че то не очень - особенно то что прерывание может выставляться как по высокому уровню - так и наоборот - а это для меня пока в тех примерах что я видел не очень и понятно.....
кинте плиз кусок кода с коментами нормальными (желательно русскими) по поводу организации внешнего прерывания на Атмеге8 порты PD2 PD3
Не ленитесь! или линк какой или нормальную доку по С под АВР дайте - где ясно будет что где и как !
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Serega
Говорящий с текстолитом
Сообщения: 1529
Зарегистрирован: Пн авг 22, 2005 21:02:22
Откуда: Питер

Сообщение Serega »

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

ldi Temp,0b00110100
out REG,Temp

то на сях оно же буде выглядеть просто

REG = 0b00110100;

или что-то типа этого :)
Лучше быть первым в деревне, чем вторым в Риме
Реклама
Adekamer
Родился
Сообщения: 19
Зарегистрирован: Ср июн 14, 2006 06:41:06

Сообщение Adekamer »

Эт понятно по конфигурации регистров - а вот бы примерчик применительно к #include <interrupt.h>
можно а ?
Реклама
Аватара пользователя
Mamonth
Вымогатель припоя
Сообщения: 534
Зарегистрирован: Пн янв 16, 2006 08:00:17
Откуда: Иркутск

Сообщение Mamonth »

А в хелп залазить не пробовал, в том же WinAVR. Кроме того посмотри примеры, и даташиты по реализации некоторых вещей от Atmel (atmel.com).... вперед!
Today fine night...
Adekamer
Родился
Сообщения: 19
Зарегистрирован: Ср июн 14, 2006 06:41:06

Сообщение Adekamer »

http://www.scienceprog.com/avr-microcon ... llresult=2
ОЕВХДХ РПУФЙФШ УПДЕТЦЙНПЕ - ЮФПВ ОЕ ЪБУПТСФШ
ФПМШЛП РБТХ ЧПРТПУПЧ - ЕУМЙ С РТБЧЙМШОП РПОСМ - ФП ЛПОУФТХЛГЙС
outp((1<<

sei();
ТБЪТЕЫБЕФ ЧУЕ РТЕТЩЧБОС - Й РТЕТЩЧБОЙС ЙДХФ РП ЙЪНЕОЕОЙА ХТПЧОС ?
Б ЧПФ ЛБЛ ЙОЙГЙБМЙЪЙТПЧБФШ УТБВБФЩЧБОЙЕ РТЕТЩЧБОЙС РП ЧТИОЕНХ ХТПЧОА ЙМЙ РП ОЙЦОЕНХ ХТПЧОА ? ОХ УЛБЦЕН ФПЮОЕЕ РП РЕТЕДОЕНХ ЙМЙ РП ЪБДОЕНХ ЖТПОФХ УРБДБАЫЕЗП ОБТБУФБАЭЕЗП ХТПЧОС ?
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

ХТПЧОС ?

ЧТОС, простите? :)))

А если серьезно, то, например, в Mega16 3 внешних прерывания.
Можно настраивать срабатывание по уровню 0, 1 или по переходам 0>1 или 1>0 (непомню...), как - см. даташит.
В случае прерывания камень сохраняет текущие значения регистров шурует в область памяти, где в простейшем случае лежит ддействие-0обработчик или указатель туда, где есть соотв. подпрограмма обработки прерывания.
Вот так, кратенько. Вроде бы все просто...
Adekamer
Родился
Сообщения: 19
Зарегистрирован: Ср июн 14, 2006 06:41:06

Сообщение Adekamer »

в обшем ситуация такая - вопросы по прерываниям у меня сейчас несколько конкретизировались:
в примерах что идут в WinAVR интересующая меня тема фактически не отображена
а меня интересует сейчас использованеи sei();
это разрешает прерыывания
обязательно ли надо выставлять регистры GIFR и вроде как MCUCR - отдельные биты - для выставления режима срабатываний прерываний - по фронтам - перепадам уровня итд итп.... так вот - при начальной инициализации меги8 с разрешением прерываний через sei(); - биты в вышеуказанных регистрах выставлены как ? позволяющие инициировать прервание по любому изменению уровня ?
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

По умолчанию все прерывания у нее выключены.
Adekamer
Родился
Сообщения: 19
Зарегистрирован: Ср июн 14, 2006 06:41:06

Сообщение Adekamer »

те если я правильно понял матерого кошака - то при начальной инициализации системы - для работы в нешними прерываниями - я должен обязательно помимо sei();
еше выставлять биты вышеуказанных регистров ?
а не подскажет ли уважаемое мохнатое сообщество - как в С для WinAVR ожно это сделать не прибегая к асму ?
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

:)

Вообще должно быть просто: пишется имя соотв. регистра и присваивается ему значение, типа

// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
// INT1: On
// INT1 Mode: Falling Edge
// INT2: On
// INT2 Mode: Falling Edge
GICR|=0xE0;
MCUCR=0x0A;
MCUCSR=0x00;
GIFR=0xE0;

Это для 16-ой Меги
Adekamer
Родился
Сообщения: 19
Зарегистрирован: Ср июн 14, 2006 06:41:06

Сообщение Adekamer »

Спасибо б ольшое ,) Я всегда знал - что если правильно сформируешь мысль - то тебе обязательно ответят :)
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

Завсегда пожалуйста! :)
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»