Interruption HC12
Interruption HC12
interruptions
CHAPITRE 1
INTERRUPTIONS
1. PRƒSENTATION
En lÕabsence dÕinterruptions, les Le mŽcanisme des interruptions permet ˆ un processeur de rŽagir ˆ un en-
pŽriphŽriques nÕont jamais la
parole. Il ne peuvent rien signaler semble dÕŽvŽnements sans pour autant surveiller par programme leur ap-
au MCU qui doit les interroger parition. Une interruption est un ŽvŽnement capable dÕinterrompre le
(on parle de scrutation ou polling) dŽroulement dÕun programme pour exŽcuter immŽdiatement et automati-
pour dŽtecter un Žtat ou un
Žv•nement particulier. Gr‰ce aux quement une routine de service en rŽponse ˆ cet ŽvŽnement. La routine de
interruptions, les pŽriphŽriques service est une routine assembleur ou une fonction C qui diff•re dÕune rou-
ont la parole. Ils peuvent
rŽclamer lÕattention du MCU. tine ou dÕune fonction classique par le fait quÕelle nÕest jamais appelŽe par
une autre fonction ou routine mais dŽclenchŽe par un Žv•nement gŽnŽrale-
ment matŽriel. LÕexŽcution dÕun programme en cours est interrompu par la
routine de service. Cette derni•re doit donc commencer par sauvegarder
void main (void){
) ... lÕŽtat du processeur dans la pile et se terminer en restaurant cet Žtat avant
)
)
initialise_IT();
...
de reprendre le dŽroulement du programme interrompu.
) // Un
) // programme
) // normal
) ...
IRQ A
interrupt A
void A_isr (void){
2. ABRƒVIATIONS
...
}
2.1 LiŽes aux interruptions
) ...
IRQ B IT : Interrupt : Interruption
interrupt B ISR : Interrupt Service Routine : Routine de service dÕinterruption.
void B_isr (void){
... IRQ : Interrupt Request : Requ•te (demande) dÕinterruption.
}
IACK : Interrupt Acknowledge : AccusŽ de rŽception dÕune IRQ.
) … NMI : Non-Maskable Interrupt : Interruption non masquable
})
IF : Interrupt Flag : Bit signalant une requ•te dÕinterruption.
IE : Interrupt Enable : Bit programmŽ pour autoriser/inhiber une interrup-
tion.
P r o g r a m m a t i o n d e s s y s t • m e s e m b a r q u Ž s e t a p p l i c a t i o n s u r S t a r 1 2 - I U T C A C H A N - D Ž p . G E i i 1 Ñ
2 Trois types dÕinterruption
3.1 Erreurs
Au minimum, tous les MCU ou Au cours de lÕexŽcution dÕun programme, diffŽrentes erreurs matŽrielles
MPU doivent rŽpondre ˆ
lÕinterruption RESET qui est bien ou logicielles peuvent survenir. LÕapparition de certaines erreurs peut •tre
sžr la plus prioritaire. En ce sens considŽrŽe comme une interruption et dŽclencher lÕexŽcution dÕune routi-
elle peut-•tre considŽrŽe comme ne de service.
une erreur. Son ISR est le
programme de dŽmarrage. Les erreurs sont matŽrielles telles que lÕacc•s ˆ une adresse invalide ou lo-
gicielles telles que la division par zŽro ou la tentative dÕexŽcution dÕun
code machine ne correspondant ˆ aucune instruction du microprocesseur.
P r o g r a m m a t i o n d e s s y s t • m e s e m b a r q u Ž s e t a p p l i c a t i o n s u r S t a r 1 2 - I U T C A C H A N - D Ž p . G E i i 1 Ñ
Chapitre 1 3
interruptions
4. VECTEURS DÕINTERRUPTION
Dans chaque microcontr™leur, il existe un contr™leur dÕinterruption qui
permet dÕinhiber ou dÕautoriser chaque interruption individuellement ou
collectivement. Il doit Žgalement exister un mŽcanisme permettant dÕasso-
cier une ISR ˆ chaque source dÕinterruption. Suivant le type de microcon-
tr™leur, le programmeur ˆ plus ou moins de libertŽ sur la place que peut
occuper une ISR en mŽmoire. LÕadresse ˆ laquelle le CPU se dŽroute lors
dÕune interruption est appelŽe le vecteur dÕinterruption.
P r o g r a m m a t i o n d e s s y s t • m e s e m b a r q u Ž s e t a p p l i c a t i o n s u r S t a r 1 2 - I U T C A C H A N - D Ž p . G E i i 1 Ñ
4 Vecteurs dÕinterruption
...Memory... ...Memory...
interrupt A interrupt A
void A_ISR (void ) void A_ISR (void )
{ {
...Memory... ...Memory...
) É ) É
Vector Table } IT Vectors }
interrupt C interrupt C
void C_ISR (void ) void C_ISR (void )
{ {
) É ) É
} }
Nû Source dÕinterruption
1 Front sur le port B
2 externe
3 timer0 overflow
4 timer1 overflow
5 timer2 overflow
6 fin de conversion A/N
7 évènement capture / compare 1
8 évènement capture / compare 2
9 Fin d’écriture sur l’EEPROM
10 Port parallèle esclave
11 SPI
12 conflit de bus
13 Rx UART
P r o g r a m m a t i o n d e s s y s t • m e s e m b a r q u Ž s e t a p p l i c a t i o n s u r S t a r 1 2 - I U T C A C H A N - D Ž p . G E i i 1 Ñ
Chapitre 1 5
interruptions
Nû Source dÕinterruption
14 Tx UART
15 Alimentation faible
Dans ce cas, lÕISR doit faire le tri. Si plusieurs interruptions sont autorisŽes,
la routine dÕinterruption doit dŽterminer la source qui a dŽclenchŽ lÕinter-
ruption pour y rŽpondre. On peut noter que les outils de dŽveloppement en
langage C (PCW de CCS par exemple) peuvent masquer le manque de vec-
teurs en gŽnŽrant automatiquement le code nŽcessaire ˆ la dŽtection de la
source dÕinterruptions (cf. listing 1 et 2). Cela peut faire croire aux dŽve-
loppeurs quÕils existent plusieurs vecteurs, ce qui nÕest pas le cas. Le com-
pilateur gŽn•re Žgalement les instructions de sauvegarde et restauration du
contexte, ce qui nÕest pas trivial sur ce microcontr™leur sans pile et dont la
mŽmoire est paginŽe. Le revers de la mŽdaille est quÕune telle interruption
exŽcute au minimum 60 instructions, ce qui peut durer 60 µs sur un PIC
cadencŽ ˆ 4 MHz. CÕest au moins 30 fois plus long que la plupart des autres
MCU.
P r o g r a m m a t i o n d e s s y s t • m e s e m b a r q u Ž s e t a p p l i c a t i o n s u r S t a r 1 2 - I U T C A C H A N - D Ž p . G E i i 1 Ñ
6 Vecteurs dÕinterruption
P r o g r a m m a t i o n d e s s y s t • m e s e m b a r q u Ž s e t a p p l i c a t i o n s u r S t a r 1 2 - I U T C A C H A N - D Ž p . G E i i 1 Ñ
Chapitre 1 7
interruptions
HC12
IRQ1 2
IT Controller
1 PTH0 3
PIEH
PIFH
CCR
4
vector
= 25
25 5
Table Vect.
Num IT. vectors 7 interrupt 25
6 25 0010 01B0
64 0010 01C4
void bouton_isr(void){
É
}
P r o g r a m m a t i o n d e s s y s t • m e s e m b a r q u Ž s e t a p p l i c a t i o n s u r S t a r 1 2 - I U T C A C H A N - D Ž p . G E i i 1 Ñ
8 Vecteurs dÕinterruption
autorisŽe
nû CODE adresse source
localement par
0 RESET_ISR FFFE-FFFF RESET -
1 CLKMONFA FFFC-FFFD CLOCK MONITOR FAIL PLLCTL (CME, SCME)
IL_ISR RESET
2 COP_ISR FFFA-FFFB COP RESET (WATCHDOG COP RATE SELECT
TIMER)
3 UNIMPLTR FFF8-FFF9 UNIMPLEMENTED INSTRUC- -
AP_ISR TION TRAP
4 SWI_ISR FFF6-FFF7 SWI -
5 XIRQ_ISR FFF4-FFF5 XIRQ -
6 IRQ_ISR FFF2-FFF3 IRQ -
7 RTI_ISR FFF0-FFF1 REAL TIME INTERRUPT IRQCR (IRQEN)
(RTI)
8 ECT0_ISR FFEE-FFEF TIMER 0 TIE (C0I)
9 ECT1_ISR FFEC-FFED TIMER 1 TIE (C1I)
10 ECT2_ISR FFEA-FFEB TIMER 2 TIE (C2I)
11 ECT3_ISR FFE8-FFE9 TIMER 3 TIE (C3I)
12 ECT4_ISR FFE6-FFE7 TIMER 4 TIE (C4I)
13 ECT5_ISR FFE4-FFE5 TIMER 5 TIE (C5I)
14 ECT6_ISR FFE2-FFE3 TIMER 6 TIE (C6I)
15 ECT7_ISR FFE0-FFE1 TIMER 7 TIE (C7I)
16 TOF_ISR FFDE-FFDF TIMER OVERFLOW TSCR2 (TOF)
17 PAOV_ISR FFDC-FFDD PULSE ACCUMULATOR A PACTL (PAOVI)
OVERFLOW
18 PA_ISR FFDA-FFDB PULSE ACCUMULATOR A PACTL (PAI)
INPUT EDGE
19 SPI0_ISR FFD8-FFD9 SPI0 SP0CR1 (SPIE,SPTIE)
20 SCI0_ISR FFD6-FFD7 SCI0 SC0CR2
(TIE,TCIE,RIE,ILIE)
21 SCI1_ISR FFD4-FFD5 SCI1 SC1CR2
(TIE,TCIE,RIE,ILIE)
22 ATD0_ISR FFD2-FFD3 ATD0 ATD0CTL2 (ASCIE)
23 ATD1_ISR FFD0-FFD1 ATD1 ATD1CTL2 (ASCIE)
24 PORTJ_ISR FFCE-FFCF PORT J PTJIF (PTJIE)
25 PORTH_IS FFCC-FFCD PORT H PTHIF (PTHIE)
R
26 MCZ_ISR FFCA-FFCB MODULUS DOWN COUNTER MCCTL (MCZI)
UNDERFLOW
27 PBOV_ISR FFC8-FFC9 PULSE ACCUMULATOR B PBCTL (PBOVI)
OVERFOW
28 PLLLOCK_I FFC6-FFC7 CRG PLL LOCK CRGINT (LOCKIE)
SR
29 PLLSCM_IS FFC4-FFC5 CRG SELF CLOCK MODE CRGINT (SCMIE)
R
30 BDLC_ISR FFC2-FFC3 BDLC BLCBCR1 (IE)
31 I2C_ISR FFC0-FFC1 IIC BUS IBCR (IBIE)
32 SPI1_ISR FFBE-FFBF SPI1 SP1CR1 (SPIE,SPTIE)
33 SPI2_ISR FFBC-FFBD SPI2 SP2CR1 (SPIE,SPTIE)
P r o g r a m m a t i o n d e s s y s t • m e s e m b a r q u Ž s e t a p p l i c a t i o n s u r S t a r 1 2 - I U T C A C H A N - D Ž p . G E i i 1 Ñ
Chapitre 1 9
interruptions
autorisŽe
nû CODE adresse source
localement par
34 EEPROM_I FFBA-FFBB EEPROM EECTL (CCIE,CBEIE)
SR
35 FLASH_ISR FFB8-FFB9 FLASH FCTL (CCIE,CBEIE)
36 CAN0WU_I FFB6-FFB7 CAN 0 WAKE UP CAN0RIER (WUPIE)
SR
37 CAN0ERR_ FFB4-FFB5 CAN 0 ERROR CAN0RIER (CSIE,OVRIE)
ISR
38 CAN0RX_IS FFB2-FFB3 CAN 0 RECEIVE CAN0RIER (RXFIE)
R
39 CAN0TX_IS FFB0-FFB1 CAN 0 TRANSMIT CAN0TIER (TXEIE2-
R TXEIE0)
40 CAN1WU_I FFAE-FFAF CAN 1 WAKE UP CAN1RIER (WUPIE)
SR
41 CAN1ERR_ FFAC-FFAD CAN 1 ERROR CAN1RIER (CSIE,OVRIE)
ISR
42 CAN1RX_IS FFAA-FFAB CAN 1 RECEIVE CAN1RIER (RXFIE)
R
43 CAN1TX_IS FFA8-FFA9 CAN 1 TRANSMIT CAN1TIER (TXEIE2-
R TXEIE0)
44 CAN2WU_I FFA6-FFA7 CAN 2 WAKE UP CAN2RIER (WUPIE)
SR
45 CAN2ERR_ FFA4-FFA5 CAN 2 ERROR CAN2RIER (CSIE,OVRIE)
ISR
46 CAN2RX_IS FFA2-FFA3 CAN 2 RECEIVE CAN2RIER (RXFIE)
R
47 CAN2TX_IS FFA0-FFA1 CAN 2 TRANSMIT CAN2TIER (TXEIE2-
R TXEIE0)
48 CAN3WU_I FF9E-FF9F CAN 3 WAKE UP CAN3RIER (WUPIE)
SR
49 CAN3ERR_ FF9C-FF9D CAN 3 ERROR CAN3RIER (CSIE,OVRIE)
ISR
50 CAN3RX_IS FF9A-FF9B CAN 3 RECEIVE CAN3RIER (RXFIE)
R
51 CAN3TX_IS FF98-FF99 CAN 3 TRANSMIT CAN3TIER (TXEIE2-
R TXEIE0)
52 CAN4WU_I FF96-FF97 CAN 4 WAKE UP CAN4RIER (WUPIE)
SR
53 CAN4ERR_ FF94-FF95 CAN 4 ERROR CAN4RIER (CSIE,OVRIE)
ISR
54 CAN4RX_IS FF92-FF93 CAN 4 RECEIVE CAN4RIER (RXFIE)
R
55 CAN4TX_IS FF90-FF91 CAN 4 TRANSMIT CAN4TIER (TXEIE2-
R TXEIE0)
56 PORTP_IS FF8E-FF8F PORT P PTPIF (PTPIE)
R
57 PWMEMSH FF8C-FF8D PWM EMERGENCY SHUT- PWMSDN (PWMIE)
_ISR DOWN
58-63 FF80-FF8B rŽservŽ -
P r o g r a m m a t i o n d e s s y s t • m e s e m b a r q u Ž s e t a p p l i c a t i o n s u r S t a r 1 2 - I U T C A C H A N - D Ž p . G E i i 1 Ñ
10 La pile lors dÕune interruption
IMR
IPR
1 2 IRQ4
programmable y compris les IRQ IRQ7 3 ICR7
P r o g r a m m a t i o n d e s s y s t • m e s e m b a r q u Ž s e t a p p l i c a t i o n s u r S t a r 1 2 - I U T C A C H A N - D Ž p . G E i i 1 Ñ
Chapitre 1 11
interruptions
16 bit
SP CCR
B:A
Xh : Xl
Yh : Yl
RTNh : RTNl
P r o g r a m m a t i o n d e s s y s t • m e s e m b a r q u Ž s e t a p p l i c a t i o n s u r S t a r 1 2 - I U T C A C H A N - D Ž p . G E i i 1 Ñ
12 DiffŽrentes stratŽgies de programmation
ISR2 Inactive Active interr. Active Inactive ISR2 Inactive Active Inactive
prioritŽ croissante
prioritŽ croissante
IRQ2 IRQ2
PENDING
ISR1 Inactive Active interrompue Active Inactive ISR1 Inactive Active Inactive
IRQ1 IRQ1
Programme Programme
Actif interrompu Active en arri•re plan Actif interrompu Active
en arri•re plan
irq3
irq2 irq2 irq2
PILE PILE
irq1 irq1 irq1 irq1 irq1 irq1 irq2 irq3
prog. prog. prog. prog. prog. prog. prog. prog. prog. prog. prog. prog.
temps temps
P r o g r a m m a t i o n d e s s y s t • m e s e m b a r q u Ž s e t a p p l i c a t i o n s u r S t a r 1 2 - I U T C A C H A N - D Ž p . G E i i 1 Ñ
Chapitre 1 13
interruptions
P r o g r a m m a t i o n d e s s y s t • m e s e m b a r q u Ž s e t a p p l i c a t i o n s u r S t a r 1 2 - I U T C A C H A N - D Ž p . G E i i 1 Ñ
14 Trouvez vos BUGS
Le mot clŽ interrupt (ligne 23), qui nÕest pas standard, indique au com-
pilateur que cette fonction est associŽe au vecteur dÕinterruption nû25,
cÕest-ˆ-dire ici les interruptions du port H. Le compilateur va gŽnŽrer une
ISR assembleur, qui se termine par lÕinstruction RTI, et place lui-m•me le
vecteur dans la table des vecteurs dÕinterruption.
P r o g r a m m a t i o n d e s s y s t • m e s e m b a r q u Ž s e t a p p l i c a t i o n s u r S t a r 1 2 - I U T C A C H A N - D Ž p . G E i i 1 Ñ
Chapitre 1 15
interruptions
¥ VŽrifier que votre projet est bien con•u pour tŽlŽcharger le programme
en FLASH. Si seule la RAM est programmŽe, les vecteurs dÕinterrup-
tion ne seront pas modifiŽes et pointeront nÕimporte o•.
8.2 Si une ISR se dŽclenche une seule fois puis reste bloquŽe
¥ Les fonctions dÕinterruption ne doivent jamais •tre appelŽes ˆ partir
dÕune autre fonction comme des fonctions usuelles. Autrement lÕins-
truction de fin dÕinterruption (RTI) qui ne trouve pas dans la pile ce
quÕelle attend fait planter le syst•me.
¥ Avant la fin dÕune routine dÕinterruption, la cause de lÕinterruption doit
•tre supprimŽe (gŽnŽralement en Žcrivant un UN dans un registre IF)
sinon lÕinterruption se redŽclenche indŽfiniment et le syst•me est blo-
quŽ.
P r o g r a m m a t i o n d e s s y s t • m e s e m b a r q u Ž s e t a p p l i c a t i o n s u r S t a r 1 2 - I U T C A C H A N - D Ž p . G E i i 1 Ñ
16 Pour aller plus loin
P r o g r a m m a t i o n d e s s y s t • m e s e m b a r q u Ž s e t a p p l i c a t i o n s u r S t a r 1 2 - I U T C A C H A N - D Ž p . G E i i 1 Ñ