Добрый день, уважаемый ALL
Разбираюсь с micrium OS - пожалуйста, ткните носом в страницу мануала.
мозги уже кипят - видимо, чего-то упорно не хотят замечать

Проблема в следующем - при попытке навесить свой обработчик прерывания на ком-порт под uCos-ом задача работает до первого вызова OSTimeDlyHMSM(), потом все зависает в цикле OS_TaskIdle().
вот код, запускающий обработчик
Код
AT91F_AIC_ConfigureIt( AT91C_BASE_AIC, AT91C_ID_US0, 7 , AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL | AT91C_AIC_PRIOR_LOWEST, usart0_irq_handler);
AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_US0);
вот сам обработчик
Код
void usart0_irq_handler(void)
{
// calling irq processor
if (_comports [ 0 ])
{
_comports [ 0 ] -> __irq_processor();
}
/////////////////////
unsigned long rx_data = AT91C_BASE_PITC->PITC_PIVR; /* Read the interrupt source, ignore the value*/
AT91C_BASE_AIC->AIC_IVR = 0; /* Debug variant of IVR (protect mode is used)*/
AT91C_BASE_AIC->AIC_ICCR = AT91C_ID_US0; /* Clear USART0 interrupt */
AT91C_BASE_AIC->AIC_EOICR = 0; /* Signal end of interrupt */
//* Reset the satus bit
AT91C_BASE_US0->US_CR = AT91C_US_RSTSTA;
}
Если убрать вызов
Код
AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_US0);
т.е. не включать прерывание в AIC, то все работает - понятно, кроме собственно обработчика.
видимо, ошибся в обработчике, но не могу понять - где ?
----
добавил в обработчик вызовы OSIntEnter() / OSIntExit() - не помогло
Сообщение отредактировал _dem - Mar 2 2007, 16:56