надо периодически включать таймер для семплирования на 76800 - посемплировать секунды 3 и отключить.
static void __start_sample_timer(void) {
vu32_t w;
w = SAM256_TMR->SR1; // clear int
// go!
SAM256_PMC->PCER = TC1_PH_ID ; // enable tmr1 **********
SAM256_TMR->IER1 = (1ul << 4); //
SAM256_TMR->CCR1 = 1 ; // clk en
SAM256_TMR->CCR1 = 4 ; // clk en + go!
}
static void __stop_sample_timer(void) {
vu32_t w;
SAM256_TMR->CCR1 = 2 ; // clk dis
SAM256_PMC->PCDR = TC1_PH_ID ; // disble tmr1
SAM256_TMR->IDR1 = (1ul << 4); //
w = SAM256_TMR->SR1; // clear int
}
и IRQ
__irq void SoftUart_Irq(void) {
dw = SAM256_TMR->SR1; //clr RC1 cmp int
//////////
TOGGLE_PIN()
.........................
SAM256_AIC->EOICR = 0; /* End interrupt */
}
ппосле нескольких пар вызовов проц навечно уходить в IRQ - выходит и обратно в него.
если в __start_sample_timer строчку SAM256_PMC->PCER = TC1_PH_ID
вынести в начало, а в __stop_sample_timer строчку SAM256_PMC->PCDR = TC1_PH_ID в конец, то все нормально.
По видимому в какойто момент срабатывает прерывание, однако потом я таймер через PMC отрубаю и сигнал прерывания уже очистить не могу.
Такая вот засада по невнимательности могет быть...