ATtiny2313 und Interrupt

Alles rund um Computertechnik, LEDs, und und und....
Antworten
LotharK

ATtiny2313 und Interrupt

Beitrag von LotharK » Freitag 23. Februar 2007, 09:34

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

Benutzeravatar
Harry
Forumane
Beiträge: 2912
Registriert: Dienstag 4. Februar 2003, 12:27
Wohnort: Mache gern Urlaub an der NordOstsee
Kontaktdaten:

Beitrag von Harry » Freitag 23. Februar 2007, 11:01

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

LotharK

ATtiny2313 und Interrupt

Beitrag von LotharK » Freitag 23. Februar 2007, 12:47

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

wneudert

ATtiny2313 und Interrupt

Beitrag von wneudert » Sonntag 25. März 2007, 21:49

Hallo,
schreiben in das PIN-Register funktioniert auch, der entsprechende PIN wird dann getoggelt .....

Grüße
Wolfgang

Antworten