Разрешено только прерывания RXDONEINT. Там такой код:
CODE
void Ethernet_IRQHandler(void)
{
UREG i='0';
do
{
INTCLEAR=1UL<<3; //RxDoneInt
i++;
}
while(INTSTATUS_bit.RXDONEINT);
usart0_txc(i);
NVIC_ClrPend(NVIC_ETHR);
NVIC_SetPend(NVIC_RIT); //Ñòàðòóåì RIT_IRQHandler
}
{
UREG i='0';
do
{
INTCLEAR=1UL<<3; //RxDoneInt
i++;
}
while(INTSTATUS_bit.RXDONEINT);
usart0_txc(i);
NVIC_ClrPend(NVIC_ETHR);
NVIC_SetPend(NVIC_RIT); //Ñòàðòóåì RIT_IRQHandler
}
Неспеша кормлю девайсу по одному пакету (дабы быть уверенным, что никакого переполнения не происходит). В результате в консоль сыпется:
CODE
122212112121121112122222222112112211212222222121111....
Пуристы для тестов могут заменить usart0_txc на ногодрыг и наблюдать осциллографом тот же результат - импульсов то 1, то 2.
Если бы просто сделать
CODE
void Ethernet_IRQHandler(void)
{
INTCLEAR=1UL<<3; //RxDoneInt
NVIC_ClrPend(NVIC_ETHR);
NVIC_SetPend(NVIC_RIT); //Ñòàðòóåì RIT_IRQHandler
}
{
INTCLEAR=1UL<<3; //RxDoneInt
NVIC_ClrPend(NVIC_ETHR);
NVIC_SetPend(NVIC_RIT); //Ñòàðòóåì RIT_IRQHandler
}
то этот код часто (а то и вообще всегда) вызывается 2 раза - не сбрасывается флаг RxDoneInt, соответственно, сброс соответствующего бита в NVIC не помогает - не снят изначальный флаг, т.е. происходит опять поднятие флага в NVIC и последующее прерывание. Правда, на второй заход сброс таки происходит.
Вот такой код вроде (ну ибо на обозримом отрезке времени мне не удалось наблюдать двойной вызов) всегда вызывается один раз:
CODE
void Ethernet_IRQHandler(void)
{
INTSTATUS;
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
INTCLEAR=1UL<<3;//RxDoneInt
NVIC_ClrPend(NVIC_ETHR);
NVIC_SetPend(NVIC_RIT); //Ñòàðòóåì RIT_IRQHandler
}
{
INTSTATUS;
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
__no_operation();
INTCLEAR=1UL<<3;//RxDoneInt
NVIC_ClrPend(NVIC_ETHR);
NVIC_SetPend(NVIC_RIT); //Ñòàðòóåì RIT_IRQHandler
}
Ересь какая-то в общем. Другие биты не проверял.
Есть у кого какие мысли?
В общем-то такое поведение и не особо страшно, но уж очень стремно
