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 zusammengesucht.
.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
ATtiny2313 und Interrupt
- Harry
- Forumane
- Beiträge: 2912
- Registriert: Dienstag 4. Februar 2003, 12:27
- Wohnort: Mache gern Urlaub an der NordOstsee
- Kontaktdaten:
Auf die Schnelle fällt mir nichts auf. Allerdings hatte ich ein ähnliches Problem beim ATtiny25. Den Fehler habe ich mit Hilfe des Simulators im AVR-Studio gefunden. Da geht auch SingleStep durch C-Code oder auch Assembler-Code. Kann ich nur empfehlen.
Nachtrag: mir fehlt eine Initialisierung der Portpins als Ein- und Ausgänge. Und OUT PIND irritiert mich, weil AVR Assembler das so sieht:
PIND = Portpins lesen (input)
PORTD = Portpins schreiben (output)
Viele Grüße
Harry
Nachtrag: mir fehlt eine Initialisierung der Portpins als Ein- und Ausgänge. Und OUT PIND irritiert mich, weil AVR Assembler das so sieht:
PIND = Portpins lesen (input)
PORTD = Portpins schreiben (output)
Viele Grüße
Harry
ATtiny2313 und Interrupt
Hallo Harry,
ups, natürlich hast du mit dem PORT Recht. Der Fehler war aber
EIFA. Ich habe es gegen GIMSK ausgetauscht und es funktioniert.
Danke für deine Mühe - LotharK
ups, natürlich hast du mit dem PORT Recht. Der Fehler war aber
EIFA. Ich habe es gegen GIMSK ausgetauscht und es funktioniert.
Danke für deine Mühe - LotharK
ATtiny2313 und Interrupt
Hallo,
schreiben in das PIN-Register funktioniert auch, der entsprechende PIN wird dann getoggelt .....
Grüße
Wolfgang
schreiben in das PIN-Register funktioniert auch, der entsprechende PIN wird dann getoggelt .....
Grüße
Wolfgang