реклама на сайте
подробности

 
 
> TNKernel - обработчики прерываний
yurmala
сообщение Sep 14 2011, 03:44
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 65
Регистрация: 9-02-11
Из: Трехгорный
Пользователь №: 62 814



Во всех примерах идущих с TNKernel все прерывания (от всех источников) обрабатываются в функции tn_cpu_irq_handler
Код
void tn_cpu_irq_handler(void)
{
register int irq_stat;
    irq_stat = VICIRQStatus;
    if((irq_stat & (1<<4)) > 0)        //-- Source - TIMER0
        {
                 ...
        }
    ...
    elseif((irq_stat & (1<<17)) > 0)        //-- Source - EINT3
        {
                 ...
        }
...

Правильно ли я понимаю, что так заложено в самой RTOS?
У меня не работает вызов обработчика после такой конструкции:
Код
    VICVectAddr17   = (U32)procISR_Handler;
    VICIntEnable    |= (1 << 17);
...
void  procISR_Handler (void) __irq
{
        ...
        VICVectAddr = 0;        
}


Просто хотелось бы все обработчики логически оформленных модулей вынести в эти отдельные модули (для миграции с одного проекта на другой в будущем...)

p.s.
Нет, я могу конечно у моего обработчика убрать _irq и в tn_cpu_irq_handler вызывать его как обычную процедуру:
Код
void tn_cpu_irq_handler(void)
{
register int irq_stat;
    irq_stat = VICIRQStatus;
    if((irq_stat & (1<<4)) > 0)        //-- Source - TIMER0
        {
                 ...
        }
    ...
    elseif((irq_stat & (1<<17)) > 0)        //-- Source - EINT3
        {
        procISR_Handler();
        }

но как-то не совсем модульно....имхо.

Сообщение отредактировал yurmala - Sep 14 2011, 04:17
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 2)
:-)
сообщение May 15 2012, 08:12
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 221
Регистрация: 23-10-05
Из: Мск
Пользователь №: 10 006



Любопытно, как в итоге вы обрабатываете прерывания?
Go to the top of the page
 
+Quote Post
Axel
сообщение May 19 2012, 07:05
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Функция tn_cpu_irq_handler() используется только в примерах. Реально в ней нет никакой небходимости ( в смысле RTOS). В TNKernel встроен только обрботчик системного таймера. Все остальные Вы можете оформлять обычным образом.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th June 2025 - 10:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01354 секунд с 7
ELECTRONIX ©2004-2016