Witam!
Od kilku dni próbuje opanować timery oraz przerwania od nich w moim ARMie. Kod programu napisałem na podstawie kilku dokumentów i wg datasheet'a od ARM'a powinno wszystko działać a nie działa. Może komuś uda się wychwycić co robię nie tak i co zrobić żeby wykonała sie obsługa przerwania od timera 0 dla następującego programu:
Od kilku dni próbuje opanować timery oraz przerwania od nich w moim ARMie. Kod programu napisałem na podstawie kilku dokumentów i wg datasheet'a od ARM'a powinno wszystko działać a nie działa. Może komuś uda się wychwycić co robię nie tak i co zrobić żeby wykonała sie obsługa przerwania od timera 0 dla następującego programu:
unsigned int dummy, licznik;
__ramfunc void t0_irq_handler(void)
{
dummy = AT91C_BASE_TC0->TC_SR;
dummy=dummy;
licznik++;
if (licznik>1000){
AT91C_BASE_PIOA->PIO_ODSR^=(1<<17); //zapalanie i gaszenie LEDa
licznik=0;
}
}
int main()
{
AT91C_BASE_PMC->PMC_PCER=(1<<AT91C_ID_TC0);
AT91C_BASE_TC0->TC_CCR=AT91C_TC_CLKDIS;
AT91C_BASE_TC0->TC_IDR=0xffffffff;
dummy = AT91C_BASE_TC0->TC_SR;
dummy = dummy;
AT91C_BASE_TC0->TC_CMR=AT91C_TC_CLKS_TIMER_DIV1_CLOCK; //|AT91C_TC_WAVE|AT91C_TC_WAVESEL_UP_AUTO|AT91C_TC_CPCTRG;
AT91C_BASE_TC0->TC_CCR=AT91C_TC_CLKEN; //|AT91C_TC_SWTRG;
AT91F_AIC_ConfigureIt(AT91C_BASE_AIC, AT91C_ID_TC0, 5, AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, t0_irq_handler);
AT91C_BASE_TC0->TC_IER = AT91C_TC_CPCS;
AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_TC0);
AT91C_BASE_TC0->TC_CCR = AT91C_TC_SWTRG ;
for(;;){
}
}