Во всех примерах идущих с 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