Allgemeine Frage zu AVR-Interrupts

OP #2173170
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
(Firma: TH Köln) Persönliche Seite #2173195
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

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