Transcript MOP-Undantagshanteri..
Slide 1
Maskinorienterad Programmering
EDA 480 – Maskinorienterad Programmering
2009/2010
MC68HC12, Stencil
”Assemblerprogrammering.pdf”
CPU12 Reference Guide
Arbetsbok för MC12, avsnitt 2
Ur innehållet:
Processorns tillstånd
Undantagshantering (”Exceptions”)
Auto-vektoriserat
Vektoriserat
Avbrottsprioritering
Undantagshantering
1
Slide 2
Maskinorienterad Programmering
Exekveringstillstånd
Processorn befinner sig alltid i något av tillstånden:
NORMAL, processorn hämtar och utför instruktioner, dvs. normal exekvering.
EXCEPTION, något “undantag” har inträffat som gör att processorn inte kan
(eller ska) fortsätta normal exekvering.
NORMAL
Undantagshantering
EXCEPTION
2
Slide 3
Maskinorienterad Programmering
Test av Undantagstillstånd
Interna signaler för detekterig av olika feltillstånd
Externa avbrottsignaler
Styrbuss
STYRENHET
Avbrottslogik
Instruktions
Register
Status
Register
Datadel
D0..D7
Adressdel
ALU
A0..A7
och PC
IRQ
Aktiv
?
DATAVÄG
Adressbuss
Databuss
Processorns externa bussar
Undantagshantering
Nej
Hämta
Instruktion
Ja
Utför
Avbrottsrutin
Utför
Instruktion
3
Slide 4
Maskinorienterad Programmering
Undantagstyper
RESET
EXCEPTION
CPU12
RESET
MPU
IRQ
XIRQ
INTERNA
AVBROTT
IOF
POR
RESET
COP
SWI
CMON
INTP
IRQ
XIRQ
RESET MPU, händelser som alltid föranleder återstart (RESET) av processorn.
AVBROTT, externa händelser, dvs. utanför processorn, detta kan alltså vara
enheter på samma krets som processorn (sammanbyggda periferienheter), det
kan också vara en speciell insignal (IRQ eller XIRQ) som aktiveras.
INTERNA, händelser som uppträder under programexekvering, exempelvis att
en otillåten instruktion avkodas eller den speciella instruktionen SWI.
Undantagshantering
4
Slide 5
Maskinorienterad Programmering
Fatala fel, kräver RESET av CPU
RESET
CPU
POR, Power On Reset, vid spänningstillslag
RESET, insignal till processorn aktiveras.
COP, Computer Operating Properly, så kallad watchdog-funktion.
POR
RESET
COP
CMON
CMON, Clock Monitor Reset, övervakar E-klockan, om frekvensen
sjunker under 10 kHz genereras RESET.
Adress (hex)
FFFE
FFFC
FFFA
FFF8
FFF6
FFF4
FFF2
FF00-FFF0
Undantagshantering
Funktion
RESET, Startvektor
Clock Monitor Fail
COP Watchdog Timeout
Illegal Op Code
SWI
XIRQ
IRQ
Enhetsspecifika vektorer, skiljer sig
något beroende på olika varianter
5
Slide 6
Maskinorienterad Programmering
Interna undantag
Om processorn avkodar en otillåten
operationskod kallas detta Illegal Opcode
Fetch (IOF).
Processorn avbryter då,
sparar registerinnehåll på stacken,
läser autovektorn för IOF och
utför undantagshantering.
Instruktionen SoftWare Interrupt (SWI)
fungerar på samma sätt, men har en annan
autovektor och en bestämd operationskod.
Undantagshantering
INTERNA
IOF
Adress (hex)
FFFE
FFFC
FFFA
FFF8
FFF6
FFF4
FFF2
FF00-FFF0
SWI
Funktion
RESET, Startvektor
Clock Monitor Fail
COP Watchdog Timeout
Illegal Op Code
SWI
XIRQ
IRQ
Enhetsspecifika vektorer, skiljer sig
något beroende på olika varianter
6
Slide 7
Maskinorienterad Programmering
EXEMPEL, Hantera ”Software Interrupt”, SWI
main
Undantagshantering
ORG
LDAB
LDAA
LDX
LDY
NOP
SWI
NOP
BRA
$1000
#$11
#$22
#$3333
#$4444
main
SWI_hantering:
CLRA
NOP
RTI
ORG
FDB
Adress (hex)
FFFE
FFFC
FFFA
FFF8
FFF6
FFF4
FFF2
FF00-FFF0
$FFF6
SWI_hantering
Funktion
RESET, Startvektor
Clock Monitor Fail
COP Watchdog Timeout
Illegal Op Code
SWI
XIRQ
IRQ
Enhetsspecifika vektorer, skiljer sig
något beroende på olika varianter
7
Slide 8
Maskinorienterad Programmering
Internt genererade avbrott
AVBROTT
INTP
Adress
(hex)
FFF0
FFEE
FFEC
FFEA
....
FF8E
FF8C
FF8AFF80
Undantagshantering
IRQ
XIRQ
Funktion
Real Time Interrupt
Enhanced Capture Timer channel
Enhanced Capture Timer channel 1
Enhanced Capture Timer channel 2
....
Port P Interrupt
PWM Emergency Shutdown
Reserverade
8
Slide 9
Maskinorienterad Programmering
Externt genererade
avbrott
AVBROTT
INTP
CPU12
Undantagshantering
RESET
IRQ
XIRQ
Adress (hex)
FFFE
FFFC
FFFA
FFF8
FFF6
FFF4
FFF2
FF00-FFF0
IRQ
XIRQ
Funktion
RESET, Startvektor
Clock Monitor Fail
COP Watchdog Timeout
Illegal Op Code
SWI
XIRQ
IRQ
Enhetsspecifika vektorer, skiljer sig
något beroende på olika varianter
9
Slide 10
Maskinorienterad Programmering
Undantags prioritet
1.
2.
3.
RESET MPU och ”INTERNA” , (alltid)
XIRQ, (om X i CCR är 0)
IRQ, (om I i CCR är noll)
RESET
CPU12
IRQ
XIRQ
EXCEPTION
hantering av RESET
RESET
RESET
MPU
1
INTERNA
AVBROTT
IOF
POR
RESET
COP
XIRQ X
CMON
INTP
SWI
1
IRQ
avbrottshantering för
XIRQ
XIRQ
avbrottshantering för
IRQ
IRQ I
1
Undantagshantering
10
Slide 11
Maskinorienterad Programmering
Avbrottshantering
1) Huvudprogram exekveras när ett avbrott aktiveras
H u vu d p ro g ra m
2) Hopp till avbrottsrutin
1
A vb ro tts rutin
3
A vb ro tt
4) Avbrottsrutin avslutas med en speciell instruktion,
2
5
3) Avbrottsrutin startar
B e tjä n a
a vb ro tte t
return from interrupt (RTI)
5) Återhopp till huvudprogram
6) Huvudprogrammet fortsätter.
6
4
RTI
Minne
FFF2
FFF3
Undantagshantering
Avbrottsrutinens
adress
”avbrottsvektor”
11
Slide 12
Maskinorienterad Programmering
Maskering av avbrott
Maskera avbrott:
SEI
Alternativt
Nej
ORCC #%00010000
I-flagga =
0?
Ja
IRQ
Aktiv
?
Nej
Hämta
Instruktion
Demaskera avbrott:
Ja
CLI
Utför
Avbrottsrutin
Alternativt
ANDCC
#%11101111
Utför
Instruktion
Demaskera X-avbrott:
ANDCC #%10111111
OBS: Kan INTE maskeras
(”Non Maskable Interrupt”)
Undantagshantering
12
Slide 13
Maskinorienterad Programmering
CPU12 – Beteende vid RESET/Avbrott
RESET
XIRQ
IRQ
CCR = 1101000
REGISTERS->[SP]
REGISTERS->[SP]
PC=[FFFE,FFFF]
CCR[I]=1
CCR[I]=1
PC=[FFF4,FFF5]
PC=[FFF2,FFF3]
CCR
Undantagshantering
13
Slide 14
Maskinorienterad Programmering
Spara registerinnehåll…
”Atomär operation”
PUSH PC
PUSH Y
PUSH X
PUSH D
PUSH CCR
Stackens utseende i avbrottsrutin
SP
minskande
adress
ökande
adress
Undantagshantering
CCR
ACCB
ACCA
XH
XL
YH
YL
PCH
PCL
Innehåll i processorns register CCR vid avbrottet
Innehåll i processorns register (Y,X och D) vid avbrottet
Innehåll i processorns programräknare vid avbrottet, dvs
adressen till nästa instruktion som ska utföras
14
Slide 15
Maskinorienterad Programmering
Avslut av avbrottsrutin
”ReTurn from Interrupt”, RTI
”Atomär operation”
PULL CCR
PULL D
PULL X
PULL Y
PULL PC
Undantagshantering
15
Slide 16
Maskinorienterad Programmering
Multipla avbrottskällor
Källa
1
IRQ 1
Källa
2
IRQ 2
Källa
3
Processor
IRQ 3
&
Undantagshantering
IRQ
avbrottsingång
aktiv låg
16
Slide 17
Maskinorienterad Programmering
Programbaserad avbrottsprioritering
Avbrottshanterare
Avbrottssignal
IRQ från A?
JA
Betjäna avbrott A
CPU
Processorns
bussar
Minne
JA
Gränssnitt A
Gränssnitt B
Gränssnitt C
mot
mot
mot
seriell
parallell
A/D
anslutning
anslutning
anslutning
IRQ från B?
Betjäna avbrott B
Betjäna avbrott C
RTI
Undantagshantering
17
Slide 18
Maskinorienterad Programmering
Hårdvarubaserad
avbrottsprioritering
Adress X
Adress Y
Adress Z
Startadress för
avbrottsrutin 1
Startadress för
avbrottsrutin 2
Startadress för
avbrottsrutin 3
IRQ1
IRQ2
IRQ3
Avbrottssignaler
IRQ3
IRQ2
IRQ1
Processorns
bussar
Minne
CPU
Seriell
anslutning
A
Undantagshantering
Parallell
anslutning
B
Analog
anslutning
C
18
Slide 19
Maskinorienterad Programmering
Intern avbrottsprioritering
Adress
(hex) Funktion
Högre
prioritet
För avbrott från interna kretsar
bestäms prioriteten av
avbrottsvektorns adress.
Ju högre adress, desto högre
prioritet.
Det finns vissa möjligheter att
ändra detta programmässigt.
Lägre
prioritet
Undantagshantering
FFF0
FFEE
FFEC
FFEA
FFE8
FFE6
FFE4
FFE2
FFE0
FFDE
FFDC
FFDA
FFD8
FFD6
FFD4
FFD2
FFD0
FFCE
FFCC
FFCA
FFC8
FFC6
FFC4
FFC2
FFC0
FFBE
FFBC
FFBA
FFB8
FFB6
FFB4
FFB2
FFB0
…
FF96
FF94
FF92
FF90
FF8E
FF8C
FF8AFF80
Real Time Interrupt
Enhanced Capture Timer channel
Enhanced Capture Timer channel 1
Enhanced Capture Timer channel 2
Enhanced Capture Timer channel 3
Enhanced Capture Timer channel 4
Enhanced Capture Timer channel 5
Enhanced Capture Timer channel 6
Enhanced Capture Timer channel 7
Enhanced Capture Timer overflow
Pulse accumulator A overflow
Pulse accumulator input edge
SPI0
SCI0
SCI1
ATD0
ATD1
Port J
Port H
Modulus Down Counter underflow
Pulse Accumulator B Overflow
PLL lock
CRG Self Clock Mode
Används ej (BDLC)
IIC Bus
SPI1
Reserverad
EEPROM I-Bit
FLASH I-Bit
CAN0 wake-up
CAN0 errors
CAN0 receive
CAN0 transmit
…
CAN4 wake-up
CAN4 errors
CAN4 receive
CAN4 transmit
Port P Interrupt
PWM Emergency Shutdown
Reserverade
19
Slide 20
Maskinorienterad Programmering
Avbrottsvippa
Tryckknapp
Puls vid
nedtryckning av
tryckknapp
Processor
Aktivera avbrott
"1"
1D
Q
C1
R
A15
A14
A13
A12
A11
A0
R/W
Undantagshantering
Q
IRQ
Puls då processorn
skriver
Write
address
Avaktivera avbrott
20
Slide 21
Maskinorienterad Programmering
Kvittering av avbrott
”Interrupt Acknowledge”
EXEMPEL: ( jfr: laborationskort ML19)
Aktivera avbrott
Nollställ (”kvittera”) avbrott
Undantagshantering
Status hos avbrottskällor
21
Slide 22
Maskinorienterad Programmering
EXEMPEL, Arbetsbok uppgift 45 (”IRQ4.S12”)
; Definitioner, initieringssekvens
; och avbrottsvektor
PARPORT1 EQU
$0880
PARPORT2 EQU
$0881
IrqStat
IrqRes1
IrqRes2
EQU
EQU
EQU
$0D00
$0D02
$0D03
ORG
$1000
* Nollställ våra variabler
CLR
Var1
CLR
Var2
CLR
IrqRes1
CLR
IrqRes2
* Sätt om avbrottsmasken hos processorn
CLI
* Initiera avbrottsvektor IRQ
ORG
$FFF2
FDB
IrqR
Undantagshantering
; Huvudprogram
Loop
LDAB
ADDB
STAB
STAB
Var1
#1
Var1
PARPORT1
LDAB
STAB
BRA
Var2
PARPORT2
Loop
* Variabler
Var1
Var2
RMB
RMB
1
1
22
Slide 23
Maskinorienterad Programmering
EXEMPEL, forts.
* Avbrottsrutin
IrqR:
LDAA
BITA
BEQ
CLR
INC
IrqStat
#2
; Event 2 ?
IrqR1
; Om inte prova nästa
IrqRes2
Var2
; Räkna upp
IrqStat
IrqRes1
IrqRes2
EQU
EQU
EQU
$0D00
$0D02
$0D03
IrqR1:
* Kontrollera även Event 1...
BITA
#1
BEQ
IrqR2
CLR
IrqRes1
CLR
Var2
; Nollställ
IrqR2:
RTI
Undantagshantering
23
Slide 24
Maskinorienterad Programmering
Applikation för avbrott (IRQ)
;Initieringssekvens
ORG
XXXX
Application_Start:
LDS
#TopOfStack
...
...
; nollställ I-flagga
ANDCC
#$FE
JSR
_main
...
FFFF
4000
3FFF
1000
0FFF
0400
03FF
ROM,
Innehåller det
inbyggda
debuggerprogrammet
DBG12.
RWM,
används för
program och data.
I detta adressintervall
placeras gränssnitt mot
externa enheter
HCS12 interna
register
0000
ORG
$FFF2
FDB
irq_service_routine
ORG
$FFFE
FDB
Application_Start
; Avbrottshanterare
irq_service_routine:
RTI
Undantagshantering
I laborationssystemet (MC12) kan vi
INTE placera avbrottsvektorerna på
deras rätta platser (konflikt med DBG12)
I stället placeras dom i RWM
24
Slide 25
Maskinorienterad Programmering
MC12 (DBG12) och
avbott
Huvudprogram
IRQHandler
IRQ
Betjäna
avbrottet
Vektor
ROM
Funktion
FFFE
RESET, Startvektor
FFFC
Clock Monitor Fail,
FFFA
COP Watchdog Timeout, JMP [3FFC]
FFF8
Illegal Op Code,
JMP [3FFA]
FFF6
SWI,
JMP [3FF8]
FFF4
XIRQ,
JMP [3FF4]
FFF2
IRQ,
JMP [3FF2]
FF8C
FFF0
Enhetsspecifika
vektorer
JMP [3Fxx]
JMP [3FFE]
RTI
Simulator
ORG
$FFF2
FDB
irq_service_routine
; Avbrottshanterare
irq_service_routine:
RTI
Undantagshantering
MC12
ORG
$3FF2
FDB
irq_service_routine
; Avbrottshanterare
irq_service_routine:
RTI
25
Slide 26
Maskinorienterad Programmering
Somliga periferikretsar konstrueras för
att tillhandahålla avbrottsvektor (kan ej
anslutas till HCS12)
Vektoravbrott
Processor
Yttre enhet
Minne
1
IRQ
IRQ
Adress
2
INTA
INTA
Startadress f ör
avbrottsrutin p
Vektor Reg
Vektor q
4
Databuss
(Vektor q)
Startadress f ör
avbrottsrutin q
6
3
Startadress f ör
7
PC
Undantagshantering
avbrottsrutin r
5
Adressbuss
26
Slide 27
Maskinorienterad Programmering
Prioritet vid vektoravbrott (Daisy chain)
Vektor nr 0
(Adress i)
Vektor nr 1
(Adress i+p)
IR Q
S1
In
S1
S1
O ut
In
O ut
In
O ut
IN T A
YE1
V e kto r n r
YE2
V e kto r n r
Vektor nr max
(Adress i+max)
Startadress för
avbrottsrutin 0
Startadress för
avbrottsrutin 1
Startadress för
avbrottsrutin max
YE3
V e kto r n r
D a ta b u s s
Undantagshantering
27
Slide 28
Maskinorienterad Programmering
EXEMPEL, ”ColdFire” (MC68x00)
Vektor
nr
0
1
2
3
4
5
6,7
8
9
10
11
12
13
14
15
16-23
24
25
26
27
28
29
30
31
32-47
48-63
64-255
Adress
(offset)
(hex)
000
004
008
00C
010
014
018, 01C
020
024
028
02C
030
034
038
03C
040-05F
060
064
068
06C
070
074
078
07C
080-0BF
0C0-0FF
100-3FF
Undantagshantering
Funktion
Initial stackpekare
Initial programräknare
Access Error (ex: referens till adress där minne/periferikrets ej finns)
Adress Error (ex: referens till udda adress med word operand)
Illegal instruktion (icke-definierad operationskod)
Division med 0
Reserverade
Privilege Violation, försök att utföra supervisor-instruktion i user mode
Trace, en-instruktions exekvering
Line 1010, reserverad operationskod
Line 1111, reserverad operationskod
Non-PC breakpoint debug interrupt
PC breakpoint debug interrupt
Format error
Avbrott från enhet som ej tillhandahållit avbrottsnummer
Reserverade vektorer
Icke-identifierat avbrott
Autovektor avbrottsnivå 1
Autovektor avbrottsnivå 2
Autovektor avbrottsnivå 3
Autovektor avbrottsnivå 4
Autovektor avbrottsnivå 5
Autovektor avbrottsnivå 6
Autovektor avbrottsnivå 7
Trap vektor för instruktionen TRAP #
Undantag vid flyttalshantering, Reserverade vektorer
Användardefinierade vektorer
RESET vektor
”Undantag”
genererade av
program
Autovektor
avbrott
Vektoravbrott
28
Slide 29
Maskinorienterad Programmering
Skrivarport med avbrott, Version 5
READY
IRQ
READY
DAV
DAV
Datorsystem
Skrivare
Skrivarbuss
Datorsystem
Skrivare
Skrivar buss
IRQ
"1" 1D
Q
C1
R
Adress avkodning
Q
READY
A1
A0
R/W
Undantagshantering
29
Slide 30
Maskinorienterad Programmering
Skrivarport, Version 5
PRINTER EQU
PSTATUS EQU
PCONTROL EQU
$0800
$0801
$0802
Denna lösning genererar ALLTID avbrott
då skrivarens teckenbuffert är tom….
Undantagshantering
30
Slide 31
Maskinorienterad Programmering
Skrivarport, Version 6
I vår sista lösning kan vi
stänga av avbrotten från
skrivaren.
”Disable Interrupt”
Undantagshantering
31
Maskinorienterad Programmering
EDA 480 – Maskinorienterad Programmering
2009/2010
MC68HC12, Stencil
”Assemblerprogrammering.pdf”
CPU12 Reference Guide
Arbetsbok för MC12, avsnitt 2
Ur innehållet:
Processorns tillstånd
Undantagshantering (”Exceptions”)
Auto-vektoriserat
Vektoriserat
Avbrottsprioritering
Undantagshantering
1
Slide 2
Maskinorienterad Programmering
Exekveringstillstånd
Processorn befinner sig alltid i något av tillstånden:
NORMAL, processorn hämtar och utför instruktioner, dvs. normal exekvering.
EXCEPTION, något “undantag” har inträffat som gör att processorn inte kan
(eller ska) fortsätta normal exekvering.
NORMAL
Undantagshantering
EXCEPTION
2
Slide 3
Maskinorienterad Programmering
Test av Undantagstillstånd
Interna signaler för detekterig av olika feltillstånd
Externa avbrottsignaler
Styrbuss
STYRENHET
Avbrottslogik
Instruktions
Register
Status
Register
Datadel
D0..D7
Adressdel
ALU
A0..A7
och PC
IRQ
Aktiv
?
DATAVÄG
Adressbuss
Databuss
Processorns externa bussar
Undantagshantering
Nej
Hämta
Instruktion
Ja
Utför
Avbrottsrutin
Utför
Instruktion
3
Slide 4
Maskinorienterad Programmering
Undantagstyper
RESET
EXCEPTION
CPU12
RESET
MPU
IRQ
XIRQ
INTERNA
AVBROTT
IOF
POR
RESET
COP
SWI
CMON
INTP
IRQ
XIRQ
RESET MPU, händelser som alltid föranleder återstart (RESET) av processorn.
AVBROTT, externa händelser, dvs. utanför processorn, detta kan alltså vara
enheter på samma krets som processorn (sammanbyggda periferienheter), det
kan också vara en speciell insignal (IRQ eller XIRQ) som aktiveras.
INTERNA, händelser som uppträder under programexekvering, exempelvis att
en otillåten instruktion avkodas eller den speciella instruktionen SWI.
Undantagshantering
4
Slide 5
Maskinorienterad Programmering
Fatala fel, kräver RESET av CPU
RESET
CPU
POR, Power On Reset, vid spänningstillslag
RESET, insignal till processorn aktiveras.
COP, Computer Operating Properly, så kallad watchdog-funktion.
POR
RESET
COP
CMON
CMON, Clock Monitor Reset, övervakar E-klockan, om frekvensen
sjunker under 10 kHz genereras RESET.
Adress (hex)
FFFE
FFFC
FFFA
FFF8
FFF6
FFF4
FFF2
FF00-FFF0
Undantagshantering
Funktion
RESET, Startvektor
Clock Monitor Fail
COP Watchdog Timeout
Illegal Op Code
SWI
XIRQ
IRQ
Enhetsspecifika vektorer, skiljer sig
något beroende på olika varianter
5
Slide 6
Maskinorienterad Programmering
Interna undantag
Om processorn avkodar en otillåten
operationskod kallas detta Illegal Opcode
Fetch (IOF).
Processorn avbryter då,
sparar registerinnehåll på stacken,
läser autovektorn för IOF och
utför undantagshantering.
Instruktionen SoftWare Interrupt (SWI)
fungerar på samma sätt, men har en annan
autovektor och en bestämd operationskod.
Undantagshantering
INTERNA
IOF
Adress (hex)
FFFE
FFFC
FFFA
FFF8
FFF6
FFF4
FFF2
FF00-FFF0
SWI
Funktion
RESET, Startvektor
Clock Monitor Fail
COP Watchdog Timeout
Illegal Op Code
SWI
XIRQ
IRQ
Enhetsspecifika vektorer, skiljer sig
något beroende på olika varianter
6
Slide 7
Maskinorienterad Programmering
EXEMPEL, Hantera ”Software Interrupt”, SWI
main
Undantagshantering
ORG
LDAB
LDAA
LDX
LDY
NOP
SWI
NOP
BRA
$1000
#$11
#$22
#$3333
#$4444
main
SWI_hantering:
CLRA
NOP
RTI
ORG
FDB
Adress (hex)
FFFE
FFFC
FFFA
FFF8
FFF6
FFF4
FFF2
FF00-FFF0
$FFF6
SWI_hantering
Funktion
RESET, Startvektor
Clock Monitor Fail
COP Watchdog Timeout
Illegal Op Code
SWI
XIRQ
IRQ
Enhetsspecifika vektorer, skiljer sig
något beroende på olika varianter
7
Slide 8
Maskinorienterad Programmering
Internt genererade avbrott
AVBROTT
INTP
Adress
(hex)
FFF0
FFEE
FFEC
FFEA
....
FF8E
FF8C
FF8AFF80
Undantagshantering
IRQ
XIRQ
Funktion
Real Time Interrupt
Enhanced Capture Timer channel
Enhanced Capture Timer channel 1
Enhanced Capture Timer channel 2
....
Port P Interrupt
PWM Emergency Shutdown
Reserverade
8
Slide 9
Maskinorienterad Programmering
Externt genererade
avbrott
AVBROTT
INTP
CPU12
Undantagshantering
RESET
IRQ
XIRQ
Adress (hex)
FFFE
FFFC
FFFA
FFF8
FFF6
FFF4
FFF2
FF00-FFF0
IRQ
XIRQ
Funktion
RESET, Startvektor
Clock Monitor Fail
COP Watchdog Timeout
Illegal Op Code
SWI
XIRQ
IRQ
Enhetsspecifika vektorer, skiljer sig
något beroende på olika varianter
9
Slide 10
Maskinorienterad Programmering
Undantags prioritet
1.
2.
3.
RESET MPU och ”INTERNA” , (alltid)
XIRQ, (om X i CCR är 0)
IRQ, (om I i CCR är noll)
RESET
CPU12
IRQ
XIRQ
EXCEPTION
hantering av RESET
RESET
RESET
MPU
1
INTERNA
AVBROTT
IOF
POR
RESET
COP
XIRQ X
CMON
INTP
SWI
1
IRQ
avbrottshantering för
XIRQ
XIRQ
avbrottshantering för
IRQ
IRQ I
1
Undantagshantering
10
Slide 11
Maskinorienterad Programmering
Avbrottshantering
1) Huvudprogram exekveras när ett avbrott aktiveras
H u vu d p ro g ra m
2) Hopp till avbrottsrutin
1
A vb ro tts rutin
3
A vb ro tt
4) Avbrottsrutin avslutas med en speciell instruktion,
2
5
3) Avbrottsrutin startar
B e tjä n a
a vb ro tte t
return from interrupt (RTI)
5) Återhopp till huvudprogram
6) Huvudprogrammet fortsätter.
6
4
RTI
Minne
FFF2
FFF3
Undantagshantering
Avbrottsrutinens
adress
”avbrottsvektor”
11
Slide 12
Maskinorienterad Programmering
Maskering av avbrott
Maskera avbrott:
SEI
Alternativt
Nej
ORCC #%00010000
I-flagga =
0?
Ja
IRQ
Aktiv
?
Nej
Hämta
Instruktion
Demaskera avbrott:
Ja
CLI
Utför
Avbrottsrutin
Alternativt
ANDCC
#%11101111
Utför
Instruktion
Demaskera X-avbrott:
ANDCC #%10111111
OBS: Kan INTE maskeras
(”Non Maskable Interrupt”)
Undantagshantering
12
Slide 13
Maskinorienterad Programmering
CPU12 – Beteende vid RESET/Avbrott
RESET
XIRQ
IRQ
CCR = 1101000
REGISTERS->[SP]
REGISTERS->[SP]
PC=[FFFE,FFFF]
CCR[I]=1
CCR[I]=1
PC=[FFF4,FFF5]
PC=[FFF2,FFF3]
CCR
Undantagshantering
13
Slide 14
Maskinorienterad Programmering
Spara registerinnehåll…
”Atomär operation”
PUSH PC
PUSH Y
PUSH X
PUSH D
PUSH CCR
Stackens utseende i avbrottsrutin
SP
minskande
adress
ökande
adress
Undantagshantering
CCR
ACCB
ACCA
XH
XL
YH
YL
PCH
PCL
Innehåll i processorns register CCR vid avbrottet
Innehåll i processorns register (Y,X och D) vid avbrottet
Innehåll i processorns programräknare vid avbrottet, dvs
adressen till nästa instruktion som ska utföras
14
Slide 15
Maskinorienterad Programmering
Avslut av avbrottsrutin
”ReTurn from Interrupt”, RTI
”Atomär operation”
PULL CCR
PULL D
PULL X
PULL Y
PULL PC
Undantagshantering
15
Slide 16
Maskinorienterad Programmering
Multipla avbrottskällor
Källa
1
IRQ 1
Källa
2
IRQ 2
Källa
3
Processor
IRQ 3
&
Undantagshantering
IRQ
avbrottsingång
aktiv låg
16
Slide 17
Maskinorienterad Programmering
Programbaserad avbrottsprioritering
Avbrottshanterare
Avbrottssignal
IRQ från A?
JA
Betjäna avbrott A
CPU
Processorns
bussar
Minne
JA
Gränssnitt A
Gränssnitt B
Gränssnitt C
mot
mot
mot
seriell
parallell
A/D
anslutning
anslutning
anslutning
IRQ från B?
Betjäna avbrott B
Betjäna avbrott C
RTI
Undantagshantering
17
Slide 18
Maskinorienterad Programmering
Hårdvarubaserad
avbrottsprioritering
Adress X
Adress Y
Adress Z
Startadress för
avbrottsrutin 1
Startadress för
avbrottsrutin 2
Startadress för
avbrottsrutin 3
IRQ1
IRQ2
IRQ3
Avbrottssignaler
IRQ3
IRQ2
IRQ1
Processorns
bussar
Minne
CPU
Seriell
anslutning
A
Undantagshantering
Parallell
anslutning
B
Analog
anslutning
C
18
Slide 19
Maskinorienterad Programmering
Intern avbrottsprioritering
Adress
(hex) Funktion
Högre
prioritet
För avbrott från interna kretsar
bestäms prioriteten av
avbrottsvektorns adress.
Ju högre adress, desto högre
prioritet.
Det finns vissa möjligheter att
ändra detta programmässigt.
Lägre
prioritet
Undantagshantering
FFF0
FFEE
FFEC
FFEA
FFE8
FFE6
FFE4
FFE2
FFE0
FFDE
FFDC
FFDA
FFD8
FFD6
FFD4
FFD2
FFD0
FFCE
FFCC
FFCA
FFC8
FFC6
FFC4
FFC2
FFC0
FFBE
FFBC
FFBA
FFB8
FFB6
FFB4
FFB2
FFB0
…
FF96
FF94
FF92
FF90
FF8E
FF8C
FF8AFF80
Real Time Interrupt
Enhanced Capture Timer channel
Enhanced Capture Timer channel 1
Enhanced Capture Timer channel 2
Enhanced Capture Timer channel 3
Enhanced Capture Timer channel 4
Enhanced Capture Timer channel 5
Enhanced Capture Timer channel 6
Enhanced Capture Timer channel 7
Enhanced Capture Timer overflow
Pulse accumulator A overflow
Pulse accumulator input edge
SPI0
SCI0
SCI1
ATD0
ATD1
Port J
Port H
Modulus Down Counter underflow
Pulse Accumulator B Overflow
PLL lock
CRG Self Clock Mode
Används ej (BDLC)
IIC Bus
SPI1
Reserverad
EEPROM I-Bit
FLASH I-Bit
CAN0 wake-up
CAN0 errors
CAN0 receive
CAN0 transmit
…
CAN4 wake-up
CAN4 errors
CAN4 receive
CAN4 transmit
Port P Interrupt
PWM Emergency Shutdown
Reserverade
19
Slide 20
Maskinorienterad Programmering
Avbrottsvippa
Tryckknapp
Puls vid
nedtryckning av
tryckknapp
Processor
Aktivera avbrott
"1"
1D
Q
C1
R
A15
A14
A13
A12
A11
A0
R/W
Undantagshantering
Q
IRQ
Puls då processorn
skriver
Write
address
Avaktivera avbrott
20
Slide 21
Maskinorienterad Programmering
Kvittering av avbrott
”Interrupt Acknowledge”
EXEMPEL: ( jfr: laborationskort ML19)
Aktivera avbrott
Nollställ (”kvittera”) avbrott
Undantagshantering
Status hos avbrottskällor
21
Slide 22
Maskinorienterad Programmering
EXEMPEL, Arbetsbok uppgift 45 (”IRQ4.S12”)
; Definitioner, initieringssekvens
; och avbrottsvektor
PARPORT1 EQU
$0880
PARPORT2 EQU
$0881
IrqStat
IrqRes1
IrqRes2
EQU
EQU
EQU
$0D00
$0D02
$0D03
ORG
$1000
* Nollställ våra variabler
CLR
Var1
CLR
Var2
CLR
IrqRes1
CLR
IrqRes2
* Sätt om avbrottsmasken hos processorn
CLI
* Initiera avbrottsvektor IRQ
ORG
$FFF2
FDB
IrqR
Undantagshantering
; Huvudprogram
Loop
LDAB
ADDB
STAB
STAB
Var1
#1
Var1
PARPORT1
LDAB
STAB
BRA
Var2
PARPORT2
Loop
* Variabler
Var1
Var2
RMB
RMB
1
1
22
Slide 23
Maskinorienterad Programmering
EXEMPEL, forts.
* Avbrottsrutin
IrqR:
LDAA
BITA
BEQ
CLR
INC
IrqStat
#2
; Event 2 ?
IrqR1
; Om inte prova nästa
IrqRes2
Var2
; Räkna upp
IrqStat
IrqRes1
IrqRes2
EQU
EQU
EQU
$0D00
$0D02
$0D03
IrqR1:
* Kontrollera även Event 1...
BITA
#1
BEQ
IrqR2
CLR
IrqRes1
CLR
Var2
; Nollställ
IrqR2:
RTI
Undantagshantering
23
Slide 24
Maskinorienterad Programmering
Applikation för avbrott (IRQ)
;Initieringssekvens
ORG
XXXX
Application_Start:
LDS
#TopOfStack
...
...
; nollställ I-flagga
ANDCC
#$FE
JSR
_main
...
FFFF
4000
3FFF
1000
0FFF
0400
03FF
ROM,
Innehåller det
inbyggda
debuggerprogrammet
DBG12.
RWM,
används för
program och data.
I detta adressintervall
placeras gränssnitt mot
externa enheter
HCS12 interna
register
0000
ORG
$FFF2
FDB
irq_service_routine
ORG
$FFFE
FDB
Application_Start
; Avbrottshanterare
irq_service_routine:
RTI
Undantagshantering
I laborationssystemet (MC12) kan vi
INTE placera avbrottsvektorerna på
deras rätta platser (konflikt med DBG12)
I stället placeras dom i RWM
24
Slide 25
Maskinorienterad Programmering
MC12 (DBG12) och
avbott
Huvudprogram
IRQHandler
IRQ
Betjäna
avbrottet
Vektor
ROM
Funktion
FFFE
RESET, Startvektor
FFFC
Clock Monitor Fail,
FFFA
COP Watchdog Timeout, JMP [3FFC]
FFF8
Illegal Op Code,
JMP [3FFA]
FFF6
SWI,
JMP [3FF8]
FFF4
XIRQ,
JMP [3FF4]
FFF2
IRQ,
JMP [3FF2]
FF8C
FFF0
Enhetsspecifika
vektorer
JMP [3Fxx]
JMP [3FFE]
RTI
Simulator
ORG
$FFF2
FDB
irq_service_routine
; Avbrottshanterare
irq_service_routine:
RTI
Undantagshantering
MC12
ORG
$3FF2
FDB
irq_service_routine
; Avbrottshanterare
irq_service_routine:
RTI
25
Slide 26
Maskinorienterad Programmering
Somliga periferikretsar konstrueras för
att tillhandahålla avbrottsvektor (kan ej
anslutas till HCS12)
Vektoravbrott
Processor
Yttre enhet
Minne
1
IRQ
IRQ
Adress
2
INTA
INTA
Startadress f ör
avbrottsrutin p
Vektor Reg
Vektor q
4
Databuss
(Vektor q)
Startadress f ör
avbrottsrutin q
6
3
Startadress f ör
7
PC
Undantagshantering
avbrottsrutin r
5
Adressbuss
26
Slide 27
Maskinorienterad Programmering
Prioritet vid vektoravbrott (Daisy chain)
Vektor nr 0
(Adress i)
Vektor nr 1
(Adress i+p)
IR Q
S1
In
S1
S1
O ut
In
O ut
In
O ut
IN T A
YE1
V e kto r n r
YE2
V e kto r n r
Vektor nr max
(Adress i+max)
Startadress för
avbrottsrutin 0
Startadress för
avbrottsrutin 1
Startadress för
avbrottsrutin max
YE3
V e kto r n r
D a ta b u s s
Undantagshantering
27
Slide 28
Maskinorienterad Programmering
EXEMPEL, ”ColdFire” (MC68x00)
Vektor
nr
0
1
2
3
4
5
6,7
8
9
10
11
12
13
14
15
16-23
24
25
26
27
28
29
30
31
32-47
48-63
64-255
Adress
(offset)
(hex)
000
004
008
00C
010
014
018, 01C
020
024
028
02C
030
034
038
03C
040-05F
060
064
068
06C
070
074
078
07C
080-0BF
0C0-0FF
100-3FF
Undantagshantering
Funktion
Initial stackpekare
Initial programräknare
Access Error (ex: referens till adress där minne/periferikrets ej finns)
Adress Error (ex: referens till udda adress med word operand)
Illegal instruktion (icke-definierad operationskod)
Division med 0
Reserverade
Privilege Violation, försök att utföra supervisor-instruktion i user mode
Trace, en-instruktions exekvering
Line 1010, reserverad operationskod
Line 1111, reserverad operationskod
Non-PC breakpoint debug interrupt
PC breakpoint debug interrupt
Format error
Avbrott från enhet som ej tillhandahållit avbrottsnummer
Reserverade vektorer
Icke-identifierat avbrott
Autovektor avbrottsnivå 1
Autovektor avbrottsnivå 2
Autovektor avbrottsnivå 3
Autovektor avbrottsnivå 4
Autovektor avbrottsnivå 5
Autovektor avbrottsnivå 6
Autovektor avbrottsnivå 7
Trap vektor för instruktionen TRAP #
Undantag vid flyttalshantering, Reserverade vektorer
Användardefinierade vektorer
RESET vektor
”Undantag”
genererade av
program
Autovektor
avbrott
Vektoravbrott
28
Slide 29
Maskinorienterad Programmering
Skrivarport med avbrott, Version 5
READY
IRQ
READY
DAV
DAV
Datorsystem
Skrivare
Skrivarbuss
Datorsystem
Skrivare
Skrivar buss
IRQ
"1" 1D
Q
C1
R
Adress avkodning
Q
READY
A1
A0
R/W
Undantagshantering
29
Slide 30
Maskinorienterad Programmering
Skrivarport, Version 5
PRINTER EQU
PSTATUS EQU
PCONTROL EQU
$0800
$0801
$0802
Denna lösning genererar ALLTID avbrott
då skrivarens teckenbuffert är tom….
Undantagshantering
30
Slide 31
Maskinorienterad Programmering
Skrivarport, Version 6
I vår sista lösning kan vi
stänga av avbrotten från
skrivaren.
”Disable Interrupt”
Undantagshantering
31