Отговори на тема  [ 11 мнения ] 
RQ: ATTR_INTERRUPT_HANDLER: обекта на прекъсването 
Автор Съобщение
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Сеп 25, 2004 10:32 pm
Мнения: 710
Мнение 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, някава тъпа константа).

БЛАГОДАРЯ!


Последна промяна NikB на Вто Мар 05, 2013 8:59 am, променена общо 3 пъти



Пон Мар 04, 2013 9:46 pm
Профил ICQ WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Фев 04, 2005 9:59 pm
Мнения: 6019
Местоположение: София
Мнение Re: RQ: ATTR_INTERRUPT_HANDLER: обекта на прекъсването
Отговора е: Да.

_________________
Warriors of the Night, ASSEMBLER!!!


Вто Мар 05, 2013 12:37 am
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Сеп 25, 2004 10:32 pm
Мнения: 710
Мнение Re: RQ: ATTR_INTERRUPT_HANDLER: обекта на прекъсването
ike написа:
Отговора е: Да.

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


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


Вто Мар 05, 2013 12:53 am
Профил ICQ WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Фев 04, 2005 9:59 pm
Мнения: 6019
Местоположение: София
Мнение Re: RQ: ATTR_INTERRUPT_HANDLER: обекта на прекъсването
Преди ти да схванеш, трябва първо аз да схвана. Пишеш на Бейсик нали?

_________________
Warriors of the Night, ASSEMBLER!!!


Вто Мар 05, 2013 1:37 am
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Сеп 25, 2004 10:32 pm
Мнения: 710
Мнение Re: RQ: ATTR_INTERRUPT_HANDLER: обекта на прекъсването
Благодаря ти за отзивчивостта, приемем иронията и сарказма :).

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

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


Вто Мар 05, 2013 8:56 am
Профил ICQ WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение Re: RQ: ATTR_INTERRUPT_HANDLER: обекта на прекъсването
Има два варианта за прекъсванията - общ вектор за всички прекъсвания и отделни вектори...

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

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


Вто Мар 05, 2013 10:19 am
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Сеп 25, 2004 10:32 pm
Мнения: 710
Мнение Re: RQ: ATTR_INTERRUPT_HANDLER: обекта на прекъсването
miro_atc написа:
.....

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

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

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


Вто Мар 05, 2013 1:44 pm
Профил ICQ WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение Re: RQ: ATTR_INTERRUPT_HANDLER: обекта на прекъсването
В Аtmel Software Framework имаш много примери. Отделно че в Atmel Studio 6 можеш лесно да си конфигурираш проект с използването на ASF. Там ще се ориентираш как се работи най удобно с прекъсванията на AVR32


Вто Мар 05, 2013 2:00 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Фев 04, 2005 9:59 pm
Мнения: 6019
Местоположение: София
Мнение 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 прекъсванията са отделни. При някои архитектури като влезнеш в прекъсване последователно проверяваш кои флагове са вдигнати последователно и ги обработваш, след което с инструкция ги сваляш. Ако не ги свалиш ръчно, веднага пак влиза в прекъсване. Тях трябва да ги обработваш по-бързо от колкото пристигат, иначе може да изтървеш някое прекъсване.

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

_________________
Warriors of the Night, ASSEMBLER!!!


Вто Мар 05, 2013 2:10 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение Re: RQ: ATTR_INTERRUPT_HANDLER: обекта на прекъсването
Трябва да се чете... аз не ползвам AVR и не ми се чете ;-)

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

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


Вто Мар 05, 2013 2:31 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Сеп 25, 2004 10:32 pm
Мнения: 710
Мнение Re: RQ: ATTR_INTERRUPT_HANDLER: обекта на прекъсването
БЛАГОДАРЯ за всички постове!

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

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


Вто Мар 05, 2013 4:32 pm
Профил ICQ WWW
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 11 мнения ] 

Кой е на линия

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


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

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