Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: TNKernel - обработчики прерываний
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
yurmala
Во всех примерах идущих с 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();
        }

но как-то не совсем модульно....имхо.
:-)
Любопытно, как в итоге вы обрабатываете прерывания?
Axel
Функция tn_cpu_irq_handler() используется только в примерах. Реально в ней нет никакой небходимости ( в смысле RTOS). В TNKernel встроен только обрботчик системного таймера. Все остальные Вы можете оформлять обычным образом.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.