В примере атмела прерывание настраивается вот такой функцией
Код
IRQ_ConfigureIT(AT91C_ID_RTT, 0, RTT_IRQHandler);
RTT_IRQHandler - функция обработчик .
Она хоть и передайтся в IRQ_ConfigureIT, нотам ни как не используется. Выходит , это работать не будет ?! Может кто-нибудь дать работающий пример ?
Код
void IRQ_ConfigureIT(
unsigned int source,
//unsigned int preemptionPriority,
//unsigned int subPriority,
unsigned int priority,
IntFunc handler)
{
unsigned int priGroup = __NVIC_PRIO_BITS;
unsigned int nPre = 8 - priGroup;
unsigned int nSub = priGroup;
unsigned int preemptionPriority;
unsigned int subPriority;
unsigned int IRQpriority;
preemptionPriority = (priority & 0xff00) >> 8;
subPriority = (priority & 0xff);
// Disable the interrupt first
NVIC_DisableIRQ((IRQn_Type)source);
// Clear any pending status
NVIC_ClearPendingIRQ((IRQn_Type)source);
// Configure interrupt handler
//if (handler == 0) handler = IrqHandlerNotUsed;
// GetExceptionTable()[NVIC_IRQ_HANDLER_INDEX + source] = handler;
if (subPriority >= (0x01 << nSu)
subPriority = (0x01 << nSu - 1;
if (preemptionPriority >= (0x01 << nPre))
preemptionPriority = (0x01 << nPre) - 1;
IRQpriority = (subPriority | (preemptionPriority << nSu);
NVIC_SetPriority((IRQn_Type)source, IRQpriority);
}