Почему в теле обработчика не видится статус АЦП-а TWI-я и др.???
__arm void timer0_c_irq_handler(void) { u32 dummy; dummy = AT91C_BASE_TC0 -> TC_SR;//Acknowledge interrupt status dummy = dummy;//Suppress warning <<variable "dummy" was set but never used>> timer0_int_counter++; AT91C_BASE_PIOA -> PIO_ODSR = (u32)(timer0_int_counter<<31);//ODSR write
AT91F_ADC_StartConversion(AT91C_BASE_ADC); while(!((AT91F_ADC_GetStatus(AT91C_BASE_ADC))&(1<<last_ch)));// ВОТ ЗДЕСЬ ЗАТЫК мертвый!!!
STATUS[7] = (u8)(AT91F_ADC_GetConvertedDataCH4(AT91C_BASE_ADC)); STATUS[8] = (u8)((AT91F_ADC_GetConvertedDataCH4(AT91C_BASE_ADC)) >> 8);
AT91C_BASE_AIC -> AIC_EOICR = AT91C_ID_TC0; } //****************************************************************************** void timer0_init(void) { unsigned int dummy; AT91C_BASE_PMC -> PMC_PCER = 1 << 12;//Enable the clock of the timer0 module ([PMC_PCER]: id = 12) AT91C_BASE_TC0 -> TC_CCR = 1 << 1;//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;//Suppress warning variable "dummy" was set but never used AT91C_BASE_TC0 -> TC_CMR = (1 << 14)|4;//CLKI[3]=0;BURST[5:4]=0;LDBSTOP[6]=0; //LDBDIS[7]=0;ETRGEDG[9:8]=0;ABETRG[10]=0;CPCTRG[14]=1;WAVE[15]=0; //LDRA[17:16]=0;LDRB[19:18]=0 AT91C_BASE_TC0 -> TC_CCR = 1 << 0;//Enable clock [TC_CCR\CLKEN {p366}] =1 AT91C_BASE_TC0 -> TC_RC = 46875;//Period/MCK/1024 = 46875 (48 MHz / 1024 / 46875 = 1 sec) void (*handler)(void); handler = timer0_c_irq_handler; AT91C_BASE_AIC -> AIC_IDCR = (1 << 12);//Disable the interrupt on the interrupt controller AT91C_BASE_AIC -> AIC_SVR[12] = (unsigned int)handler;//Interrupt handler routine pointer AT91C_BASE_AIC -> AIC_SMR[12] = (1 << 0)|(1 << 5);//(priority =1);[AIC_SMR\SRCTYPE]=0 (Level sensitive) AT91C_BASE_AIC -> AIC_ICCR = (1 << 12);//[AIC_ICCR\PID12 {p146}]Clear the interrupt AT91C_BASE_TC0 -> TC_IER = (1 << 4 ); //[TC_IER\CPCS[4]]=1 (RC Compare IRQ enable) AT91C_BASE_AIC -> AIC_IECR = (1 << 12);//Interrupt enable [AIC_IECR\PID12 {p145}]=1 AT91C_BASE_AIC -> AIC_ISCR = (1 << 12);//Generate interrupt by software [AIC_ISCR\PID12 {p147}]=1 AT91C_BASE_TC0 -> TC_CCR = (1 << 2 );//Start timer [TC_CCR\SWTRG {p366}] =1 }
А в main все эти биты выдны сразу....
|