Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

RQ: ATTR_INTERRUPT_HANDLER: обекта на прекъсването
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=11161
Страница 1 от 1

Автор:  NikB [ Пон Мар 04, 2013 9:46 pm ]
Заглавие:  RQ: ATTR_INTERRUPT_HANDLER: обекта на прекъсването

(ДОПЪЛЕНО: по-долу ми обърнаха внимание, че не съм поясникл средата:
Става въпрос за AVR32, AT32UC3C2 и подобни.
Тия процесори имат по няколко UART интерфейса.
Въпросът ми е мога ли да присвоя един обработчик на прекъсване на всички UART интерфейси.
За да мога да направя това, трябва да знам при всяко конкретното влизане в обработчика от коя от прекъсванията (или от кой конкретен интерфейс) е предизвикано.
Как в обработчиците на прекъсването се определя от къде е дошло прекъсването?)

ОРИГИНАЛЕН ПОСТ:

ТОВА е обработчикът (простичко ехо):
Код:
ATTR_INTERRUPT_HANDLER static void UART_int_handler(void)
{
    U8 c;
    if (UART_ReadByte( DEBUG_USART, &c))
    {
        UART_Write( DEBUG_USART, 1, &c);
    }
}


ТОВА е инициализацията:
Код:
INTC_register_interrupt( UART_int_handler, irq, int_level);
, където irq-то е съответно на отворения USART

И СЕГА ВЪПРОСА: ИМА ЛИ МЕХАНИЗЪМ с който да знам от кой USART или поне от кое прекъсване влизам в обтаботчика?
ТРЯБВА МИ, за да знам от къде да чета байта (сега го чета от DEBUG_USART, някава тъпа константа).

БЛАГОДАРЯ!

Автор:  ike [ Вто Мар 05, 2013 12:37 am ]
Заглавие:  Re: RQ: ATTR_INTERRUPT_HANDLER: обекта на прекъсването

Отговора е: Да.

Автор:  NikB [ Вто Мар 05, 2013 12:53 am ]
Заглавие:  Re: RQ: ATTR_INTERRUPT_HANDLER: обекта на прекъсването

ike написа:
Отговора е: Да.

NikB написа:
...ТРЯБВА МИ, за да знам ...
БЛАГОДАРЯ!


Благодаря ти! Уверен съм, че може да поясниш с още 12-13 думи така, че да схвана.
И, защото беше любезен да ми помогнеш, и защото се надявам да имаш чувство за хумор :), и аз ще се опитам да ти помогна:
"ОтговорЪТ е да" - подлогът, това, което върши действието (в случея : "отговорЪТ"), се членува с пълен член, а членът в българския език е отзад.
(Само някой да не вземе да брои моите пропуски :):):))

Автор:  ike [ Вто Мар 05, 2013 1:37 am ]
Заглавие:  Re: RQ: ATTR_INTERRUPT_HANDLER: обекта на прекъсването

Преди ти да схванеш, трябва първо аз да схвана. Пишеш на Бейсик нали?

Автор:  NikB [ Вто Мар 05, 2013 8:56 am ]
Заглавие:  Re: RQ: ATTR_INTERRUPT_HANDLER: обекта на прекъсването

Благодаря ти за отзивчивостта, приемем иронията и сарказма :).

Ще ти обясня. Пиша на Фортран. Бейсикът е прекалено модерен.

А сега сериозно: май наистина не съм пояснил обкръжението, вярвал съм, че името на атрибута е достатъчно.
Става въпрос за AVR32, AT32UC3C2 и подобни.
Тия процесори имат по няколко UART интерфейса.
Въпросът ми е мога ли да присвоя един обработчик на прекъсване на всички UART интерфейси.
За да мога да направя това, трябва да знам при всяко конкретното влизане в обработчика от коя от прекъсванията (или от кой конкретен интерфейс) е предизвикано.

Автор:  miro_atc [ Вто Мар 05, 2013 10:19 am ]
Заглавие:  Re: RQ: ATTR_INTERRUPT_HANDLER: обекта на прекъсването

Има два варианта за прекъсванията - общ вектор за всички прекъсвания и отделни вектори...

Кой точно вариант е ще трябва да си провериш архитектурата на АВР32, но едни и същи периферии могат да бъдат вързани и по двата начина. Примерно SAM7 са с общ вектор щото е АРМ7, а SAM3 с отделни щото е куртекс. Но USАR-те им са едни и същи както и на AVRx...

