Вопрос от котенка (новичек те) по внешним прерывания
Вопрос от котенка (новичек те) по внешним прерывания
Товарисчи лохматые! сделал бегуший огонек на атмеге8 - теперь хочу разнообразить его поведение - тупо опрашивать кнопку считаю неэффективным - и неинтересно - посему жду от Вас примеров по реализации внешних прерываний на С. На асме информации полно - но хочется освоить С под AVR. Заранее спасибо
Мя: сцылки на интересующую информацию тоже принимаются с мурлыканьем !
Мя: сцылки на интересующую информацию тоже принимаются с мурлыканьем !
- Реклама
пока WinAVR но весьма скоро перекачусь полностью на AVR-GCC @ Linux
вот - пока просто интересует более менее доступная инфа по внешним интераптам - тк то что на данный момент выяснил я - там далеко не все так просто (за счет гибкости конечно)
В основном пока на инглиш ресурсах по этой теме пасусь - но инглишь для меня не нативный - и в эл-ке он для меня совсем не нативный. Мучаюсь.
Посему и спрашивую у достопочтенного обшества совета - чтоб так сказать - лишних блох не нахватать на свой загривок
вот - пока просто интересует более менее доступная инфа по внешним интераптам - тк то что на данный момент выяснил я - там далеко не все так просто (за счет гибкости конечно)
В основном пока на инглиш ресурсах по этой теме пасусь - но инглишь для меня не нативный - и в эл-ке он для меня совсем не нативный. Мучаюсь.
Посему и спрашивую у достопочтенного обшества совета - чтоб так сказать - лишних блох не нахватать на свой загривок
ну уважаемые, ну неужто никто не может поделиться простеньким примерчиком на С по организации внешних прерываний на Атмеге 8 ?
просто на асме - инфы полно - а на С - че то не очень - особенно то что прерывание может выставляться как по высокому уровню - так и наоборот - а это для меня пока в тех примерах что я видел не очень и понятно.....
кинте плиз кусок кода с коментами нормальными (желательно русскими) по поводу организации внешнего прерывания на Атмеге8 порты PD2 PD3
Не ленитесь! или линк какой или нормальную доку по С под АВР дайте - где ясно будет что где и как !
просто на асме - инфы полно - а на С - че то не очень - особенно то что прерывание может выставляться как по высокому уровню - так и наоборот - а это для меня пока в тех примерах что я видел не очень и понятно.....
кинте плиз кусок кода с коментами нормальными (желательно русскими) по поводу организации внешнего прерывания на Атмеге8 порты PD2 PD3
Не ленитесь! или линк какой или нормальную доку по С под АВР дайте - где ясно будет что где и как !
- Serega
- Говорящий с текстолитом
- Сообщения: 1529
- Зарегистрирован: Пн авг 22, 2005 21:02:22
- Откуда: Питер
Что на асме, что на сях, нужно конфигурировать одни и те же регистры. В любом языке они будут называться одинаково - так, как указано в даташите. От язака зависит только процесс инициализации этого регистра
Если на асме нам нужно написать
ldi Temp,0b00110100
out REG,Temp
то на сях оно же буде выглядеть просто
REG = 0b00110100;
или что-то типа этого
Если на асме нам нужно написать
ldi Temp,0b00110100
out REG,Temp
то на сях оно же буде выглядеть просто
REG = 0b00110100;
или что-то типа этого
Лучше быть первым в деревне, чем вторым в Риме
- Реклама
http://www.scienceprog.com/avr-microcon ... llresult=2
ОЕВХДХ РПУФЙФШ УПДЕТЦЙНПЕ - ЮФПВ ОЕ ЪБУПТСФШ
ФПМШЛП РБТХ ЧПРТПУПЧ - ЕУМЙ С РТБЧЙМШОП РПОСМ - ФП ЛПОУФТХЛГЙС
outp((1<<
sei();
ТБЪТЕЫБЕФ ЧУЕ РТЕТЩЧБОС - Й РТЕТЩЧБОЙС ЙДХФ РП ЙЪНЕОЕОЙА ХТПЧОС ?
Б ЧПФ ЛБЛ ЙОЙГЙБМЙЪЙТПЧБФШ УТБВБФЩЧБОЙЕ РТЕТЩЧБОЙС РП ЧТИОЕНХ ХТПЧОА ЙМЙ РП ОЙЦОЕНХ ХТПЧОА ? ОХ УЛБЦЕН ФПЮОЕЕ РП РЕТЕДОЕНХ ЙМЙ РП ЪБДОЕНХ ЖТПОФХ УРБДБАЫЕЗП ОБТБУФБАЭЕЗП ХТПЧОС ?
ОЕВХДХ РПУФЙФШ УПДЕТЦЙНПЕ - ЮФПВ ОЕ ЪБУПТСФШ
ФПМШЛП РБТХ ЧПРТПУПЧ - ЕУМЙ С РТБЧЙМШОП РПОСМ - ФП ЛПОУФТХЛГЙС
outp((1<<
sei();
ТБЪТЕЫБЕФ ЧУЕ РТЕТЩЧБОС - Й РТЕТЩЧБОЙС ЙДХФ РП ЙЪНЕОЕОЙА ХТПЧОС ?
Б ЧПФ ЛБЛ ЙОЙГЙБМЙЪЙТПЧБФШ УТБВБФЩЧБОЙЕ РТЕТЩЧБОЙС РП ЧТИОЕНХ ХТПЧОА ЙМЙ РП ОЙЦОЕНХ ХТПЧОА ? ОХ УЛБЦЕН ФПЮОЕЕ РП РЕТЕДОЕНХ ЙМЙ РП ЪБДОЕНХ ЖТПОФХ УРБДБАЫЕЗП ОБТБУФБАЭЕЗП ХТПЧОС ?
- Aheir
- Модератор
- Сообщения: 4517
- Зарегистрирован: Пн апр 03, 2006 11:43:25
- Откуда: Санкт - Петербург
- Контактная информация:
ХТПЧОС ?
ЧТОС, простите?
А если серьезно, то, например, в Mega16 3 внешних прерывания.
Можно настраивать срабатывание по уровню 0, 1 или по переходам 0>1 или 1>0 (непомню...), как - см. даташит.
В случае прерывания камень сохраняет текущие значения регистров шурует в область памяти, где в простейшем случае лежит ддействие-0обработчик или указатель туда, где есть соотв. подпрограмма обработки прерывания.
Вот так, кратенько. Вроде бы все просто...
ЧТОС, простите?
А если серьезно, то, например, в Mega16 3 внешних прерывания.
Можно настраивать срабатывание по уровню 0, 1 или по переходам 0>1 или 1>0 (непомню...), как - см. даташит.
В случае прерывания камень сохраняет текущие значения регистров шурует в область памяти, где в простейшем случае лежит ддействие-0обработчик или указатель туда, где есть соотв. подпрограмма обработки прерывания.
Вот так, кратенько. Вроде бы все просто...
в обшем ситуация такая - вопросы по прерываниям у меня сейчас несколько конкретизировались:
в примерах что идут в WinAVR интересующая меня тема фактически не отображена
а меня интересует сейчас использованеи sei();
это разрешает прерыывания
обязательно ли надо выставлять регистры GIFR и вроде как MCUCR - отдельные биты - для выставления режима срабатываний прерываний - по фронтам - перепадам уровня итд итп.... так вот - при начальной инициализации меги8 с разрешением прерываний через sei(); - биты в вышеуказанных регистрах выставлены как ? позволяющие инициировать прервание по любому изменению уровня ?
в примерах что идут в WinAVR интересующая меня тема фактически не отображена
а меня интересует сейчас использованеи sei();
это разрешает прерыывания
обязательно ли надо выставлять регистры GIFR и вроде как MCUCR - отдельные биты - для выставления режима срабатываний прерываний - по фронтам - перепадам уровня итд итп.... так вот - при начальной инициализации меги8 с разрешением прерываний через sei(); - биты в вышеуказанных регистрах выставлены как ? позволяющие инициировать прервание по любому изменению уровня ?
те если я правильно понял матерого кошака - то при начальной инициализации системы - для работы в нешними прерываниями - я должен обязательно помимо sei();
еше выставлять биты вышеуказанных регистров ?
а не подскажет ли уважаемое мохнатое сообщество - как в С для WinAVR ожно это сделать не прибегая к асму ?
еше выставлять биты вышеуказанных регистров ?
а не подскажет ли уважаемое мохнатое сообщество - как в С для WinAVR ожно это сделать не прибегая к асму ?
- Aheir
- Модератор
- Сообщения: 4517
- Зарегистрирован: Пн апр 03, 2006 11:43:25
- Откуда: Санкт - Петербург
- Контактная информация:
Вообще должно быть просто: пишется имя соотв. регистра и присваивается ему значение, типа
// 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-ой Меги


