Отговори на тема  [ 33 мнения ]  Отиди на страница 1, 2, 3  Следваща
Въпрос за интеръпти на PICльовци. 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Авг 23, 2005 12:02 pm
Мнения: 3070
Местоположение: София
Мнение Въпрос за интеръпти на PICльовци.
Здравейте,

Понеже съм новобранец с тия чипове, силно ме интересува следния въпрос:
PIC12 или PIC16. Имаме интеръпт за препълване на таймер 1, и интеръпт за промяна на порт, или външен интеръпт, чрез съответното краче за външен интеръпт.
Какво става, ако по време на обработката на единия интеръпт, възникне другия? Ясно е че обработката на текущия ще продължи, до изхода от интеръпт процедурата, където обикновено се разрешават всички интеръпти. Не ми е ясно обаче, дали интеръпт подпрограмата ще бъде отново викната веднага след това, за да обработи и втория случил се интеръпт, или PICльото просто ще е забравил че се е случил и втори интеръпт. В тоя смисъл, ако е така, има ли някакъв начин това да се избегне?

Гледам при PIC18 и PIC24 има и приоритети на интеръптите, обаче тоя казус пак остава отворен, понеже интеръпта с по-нисък приоритет може да се случи по време на обработката на тоя с по-висок.

Е, няма начин някой да не е наясно какво се случва, така че, моля помагайте. :)

Предварително благодаря.


Чет Юли 09, 2009 9:45 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение 
Ако се вгледаш внимателно всеки интеръпт си има бит за разрешение и бит за флаг. При възникване на събитието се вдига бита за флаг. Ако е разрешено прекъсването и няма по високо преоритетен процес в момента - то се обработва. Ако в това време дойде друго неговия флаг също се вдига. И си седи вдигнат докато някой не го свали. Тоя някой обикновенно си ти или някакво точно определено събитие. Т.е. при нормални условия няма как прекъсване да бъде забравено. То ще се обработи при първа възможност.

Този механизъм работи при 99% от микроконтролерите независимо дали говорим за PIC, ARM, дали има преоритети и наследяемост или не.

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Чет Юли 09, 2009 10:00 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Авг 23, 2005 12:02 pm
Мнения: 3070
Местоположение: София
Мнение 
Благодаря.

Тоест, в момента, в който вдигна флага за глобално разрешение на интеръптите, ще се обработи и въпросния втори, случил се по време на обработката на първия. Тоест, аз в общия случай няма нужда да правя нищо, освен ако нямам някакви специални изисквания към обработката му?

За флаговете знам - и за едните, и за другите. Просто ми беше интересно дали процесора сам прави това, или аз трябва да го направя допълнително.

Накратко, процесора вика интеръпт процедурата, докато не се изчистят всички флагове за възникнал интеръпт, освен ако в описанието на съответния процесор не е указано друго?


Чет Юли 09, 2009 10:07 am
Профил ICQ
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Вто Яну 31, 2006 11:11 pm
Мнения: 295
Местоположение: София
Мнение 
Поне на мен ми е непознат процесор дето така да си забравя прекъсванията. Ако по времето на изпълнение на едно прекъсване възникне друго, то се изпълнява след излизането от първото прекъсване. Има и вариант при влизане в първото прекъсване да се разрешат наново прекъсванията и тогава се получават вложени едно в друго прекъсвания. Демек може да се направи някакъв мижав приоритет, но този вариант е за екзотични приложения.


Чет Юли 09, 2009 10:08 am
Профил
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Вто Яну 31, 2006 11:11 pm
Мнения: 295
Местоположение: София
Мнение 
sparkybg написа:
..Просто ми беше интересно дали процесора сам прави това, или аз трябва да го направя допълнително.

Накратко, процесора вика интеръпт процедурата, докато не се изчистят всички флагове за възникнал интеръпт, освен ако в описанието на съответния процесор не е указано друго?


Да, процесора сам си го прави това докато е разрешен флага за прекъсвания и докато не се изчистят всичките прекъсвания


Чет Юли 09, 2009 10:14 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Авг 23, 2005 12:02 pm
Мнения: 3070
Местоположение: София
Мнение 
ОК, благодаря на всички отзовали се. Вече ми се изясниха всичките питания.
И на мен ми се струваше че трябва да е така, но не бях сигурен.


Чет Юли 09, 2009 10:20 am
Профил ICQ
Ранг: Популярен
Ранг: Популярен

Регистриран на: Вто Юни 27, 2006 11:13 am
Мнения: 381
Местоположение: Варна
Мнение 
едно е флаговете, указващи настъпило събитие, независимо дали става въпрос за прекъсване, или полиране на флаговете. а друго е маскиращите битове, казващи кое прекъсване може или не може да се приеме. и двете може по всяко време да се променят. И трето е главния флаг в статуса за разрешаване и забрана на прекъсването. Така че посредством правилната комбинация можеш да си организираш приоритетни прекъсвания, прекъсване по желание в различни участъци на програмата и т.н. В никакъв случей прекъсване, т.е. настъпило събитие не се губи, ти го правиш да стане условие за прекъсване. Така че умната с флаговете и маскиращите битове :)


