Мне нежно реализовать на TimerTC задержку от 10-100 микросекунд, а я не пойму как там выставляются задержки. Объясните пожалуйста.
Код
void timer0_isr (void)
{
***
// мигнуть диодом
}
char InitTimer()
{
AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_TC0;// Enable Clock for TIM0
AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKEN | AT91C_TC_SWTRG;
AT91C_BASE_TC0->TC_CMR = 2 | AT91C_TC_CPCTRG;
AT91C_BASE_TC0->TC_RC = 0x0E; // ??
// TIM0 Interrupt: Mode and Vector with Lowest Priority and Enable
AT91C_BASE_AIC->AIC_SMR[AT91C_ID_TC0] = AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE | AT91C_AIC_PRIOR_HIGHEST;
AT91C_BASE_AIC->AIC_SVR[AT91C_ID_TC0] = (unsigned long) timer0_isr;
AT91C_BASE_AIC->AIC_IECR = (1 << AT91C_ID_TC0);
AT91C_BASE_TC0->TC_IER = AT91C_TC_CPCS;
return 1;
}
{
***
// мигнуть диодом
}
char InitTimer()
{
AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_TC0;// Enable Clock for TIM0
AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKEN | AT91C_TC_SWTRG;
AT91C_BASE_TC0->TC_CMR = 2 | AT91C_TC_CPCTRG;
AT91C_BASE_TC0->TC_RC = 0x0E; // ??
// TIM0 Interrupt: Mode and Vector with Lowest Priority and Enable
AT91C_BASE_AIC->AIC_SMR[AT91C_ID_TC0] = AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE | AT91C_AIC_PRIOR_HIGHEST;
AT91C_BASE_AIC->AIC_SVR[AT91C_ID_TC0] = (unsigned long) timer0_isr;
AT91C_BASE_AIC->AIC_IECR = (1 << AT91C_ID_TC0);
AT91C_BASE_TC0->TC_IER = AT91C_TC_CPCS;
return 1;
}
Здесь я пытаюсь получить 10 микросекунд, но это на самом деле не так. Что именно не так объясните. Как высчитывается коэффициент?