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

 
 
> 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



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

 


RSS Текстовая версия Сейчас: 3rd July 2025 - 04:49
Рейтинг@Mail.ru


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