-         

Ergebnis 1 bis 4 von 4

Thema: ATtiny2313 ind INTERRUPT

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    23.02.2007
    Beiträge
    59

    ATtiny2313 ind INTERRUPT

    Anzeige

    Hallo Leute,

    seit ein paar Tagen beschäftige ich mich mit Controllern von ATM. Ich habe mir dazu das STK500 gekauft.

    Schon bei dem Versuch, den Interrupt eines ATtiny2313 anzusprechen, scheitere ich kläglich. Folgenden Code habe ich mir dazu zusammengestellt.

    .NOLIST
    .INCLUDE "tn2313def.inc"
    .LIST
    ; Universalregister definieren
    .DEF mp = R16

    ; Reset-Vektor auf Adresse 0000

    rjmp main
    rjmp Int00 ; Int0-Interrupt
    rjmp int01 ; Int1-Interrupt
    reti ; TC1-Capture
    reti ; TC1-Compare A
    reti ; TC1-Compare B
    reti ; TC1-Overflow
    reti ; Timer/Counter 0 Overflow, mein Sprung-Vektor
    reti ; Serial Transfer complete
    reti ; UART Rx complete
    reti ; UART Data register empty
    reti ; UART Tx complete
    reti ; Analog Comparator

    ;Interruptroutine fuer INT0 und INT1

    Int00:
    in ri,SREG ; Rette den Inhalt des Flag-Registers
    ldi mp,0x0 ; Initiate Timer/Counter 0 Vorteiler
    ldi mp, 0xF0
    OUT PIND, mp ; Zur Kontrolle einige LEDs schalten
    out SREG,ri ; Stelle Flag-Register wieder her
    reti

    Int01:
    in ri,SREG ; Rette den Inhalt des Flag-Registers
    ldi mp,0x0 ; Initiate Timer/Counter 0 Vorteiler
    ldi mp, 0x0F
    OUT PIND, mp ; Zur Kontrolle einige LEDs schalten
    out SREG,ri ; Stelle Flag-Register wieder her
    reti

    ; Hauptprogramm beginnt hier

    main:
    ldi mp,LOW(RAMEND) ;Initiate Stackpointer
    out SPL,mp ; wegen Interrupts und Unterprogr.


    ; Interrupts 0 und 1 freigeben

    ldi mp, 0b00001010 ; INT0 und INT1 konfigurieren
    out MCUCR, mp

    ldi mp, 0b11000000 ; INT0 und INT1 aktivieren
    out EIFR, mp

    sei ; Gib Interrupts im Status-Register frei

    loop:
    NOP ; Schicke CPU schlafen
    rjmp loop

    Eigentlich sollte er erst mal nichts anderes tun, als bei Signal an PIND2 und PIND3 auf die Interrupts zu reagieren.

    Kann mir mal bitte jemand sagen, wo da der Fehler liegt?

    MfG LotharK

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Was ist ri? Stehen die DDRs der POorts auf OUT?
    Disclaimer: none. Sue me.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    10.02.2005
    Ort
    eastside, L.E.
    Alter
    46
    Beiträge
    104
    dazu kommt noch:

    ldi mp, 0b11000000 ; INT0 und INT1 aktivieren
    out EIFR, mp

    das richtige Register hierfür ist GIMSK

    Du schaltest in Deinen Interuptroutinen anschließend die INT-Eingabepins, das löst dann den Interupt neu aus.

    greetz Rajko

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    23.02.2007
    Beiträge
    59
    Danke, GIMSK wars. Jetzt funktioniert es. DDRD steht auf 0x0C.
    (PIND 2 und 3 als Eingang). Ich hoffe, ich habe das richtig interpretiert.

    Danke für Eure Hilfe - LotharK

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •