Forum: Mikrocontroller und Digitale Elektronik Allgemeine Frage zu AVR-Interrupts


von Alf R. (bitbit)


Lesenswert?

Ich habe mir gerade im avr-Tutorial von Mikrocontroller.net die Seite zu 
den Interrupts angesehen. Dort ist ein Beispiel gemacht worden:
1
.include "m8def.inc"
2
 
3
.def temp = r16
4
 
5
.org 0x000
6
         rjmp main            ; Reset Handler
7
.org INT0addr
8
         rjmp int0_handler    ; IRQ0 Handler
9
.org INT1addr
10
         rjmp int1_handler    ; IRQ1 Handler
11
 
12
 
13
main:                         ; hier beginnt das Hauptprogramm
14
 
15
usw.....
Warum springt das Programm, wenn alle Interrupts allgemein aktiviert 
sind mit dem Interrupt 0x003 nicht in den main-Abschnitt? Oder setzt der 
Assembler den main-Abschnitt nicht auf die Position 0x003, sondern 
hinter alle möglichen Interrupt-Vektoren?
Mfg bitbit

von Mark L. (Firma: TH Köln) (m2k10) Benutzerseite


Lesenswert?

Du musst jeden Interrupt einzeln aktivieren. Einfach nur 'sei' ohne das 
setzt nur das Flag im SREG, aber sonst passiert nix (kein Sprung in 
irgendeine ISR). Konkret, wenn hier nur INT0 und INT1 verwendet werden 
ist das schon völlig OK. Verwendet man gar keine Interrupts kann man mit 
dem Programm auch direkt bei 0x0000 beginnen.
Sicherheitshalber kann man auch ein .org INT_VECTORS_SIZE vor das main: 
setzten.

Mark

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.