logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[ATMEGA8][avr gcc] Timer1

mgradzki 06 Wrz 2008 23:09 1973 2
  • #1 5512421
    mgradzki
    Poziom 16  
    Witam
    Napisałem kilka linijek kodu, który ma działać jako generator częstotliwości z częstotliwością regulowaną przez SPI przez inny procesor.

    Mam zadeklarowaną zmienną globalną:
     unsigned int tim_reg_Val=3030


    i zainicjowany timer1:
    
    TIMSK=(1<<TOIE1); 
    TCNT1=tim_reg_Val;
    TCCR1B=0b011;
    sei();
    



    Przełączanie stanu wyjścia załatwiam w obsłudze przerwania:
    
    SIGNAL (SIG_OVERFLOW1) 
    {
    TCNT1=tim_reg_Val; //regulacja czasu przełączenia
    PORTC^=_BV(5); //przełączenie wyjścia
    } 
    


    Zmienna tim_reg_Val przychodzi po SPI (na pewno przychodzi, bo wyrzuciłem sobie jej wartość na UART). Po otrzymaniu zmiennej generator nie zmienia częstotliwości - w procedurze obsługi przerwania od timera1 do TCNT1 zawsze wpisywane jest ustalone na początku 3030
    Próbowałem nawet mało subtelnie zmienić wartość zmiennej tim_reg_Val w taki sposób:

    
    int main(void)
    { 
    ...
    ...
    while(1)  
     { 
       tim_reg_Val=60000;
       ...
     }
    }
    

    ale dalej bez zmian.
    Co zrobić, aby przy każdym uruchomieniu obsługi przerwania od timera1 do TCNT1 wpisyawna była aktualna wartość zmiennej tim_reg_Val ??
  • Pomocny post
    #2 5512488
    acid12
    Poziom 21  
    spr dodać 'volatile' przy deklaracji zmiennej, możliwe że kompilator optymalizując wpisuje na stałe wartość zadeklarowaną na początku, w przerwaniu jej wartość się nie zmienia, dla kompilatora jest ona w tym miejscu jako stała ...
  • #3 5512601
    mgradzki
    Poziom 16  
    acid12 napisał:
    spr dodać 'volatile' przy deklaracji zmiennej, możliwe że kompilator optymalizując wpisuje na stałe wartość zadeklarowaną na początku, w przerwaniu jej wartość się nie zmienia, dla kompilatora jest ona w tym miejscu jako stała ...



    :spoko:
    Kojarzyłem, że chodzi o dadonie tego słowa kluczowego w deklaracji zmiennej, tylko nie mogłem sobie go przypomnieć. Już planowałem podziałać na wskaźnikach.
REKLAMA