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

Mega8 Timer1 nie wywołuje przerwania overflow w AVR Studio 4.11 SP2

szikaka 05 Maj 2005 21:47 1440 11
REKLAMA
  • #1 1464909
    szikaka
    Poziom 14  
    Posty: 105
    Pomógł: 3
    Ocena: 8
    Witam
    najpierw kawalek kodu :)
    
    TCCR1A=0x00;
    TCCR1B=0x01;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    TIMSK=0x04;
    // przerwanie
    interrupt [TIM1_OVF] void timer1_ovf_isr(void)
    {
    // Place your code here
    lcd_full();       
    delay_ms(100);
    lcd_cls();
    }
    

    wektory przerwan

    RJMP __RESET
    RJMP _ext_int0_isr
    RJMP _ext_int1_isr
    RJMP 0
    RJMP 0
    RJMP _timer1_capt_isr
    RJMP 0
    RJMP 0
    RJMP _timer1_ovf_isr
    RJMP 0
    RJMP 0
    RJMP 0
    RJMP 0
    RJMP 0
    RJMP 0
    RJMP 0
    RJMP 0
    RJMP 0
    RJMP 0

    Kompilator CodeVision, procek jak juz mowilem Mega8 no i problem polega na tym ze podczas symulacji (avrstudio 4.11 SP2) przy przepelnieniu timera1 ustawia OCF1A i TOV1 w TIFR ale nie skacze do przerwania :( nie wiem juz co robic pomozcie !!
  • REKLAMA
  • #2 1464973
    yorek
    Poziom 12  
    Posty: 37
    Pomógł: 1
    Ocena: 1
    a przerwania włączasz? bit I w SREG ?
  • REKLAMA
  • #3 1464988
    szikaka
    Poziom 14  
    Posty: 105
    Pomógł: 3
    Ocena: 8
    oczywiscie
  • REKLAMA
  • #4 1465082
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    A te wektory w asm są konieczne ? Czy kompilator sam nie potrafi ich wstawić w odpowiednie miejsce ? Czy w "kawałku kodu" procedura główna jest zapętlona, czy wskakuje na przerwanie ?
  • #5 1465296
    szikaka
    Poziom 14  
    Posty: 105
    Pomógł: 3
    Ocena: 8
    Light'­­­­I napisał:
    A te wektory w asm są konieczne ? Czy kompilator sam nie potrafi ich wstawić w odpowiednie miejsce ? Czy w "kawałku kodu" procedura główna jest zapętlona, czy wskakuje na przerwanie ?

    wektory nie sa jawnie wklepywane w main.c ten fragment to czesc pliku vec automagicznie generowanego przez cvavr, zaraz za kawalkiem kodu jest instrukcja sei a po niej petelka while w ktorej sobie smiga procek jak nie ma co robic sama funkcja przerwania jest poza glowna funkcja
    na zycznie moge wkleic caly plik z kodem, ale wolalem tego oszczedzic i co bardziej zwiazane z T1 fragmenty przytoczyc

    pozdrawiam :)
  • #7 1467448
    Nawigator
    Poziom 33  
    Posty: 1923
    Pomógł: 167
    Ocena: 160
    Coś mi to przypomina nieustawiony stosik.
    Hę?
    Pozdr. N.
  • REKLAMA
  • #8 1467489
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    Nawigator napisał:
    Coś mi to przypomina nieustawiony stosik..
    no nie wiem, chyba kompilator C to takich jaj nie robi ? ;)
  • #9 1467493
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    Nawigator napisał:
    Coś mi to przypomina nieustawiony stosik.
    Hę?
    Pozdr. N.


    Tu się mówi o kodzie w C , a nie w Asm ;)
    Kompilator zadba nam o wskaźnik stosu.

    szikaka->
    A jak uruchamiasz symulację - "Run" czy "AutoStep" :?:
    U mnie Twój kod działa , jak ... Pan Atmel przykazał.

    Piotrek
  • #10 1467970
    szikaka
    Poziom 14  
    Posty: 105
    Pomógł: 3
    Ocena: 8
    zumek napisał:
    A jak uruchamiasz symulację - "Run" czy "AutoStep" :?:
    U mnie Twój kod działa , jak ... Pan Atmel przykazał.
    Piotrek


    najlpierw klikam na 'play' a pozniej juz z palca F11

    Ozyl :) zrobilem to jeszcze raz od nowa i zaczeo dzialac, nie wiem czemu...

    #1 tak na marginesie jak to obsewuje jak przypisze cos do TIMSK'a to pokazuje zawartosc rejestru od razu, jak zrobie ten sam manewr z TIFR to nie pokazuje, pewnie wystarczy doczytac(doszukac sie) ale moze ktos z szanownych kolegow... ;)

    #2 znacie moze jakies dobre faq, kurs etc odnosnie asemblera avr?? zaczalem analizowac kawalek kodu i musze przyznac ze nie ejst to szczegolnie skomplikowane, ale chetnie zdobylbym jakies solide podstawy

    pozdr.
  • #11 1467984
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    szikaka napisał:
    #2 znacie moze jakies dobre faq, kurs etc odnosnie asemblera avr?? zaczalem analizowac kawalek kodu i musze przyznac ze nie ejst to szczegolnie skomplikowane, ale chetnie zdobylbym jakies solide podstawy.
    http://www.elektronika.qs.pl/asm_prog001.html
  • #12 1469404
    Nawigator
    Poziom 33  
    Posty: 1923
    Pomógł: 167
    Ocena: 160
    1) no nie wiem, chyba kompilator C to takich jaj nie robi
    2) Tu się mówi o kodzie w C , a nie w Asm
    3) zrobilem to jeszcze raz od nowa i zaczeo dzialac, nie wiem czemu...

    Jeszcze jedno potwierdzenie ze C jest stałym źródłem niewytłumaczalnych problemów.
    Pozdr. N.

Podsumowanie tematu

✨ Problem dotyczył braku wywołania przerwania overflow timera1 w mikrokontrolerze AVR Mega8 podczas symulacji w AVR Studio 4.11 SP2 z użyciem kompilatora CodeVision. Konfiguracja rejestrów timer1 i włączenie przerwania (TIMSK=0x04) były poprawne, a w symulacji ustawiane były flagi OCF1A i TOV1 w rejestrze TIFR, jednak nie następowało przejście do procedury obsługi przerwania. Dyskusja wskazała na konieczność włączenia globalnych przerwań (bit I w SREG) oraz poprawne ustawienie wektorów przerwań, które w tym przypadku były automatycznie generowane przez CodeVision. Problem okazał się być związany z trybem uruchamiania symulacji w AVR Studio – po ponownym uruchomieniu i poprawnym użyciu funkcji "Run" oraz krokowania (F11) przerwanie zaczęło działać prawidłowo. Poruszono także kwestie obserwacji rejestrów w symulatorze oraz polecono źródła do nauki asemblera AVR. Podsumowując, problem wynikał z błędów w obsłudze symulacji, a nie z błędów w kodzie czy konfiguracji mikrokontrolera.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA