External Interrupts beim Tiny4313

Gast #3047309
Lesenswert?

Bisher habe ich mit dem AVR Tiny24/44/84 erfolgreich gearbeitet.
Da ich für mein neues Projekt ein paar mehr I/O-Ports, aber keinen
ADC brauche, erschien mir der AVR Tiny4313 als gute Wahl.

Schön ist auch, dass man den Tiny4313 im Gegesatz zu den Tiny24/44/84
direkt auf der STK500 testen kann:

Normale I/O-Verarbeitung, USART, Timer0 und Timer1 sind erfolgreich
getestet, aber ich kriege die external Interrupts nicht hin!
Nacheinander habe ich Ext-INT1 und den PC-Int2 getestet.

Nach den ersten Compiler-Errors habe ich schon gekuugelt, dass die
tn4313def.inc nicht ganz sauber ist, daher noch ein paar #DEFINEs:
1
; für GIMSK:
2
#define PCIE1 3
3
#define PCIE2 4
4
#define PCIE0 5
5

6
PortDini:
7
  ldi Tmp0, 0b00000010  ; PortD: 0/1: RXD/TXD,  
8
  out DDRD, Tmp0    ; 2...6: Input, 7 n/a
9
  ldi Tmp0, 0b00000000  ; 
10
  out PortD, Tmp0    ;
11

12

13
PCint2ini:
14
  in  Tmp0,  GIMSK
15
  ori  Tmp0,  1 << PCIE2   ; PCIE2 Enable = GIMSK-Bit4
16
  out  GIMSK,  Tmp0    ; PC-IRQ2 = ON
17

18
  in  Tmp0,  PCMSK2
19
  ori  Tmp0,  (1 << PCINT16) | (1 << PCINT15) | (1 << PCINT14) | (1 << PCINT13)      
20
  out PCMSK2, Tmp0    ; PCINT13...PCINT16 = ON
21

22

23
Eint1_ini:
24
  in  Tmp0,  MCUCR
25
  ori Tmp0,  1 << ISC11  ; fallende Flanke für INT1 (PinD3)
26
  out  MCUCR, Tmp0
27

28
  in  Tmp0,  GIMSK
29
  ori  Tmp0,  1 << INT1  ; INT1 Enable = GIMSK-Bit7 (0b10000000)
30
  out  GIMSK,  Tmp0    ; INT1-IRQ ON
31

32
  sei        ; Interrupts freigegeben!

Was fehlt denn noch, damit die Interrupts auch angesprungen 
werden???????
Gast #3047874
Lesenswert?

Danke, manchmal haperts ja an den simpelsten Sachen...
Es ist natütlich nicht alles, sondern nur die Initialisierung
der Interrupts gezeigt.
Ich schrieb doch, dass ich ähnliche Sachen mit dem Tiny24
schon gemacht habe.

- Und: Ja, ich habe u.a. auch S. 48 bis 54 des 2313A/4313-
Datenblatts gelesen und angewandt...

Entweder muss ich also was übersehen haben, oder da ist
vielleicht NOCH ein Fehler in der "tn4313def.inc" ???

Der Chip müsste i.O. sein, da ich per Polling-Schleife die
Daten von PinD (Tastenzustände) nach PortB (LEDs) übertragen
konnte.
(Firma: TravelRec.) Persönliche Seite #3048054
Lesenswert?

Kurt schrieb:
> Entweder muss ich also was übersehen haben, oder da ist
> vielleicht NOCH ein Fehler in der "tn4313def.inc" ???

Die tn4313def.inc ist fehlerfrei. Wenn es Fehler beim Assemblieren gibt, 
dann rufst Du Register- oder Variablennamen auf, die es in dem 
Controller nicht gibt oder die woanders als in Deinem alten Controller 
liegen. Dann funktioniert´s freilich nicht. Nimm Dich mal der 
Fehlermeldungen an und versuche nicht, diese durch fiktive Defines zu 
umgehen.
Gast #3048551
Lesenswert?

Knut Ballhause schrieb:
> Die tn4313def.inc ist fehlerfrei.

Da hängt sich aber jemand weit aus dem Fenster!!!

Woher weißt du das? Funktionierende Code-Beispiele?

Die Frage ist: Warum wird genau die Bitposition PCIE2 im
GIMSK-Register vom Compiler bemängelt, die es nach Datenblatt
beim Tiny4313 geben muss? (Und die es beim tiny24 nicht gibt)

Ich vermute mal: Weil der Compiler in der offensichtlich NICHT
so "fehlerfreien"  tn4313def.inc  danach gesucht hat...
(Ich finde PCIE2 dort auch nicht.)
(Firma: TravelRec.) Persönliche Seite #3048714
Lesenswert?

Ja du hast Recht, in der tn4313def.inc fehlen tatsächlich die 
Bitpositionen. Ich hatte die Sache mit dem Tiny461 verwechselt. Selbst 
in der Migration Note T2313 -> T2313A sind die 3 neuen Bits in GIMSK 
nicht vermerkt. Jetzt müsste ich nur noch testen, ob die Interrupte 
selber funktionieren.

BTW: hast Du die komplette (neue) Vektorentabelle mit den neuen Vektoren 
für PCInt0, PCInt1 und PCInt2 in Dein Programm übernommen?
Gast #3049286
Lesenswert?

> ...komplette (neue) Vektorentabelle... ?

Da ich öfter mit t24, t25, mega8 arbeite, habe ich mir
jeweils ein "Grundgerüst" mit den spezifischen, immer
wiederkehrenden Code-Teilen aus dem Datenblatt erstellt.
Dazu gehört natürlich auch die jeweilige IRQ-Tabelle ohne
die führenden Zeilennummern...

War auch mein erster Schritt beim t4313.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren