да асм обёртка есть :
Код
vTimerISREntry:
portSAVE_CONTEXT ; Save the context of the current task.
bl timer0_c_irq_handler ; Call the ISR routine.
portRESTORE_CONTEXT ; Restore the context of the current task -
; which may be different to the task that
; was interrupted.
вот обработчик на C:
Код
void timer0_c_irq_handler(void)
{
AT91PS_TC TC_pt = AT91C_BASE_TC0;
unsigned int dummy;
//* Acknowledge interrupt status
dummy = TC_pt->TC_SR;
//* Suppress warning variable "dummy" was set but never used
dummy = dummy;
// count_timer0_interrupt++;
//* Read the output state
vParTestToggleLED(3);
}
Настройка таймера и прерываний:
Код
void soft_uart_ini(void)
{
unsigned int dummy;
portENTER_CRITICAL();
{
//* First, enable the clock of the TIMER
AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1<< AT91C_ID_TC0 );
//* Disable the clock and the interrupts
AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKDIS;
AT91C_BASE_TC0->TC_IDR = 0xFFFFFFFF;
//* Clear status bit
dummy = AT91C_BASE_TC0->TC_SR;
//* Suppress warning variable "dummy" was set but never used
dummy = dummy;
//* Set the Mode of the Timer Counter
AT91C_BASE_TC0->TC_CMR = 4;
//* Enable the clock
AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKEN;
AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_TC0, TIMER0_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, vTimerISREntry);
AT91C_BASE_TC0->TC_IER = AT91C_TC_CPCS; // IRQ enable CPC
AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_TC0);
AT91C_BASE_TC0->TC_CCR = AT91C_TC_SWTRG;
}
portEXIT_CRITICAL();
}
Ни светодиодом не моргает ни на точках останова не останавливается.