Чет Юли 09, 2009 7:03 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Авг 23, 2005 12:02 pm
Мнения: 3070
Местоположение: София
Мнение 
Еми, да кажа и конкретния казус:

Контролерче на LED дисплей с 3 7 сегментни индикатора, а конкретния процесор е PIC16F627A. Задачата е да получи данни по двупроводна серийна шина, и да ги изобразява.
Data и Clock са вързани на същите места, от където се и програмира чрез ICSP. Действа общо взето като shift регистър, но има и таймаут, че да има някаква елементарна защита от грешки. Пуснат е интеръпта за промена в порт Б. Получават се 24 бита. При смяна на clock-а от високо на ниско ниво, си взима бита от data-та. Брои 24 бита, и като станат толкова ги изобразява. Таймаут-а е по препълване на таймер 1, което прекъсване също е разрешено, тоест, минималната честота на предаване е около 15 херца - работи се с вътрешния RC осцилатор на 4Mhz. При всяко приемане на бит, брояча на таймер 1 се нулира. Така, ако нещо се загуби, селд 1/15 от секундата, всичко се нулира, и се чака следващото подаване на данни.

Е, та въпроса беше дали е възможно така да управлявам двата интеръпта накуп, понеже с интеръпти е най-удобно. Иначе, таймаута мога да го вкарам и в основния цикъл. Въпроса е да си поиграя - сега им свиквам на тия PICльовци. Програмата вече я написах. Платките са готови. Сега остава да се хващам за духалката. :)

...пък после може да си поиграя и с USART-а. Това обаче след като го подкарам така.


Чет Юли 09, 2009 11:58 pm
Профил ICQ
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Вто Фев 06, 2007 2:45 am
Мнения: 263
Мнение 
А защо не първо да го видиш тоя USART и да си спестиш хамалогията? Имаш някаква примитивна защита от грешки и пак можеш да си ползваш прекъсване по Rx. Инициализацията на UART-a е 3-4 инструкции.


Пет Юли 10, 2009 10:36 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Авг 23, 2005 12:02 pm
Мнения: 3070
Местоположение: София
Мнение 
tolstolob написа:
А защо не първо да го видиш тоя USART и да си спестиш хамалогията? Имаш някаква примитивна защита от грешки и пак можеш да си ползваш прекъсване по Rx. Инициализацията на UART-a е 3-4 инструкции.


Една от причините - за комуникация използвам RB6 и RB7 крачета - същите, които се ползват и за ICSP. USART-а е на други крачета, а процесора е SMD, така че няма как да го програмирам извън платката, поне докато не подкарам всичко. Най-просто е така. Другите крачета стигат за останалото, а тия 2-те+MCLR и захранване, са изведени на куплунг, който използвам и по време на работа за същото.

Втората причина е че другия процесор - тоя, дето изпраща данните, е PIC12F629, а той USART няма. В същото време е с малко крачета, които ми вършат идеална работа, понеже се пести място.


Пет Юли 10, 2009 11:23 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение 
Е сега малко ще те пообъркам ама : тия пикове (до 18 серия включително) имат един (1) вектор на прекъсване. С други думи така или иначе в него се проверява кое от разрешените прекъсвания е настъпило. Ако програмата ти е написана така че след обработка на прекъсване веднага да се връща към основната програма е в сила написаното от колегите, но има вариант в който се проверява флага, изпълнява се ако е необходимо, след което се проверяв следващия флаг и т.н. В този случай ако по време на изпълнение на първото в редицата ти възникне второто и се вдигне флаг, то ще се изпълни и второто след като свърши с първото и т.н. Никога не забравяй да нулираш флага след обработка на прекъсването - става увиснация.


Съб Юли 11, 2009 4:24 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Фев 01, 2007 4:04 am
Мнения: 1539
Мнение 
И за да стане кашата пълна да споменем ,че докато се обработва едното прекъсване може някое друго или дори същото да се появи още няколко пъти, но това няма как да се разбере защото флага си е един.


Съб Юли 11, 2009 4:58 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение 
Възможно е ама, аз веднага след като го хвана в издънка (прексъването) веднага му бия един шамар и после му смятам бакиите. Ако пак реши да се прави на интересно при връщане в основната флага му пак ще го извика и така ... В този случай Nested преъсвания и гювеча става пълен :) До такива моменти не съм стигал все още :)


Съб Юли 11, 2009 5:06 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Фев 01, 2007 4:04 am
Мнения: 1539
Мнение 
Каквито и шамари да биеш при 2 и повече асинхронни прекъсвания винаги в един момент ще ти се появи "сляпо" петно. В повечето случаи няма да е критично но ако е нещо свързано с точно измерване или реакция ще е с грешка.


Съб Юли 11, 2009 5:25 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение 
Ееее, внимавам да няма такива издънки. Или ако има таква възможност почвам да правя други гимнастики за да не стават фаталитети.


Съб Юли 11, 2009 5:54 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 33 мнения ]  Отиди на страница 1, 2, 3  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни