MOP-Undantagshanteri..

Download Report

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