Witam, ostatnio mialem mozliwosc pracowania na mikrokontrolerze msp430F5438. Chcialem obsluzyc timer A1 w trybie up/down.
konfiguracja:
TA1CCR0 = time;
//additional div=8
TA1EX0 = TAIDEX_7;
//enable interrupts while compare
TA1CCTL0 = CCIE;
//set ACLK, div=8, up/down mode, clear
TA1CTL = TASSEL0 + ID_3 + MC_3 + TACLR;
W obsludze jest blyskanie led:
#pragma vector=TIMER1_A1_VECTOR
__interrupt void Timer_A1 (void)
{
//blinking led
if(light_flag) {
P1OUT = 0x0;
light_flag = 0;
} else {
P1OUT = 0x1;
light_flag = 1;
}
}
Timer dziala ale nie do konca, timer powinien zliczac do wartosci time i w dol do zera, a nastepnie generowac przerwanie. Po wystartowaniu timera, zglaszane jest przerwanie po zliczeniu do wartosci "time"; powinno to nastapic po 2-krotnie dluzszym czasie. Co ciekawe tak sie dzieje w kolejnych zliczeniach licznika. Jedynie w tym pierwszym zliczaniu wystepuje rozbieznosc.
Moze ktos spodkal sie juz z podobnym problemem ?
konfiguracja:
TA1CCR0 = time;
//additional div=8
TA1EX0 = TAIDEX_7;
//enable interrupts while compare
TA1CCTL0 = CCIE;
//set ACLK, div=8, up/down mode, clear
TA1CTL = TASSEL0 + ID_3 + MC_3 + TACLR;
W obsludze jest blyskanie led:
#pragma vector=TIMER1_A1_VECTOR
__interrupt void Timer_A1 (void)
{
//blinking led
if(light_flag) {
P1OUT = 0x0;
light_flag = 0;
} else {
P1OUT = 0x1;
light_flag = 1;
}
}
Timer dziala ale nie do konca, timer powinien zliczac do wartosci time i w dol do zera, a nastepnie generowac przerwanie. Po wystartowaniu timera, zglaszane jest przerwanie po zliczeniu do wartosci "time"; powinno to nastapic po 2-krotnie dluzszym czasie. Co ciekawe tak sie dzieje w kolejnych zliczeniach licznika. Jedynie w tym pierwszym zliczaniu wystepuje rozbieznosc.
Moze ktos spodkal sie juz z podobnym problemem ?