Цитата(RuZaKi @ Mar 12 2008, 15:59)

Приведите плиз полный код для настройки прирываний от таймера.
void InitTimerInt(void) {
unsigned int dummy;
AT91C_BASE_PMC -> PMC_PCER = 1 << AT91C_ID_TC0;//Enable the clock of the timer0 module ([PMC_PCER]: id = 12)
AT91C_BASE_TC0 -> TC_CCR = AT91C_TC_CLKDIS; //Disable clock [TC_CCR\CLKDIS {p366}] =1
AT91C_BASE_TC0 -> TC_IDR = 0x000000FF;//Disable all interrupts[TC_IDR {p379}]
dummy = AT91C_BASE_TC0 -> TC_SR;//Clear all status by read [TC_SR {p376}]
dummy=dummy;
AT91C_BASE_TC0 -> TC_CMR = AT91C_TC_CLKS_TIMER_DIV5_CLOCK | AT91C_TC_CPCTRG;
AT91C_BASE_TC0 -> TC_CCR = AT91C_TC_CLKEN; //Enable clock [TC_CCR\CLKEN {p366}] =1
AT91C_BASE_TC0 -> TC_RC = 937;//Period/MCK/1024 = 46875 (48 MHz / 1024 / 46875 = 1 sec)
void (*handler)(void);
handler = timer0_irq_handler;
AT91C_BASE_AIC -> AIC_IDCR = (1 << AT91C_ID_TC0);//Disable the interrupt on the interrupt controller
AT91C_BASE_AIC -> AIC_SVR[AT91C_ID_TC0] = (unsigned int)handler;//Interrupt handler routine pointer
AT91C_BASE_AIC -> AIC_SMR[AT91C_ID_TC0] = (2 << 0)|(5 << 5);//(priority =1);[AIC_SMR\SRCTYPE]=0 (Level sensitive)
AT91C_BASE_AIC -> AIC_ICCR = (1 << AT91C_ID_TC0);//[AIC_ICCR\PID12 {p146}]Clear the interrupt
AT91C_BASE_TC0 -> TC_IER = AT91C_TC_CPCS; //[TC_IER\CPCS[4]]=1 (RC Compare IRQ enable)
AT91C_BASE_AIC ->AIC_IECR = (1<<AT91C_ID_TC0);//Interrupt enable [AIC_IECR\PID12 {p145}]=1
AT91C_BASE_AIC -> AIC_ISCR = (1 << AT91C_ID_TC0);//Generate interrupt by software [AIC_ISCR\PID12 {p147}]=1
AT91C_BASE_TC0 -> TC_CCR = AT91C_TC_SWTRG;//Start timer [TC_CCR\SWTRG {p366}] =1
}
void timer0_irq_handler(void){
unsigned int dummy;
dummy = AT91C_BASE_TC0 -> TC_SR;//Acknowledge interrupt status
dummy = dummy;//Suppress warning <<variable "dummy" was set but never used>>
.
.
.
AT91C_BASE_AIC -> AIC_EOICR = AT91C_ID_TC0;
}