При общ вектор, общо взето си проверяваш източника и му викаш "обработчика", естествено може да подадеш параметри за какво точно го викаш.
При отделни вектори може да ползваш "wrapers" не знам как ще ще го преведеш, но имаш usart1_ISR(), usart2_ISR() и т.н. които не правят нищо друго освен да извикат usart_ISR(usart x) със съответния параметър.

Автор:  NikB [ Вто Мар 05, 2013 1:44 pm ]
Заглавие:  Re: RQ: ATTR_INTERRUPT_HANDLER: обекта на прекъсването

miro_atc написа:
.....

Благодаря ти много за отзивчивостта, за компетентния и своевременен отговор!
Не всичко разбрах, но поне е ясно какво трябва да търся и да чета.

И най-много ми хареса идеята да направя отделни малки обработчици, които да викат общия универсален и всеобхватен обработчик, като му предават отделни параметри. Страхотно!

(Офф: Тая идея ми е много близка и изглежда толкова естествена, че ме е срам, че не ми е дошла в главата още снощи :? :D.
Напоследък си мисля, че преди, когато нямаше форуми, гугъл и интернет (и въобще - документация :) :) :) - преди 100 години) май идеите ми бяха повече и идваха по-бързо. Вероятно е от ЕГН-то.
Но се успокоявам, защото принината може да е и друга - на те времена не се налагаше да пиша едновременно на 5 езика, за няколко операционни системи и отделно - на C и асемблер за процесори от различни производители и фамилии.)

Автор:  Nikola Kirov [ Вто Мар 05, 2013 2:00 pm ]
Заглавие:  Re: RQ: ATTR_INTERRUPT_HANDLER: обекта на прекъсването

В Аtmel Software Framework имаш много примери. Отделно че в Atmel Studio 6 можеш лесно да си конфигурираш проект с използването на ASF. Там ще се ориентираш как се работи най удобно с прекъсванията на AVR32

Автор:  ike [ Вто Мар 05, 2013 2:10 pm ]
Заглавие:  Re: RQ: ATTR_INTERRUPT_HANDLER: обекта на прекъсването

http://www.ultimaserial.com/avr_lwip_var.html
До колкото виждам с това INTC_register_interrupt( UART_int_handler, irq, int_level); казваш при прекъсване irq да се извика UART_int_handler

До колкото виждам при AVR32 прекъсванията са отделни. При някои архитектури като влезнеш в прекъсване последователно проверяваш кои флагове са вдигнати последователно и ги обработваш, след което с инструкция ги сваляш. Ако не ги свалиш ръчно, веднага пак влиза в прекъсване. Тях трябва да ги обработваш по-бързо от колкото пристигат, иначе може да изтървеш някое прекъсване.

Едит: И никога не забравяй да споменаваш, кой ти е конкретно контролера и кой ти е компилатора и този компилатор под каква ОС е.

Автор:  miro_atc [ Вто Мар 05, 2013 2:31 pm ]
Заглавие:  Re: RQ: ATTR_INTERRUPT_HANDLER: обекта на прекъсването

Трябва да се чете... аз не ползвам AVR и не ми се чете ;-)

На пръв поглед изглежда като да може да се групират различни прекъсвания в един вектор. В "обработчика" на групата явно ще трябва да се чете interrupt cause или там каквото се чете, за да се разбере точния източник... И като знаеш кой е, т.е. дали е UART и кой UART може да извикаш "обработчик" за uart и му подадеш параметър...

Но пак казвам - трябва да се чете и да се види дали е така...

Автор:  NikB [ Вто Мар 05, 2013 4:32 pm ]
Заглавие:  Re: RQ: ATTR_INTERRUPT_HANDLER: обекта на прекъсването

БЛАГОДАРЯ за всички постове!

ike написа:
http://www.ultimaserial.com/avr_lwip_var.html...
Едит: И никога не забравяй да споменаваш, кой ти е конкретно контролера и кой ти е компилатора и този компилатор под каква ОС е.

Сутринта, като прочетох първия отговор, си прочетох темата и бях силно изненадан от лошата формулировка. По принцип не съм такъв човек :) и се извинявам на всички, на които съм губил времето да гадаят.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/