Неужели никто не сталкивался с таким?

вот код прерывания CAN(из примеров Keil):
Код
void CAN_Handler(void) __irq
{
CANStatus = CAN_RX_SR;
if ( CANStatus & (1 << 8) )
{
CAN1RxCount++;
CAN_ISR_Rx1();
}
if ( CANStatus & (1 << 9) )
{
CAN2RxCount++;
CAN_ISR_Rx2();
}
if ( CAN1GSR & (1 << 6 ) )
{
/* The error count includes both TX and RX */
CAN1ErrCount = (CAN1GSR >> 16 );
}
if ( CAN2GSR & (1 << 6 ) )
{
/* The error count includes both TX and RX */
CAN2ErrCount = (CAN2GSR >> 16 );
}
VICVectAddr = 0; /* Acknowledge Interrupt */
return;
}
Вот например по пробуждению по линии EINT0 вызывается вот такая функция:
Код
void EINT0_Handler (void) __irq
{
EXTINT |= EINT0; /* clear interrupt */
VICVectAddr = 0;
}
EXTINT |= EINT0; вот как будто такой строки не хватает для обнуления прерывания в CAN, но ничего подобного в регистрах не нашел. Что обнулить\сбросить не пойму.
Сообщение отредактировал jekler - Jun 16 2010, 07:13