Здравствуйте!
в общем проблема такая: был проект рабочий под AT91SAM7S256, написанный на IAR. Недавно перешли на GCC, скомпилили проект, залили в девайс и обнаружилось, что прерывания по таймеру совсем не работают. Куда копать не очень понятно :1111493779:
функция инициализации прерывания
void PIO_interrupt(void){
volatile unsigned int q;
AT91C_BASE_TC2 -> TC_CCR = AT91C_TC_CLKDIS;
AT91C_BASE_TC2 -> TC_IDR = 0x000000FF;
q = AT91C_BASE_TC2 -> TC_SR;
AT91C_BASE_TC2 -> TC_CMR = AT91C_TC_CLKS_TIMER_DIV1_CLOCK
| AT91C_TC_CPCTRG
| AT91C_TC_BURST_NONE;
AT91C_BASE_TC2 -> TC_CCR = AT91C_TC_CLKEN;
AT91C_BASE_TC2 -> TC_RC = 3000;
AT91C_BASE_AIC -> AIC_IDCR = (1 << AT91C_ID_TC2);
AT91C_BASE_AIC -> AIC_SVR[AT91C_ID_TC2] = (unsigned int)timer2_c_irq_handler;
AT91C_BASE_AIC -> AIC_SMR[AT91C_ID_TC2] = (2 << 0);
AT91C_BASE_AIC -> AIC_ICCR = (1 << AT91C_ID_TC2);
AT91C_BASE_TC2 -> TC_IER = AT91C_TC_CPCS;
AT91C_BASE_AIC -> AIC_IECR = (1 << AT91C_ID_TC2);
AT91C_BASE_AIC -> AIC_ISCR = (1 << AT91C_ID_TC2);
AT91C_BASE_TC2 -> TC_CCR = AT91C_TC_SWTRG;
}
само прерывание
void timer2_c_irq_handler(void){
volatile unsigned int q;
q = AT91C_BASE_TC2->TC_SR;
if(AT91C_BASE_PIOA->PIO_PDSR & LDAC_signal)
AT91C_BASE_PIOA->PIO_CODR = LDAC_signal;
else
AT91C_BASE_PIOA->PIO_SODR = LDAC_signal;
AT91C_BASE_AIC->AIC_EOICR = 0;
}
ткните носом, где не правильно или куда нужно копать, чтобы запустить его
Спасибо!