Maskinorienterad Programmering EDA 480 Maskinorienterad Programmering 20092010 MC

  • Slides: 31
Download presentation
Maskinorienterad Programmering EDA 480 – Maskinorienterad Programmering 2009/2010 MC 68 HC 12, Stencil ”Assemblerprogrammering.

Maskinorienterad Programmering EDA 480 – Maskinorienterad Programmering 2009/2010 MC 68 HC 12, Stencil ”Assemblerprogrammering. pdf” CPU 12 Reference Guide Arbetsbok för MC 12, avsnitt 2 Ur innehållet: Processorns tillstånd Undantagshantering (”Exceptions”) Auto-vektoriserat Vektoriserat Avbrottsprioritering Undantagshantering 1

Maskinorienterad Programmering Exekveringstillstånd Processorn befinner sig alltid i något av tillstånden: NORMAL, processorn hämtar

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

Maskinorienterad Programmering Test av Undantagstillstånd IRQ Aktiv ? Nej Hämta Instruktion Ja Utför Avbrottsrutin

Maskinorienterad Programmering Test av Undantagstillstånd IRQ Aktiv ? Nej Hämta Instruktion Ja Utför Avbrottsrutin Utför Instruktion Undantagshantering 3

Maskinorienterad Programmering Undantagstyper RESET EXCEPTION CPU 12 RESET MPU IRQ XIRQ INTERNA AVBROTT IOF

Maskinorienterad Programmering Undantagstyper RESET EXCEPTION CPU 12 RESET MPU IRQ XIRQ INTERNA AVBROTT IOF RESET POR 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

Maskinorienterad Programmering Fatala fel, kräver RESET av CPU RESET CPU POR, Power On Reset,

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, Clock Monitor Reset, övervakar E-klockan, om frekvensen sjunker under 10 k. Hz genereras RESET. Adress (hex) FFFE FFFC FFFA FFF 8 FFF 6 FFF 4 FFF 2 FF 00 -FFF 0 Undantagshantering Funktion RESET, Startvektor Clock Monitor Fail COP Watchdog Timeout Illegal Op Code SWI XIRQ Enhetsspecifika vektorer, skiljer sig något beroende på olika varianter 5

Maskinorienterad Programmering Interna undantag Om processorn avkodar en otillåten operationskod kallas detta Illegal Opcode

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 Soft. Ware 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 FFF 8 FFF 6 FFF 4 FFF 2 FF 00 -FFF 0 SWI Funktion RESET, Startvektor Clock Monitor Fail COP Watchdog Timeout Illegal Op Code SWI XIRQ Enhetsspecifika vektorer, skiljer sig något beroende på olika varianter 6

Maskinorienterad Programmering EXEMPEL, Hantera ”Software Interrupt”, SWI main Undantagshantering ORG LDAB LDAA LDX LDY

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 FFF 8 FFF 6 FFF 4 FFF 2 FF 00 -FFF 0 $FFF 6 SWI_hantering Funktion RESET, Startvektor Clock Monitor Fail COP Watchdog Timeout Illegal Op Code SWI XIRQ Enhetsspecifika vektorer, skiljer sig något beroende på olika varianter 7

Maskinorienterad Programmering Internt genererade avbrott AVBROTT INTP Adress (hex) FFF 0 FFEE FFEC FFEA.

Maskinorienterad Programmering Internt genererade avbrott AVBROTT INTP Adress (hex) FFF 0 FFEE FFEC FFEA. . FF 8 E FF 8 C FF 8 AFF 80 Undantagshantering IRQ XIRQ Funktion Real Time Interrupt Enhanced Capture Timer channel 1 Enhanced Capture Timer channel 2. . Port P Interrupt PWM Emergency Shutdown Reserverade 8

Maskinorienterad Programmering Externt genererade avbrott AVBROTT INTP CPU 12 Undantagshantering RESET IRQ XIRQ Adress

Maskinorienterad Programmering Externt genererade avbrott AVBROTT INTP CPU 12 Undantagshantering RESET IRQ XIRQ Adress (hex) FFFE FFFC FFFA FFF 8 FFF 6 FFF 4 FFF 2 FF 00 -FFF 0 IRQ XIRQ Funktion RESET, Startvektor Clock Monitor Fail COP Watchdog Timeout Illegal Op Code SWI XIRQ Enhetsspecifika vektorer, skiljer sig något beroende på olika varianter 9

Maskinorienterad Programmering Undantags prioritet 1. 2. 3. RESET MPU och ”INTERNA” , (alltid) XIRQ,

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 CPU 12 IRQ XIRQ EXCEPTION hantering av RESET MPU 1 INTERNA AVBROTT IOF POR RESET COP CMON INTP SWI 1 IRQ XIRQ 1 Undantagshantering avbrottshantering för XIRQ avbrottshantering för IRQ 10

Maskinorienterad Programmering Avbrottshantering 1) Huvudprogram exekveras när ett avbrott aktiveras 2) Hopp till avbrottsrutin

Maskinorienterad Programmering Avbrottshantering 1) Huvudprogram exekveras när ett avbrott aktiveras 2) Hopp till avbrottsrutin 3) Avbrottsrutin startar 4) Avbrottsrutin avslutas med en speciell instruktion, return from interrupt (RTI) 5) Återhopp till huvudprogram 6) Huvudprogrammet fortsätter. Minne FFF 2 FFF 3 Undantagshantering Avbrottsrutinens adress ”avbrottsvektor” 11

Maskinorienterad Programmering Maskering av avbrott Maskera avbrott: SEI Alternativt Nej ORCC #%00010000 I-flagga =

Maskinorienterad Programmering Maskering av avbrott Maskera avbrott: SEI Alternativt Nej ORCC #%00010000 I-flagga = 0? Ja IRQ Aktiv ? Nej Hämta Instruktion Utför Instruktion Demaskera avbrott: Ja CLI Utför Avbrottsrutin Alternativt ANDCC #%11101111 Demaskera X-avbrott: ANDCC #%10111111 OBS: Kan INTE maskeras (”Non Maskable Interrupt”) Undantagshantering 12

Maskinorienterad Programmering CPU 12 – Beteende vid RESET/Avbrott RESET XIRQ CCR = 1101000 REGISTERS->[SP]

Maskinorienterad Programmering CPU 12 – Beteende vid RESET/Avbrott RESET XIRQ CCR = 1101000 REGISTERS->[SP] PC=[FFFE, FFFF] CCR[I]=1 PC=[FFF 4, FFF 5] PC=[FFF 2, FFF 3] CCR Undantagshantering 13

Maskinorienterad Programmering Spara registerinnehåll… ”Atomär operation” PUSH PC PUSH Y PUSH X PUSH D

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

Maskinorienterad Programmering Avslut av avbrottsrutin ”Re. Turn from Interrupt”, RTI ”Atomär operation” PULL CCR

Maskinorienterad Programmering Avslut av avbrottsrutin ”Re. Turn from Interrupt”, RTI ”Atomär operation” PULL CCR PULL D PULL X PULL Y PULL PC Undantagshantering 15

Maskinorienterad Programmering Multipla avbrottskällor Källa 1 IRQ 1 Källa 2 IRQ 2 Källa 3

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

Maskinorienterad Programmering Programbaserad avbrottsprioritering Undantagshantering 17

Maskinorienterad Programmering Programbaserad avbrottsprioritering Undantagshantering 17

Maskinorienterad Programmering Hårdvarubaserad avbrottsprioritering Undantagshantering 18

Maskinorienterad Programmering Hårdvarubaserad avbrottsprioritering Undantagshantering 18

Maskinorienterad Programmering Intern avbrottsprioritering Högre prioritet För avbrott från interna kretsar bestäms prioriteten av

Maskinorienterad Programmering Intern avbrottsprioritering 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 Adress (hex) Funktion FFF 0 FFEE FFEC FFEA FFE 8 FFE 6 FFE 4 FFE 2 FFE 0 FFDE FFDC FFDA FFD 8 FFD 6 FFD 4 FFD 2 FFD 0 FFCE FFCC FFCA FFC 8 FFC 6 FFC 4 FFC 2 FFC 0 FFBE FFBC FFBA FFB 8 FFB 6 FFB 4 FFB 2 FFB 0 … FF 96 FF 94 FF 92 FF 90 FF 8 E FF 8 C FF 8 AFF 80 Real Time Interrupt 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 SPI 0 SCI 1 ATD 0 ATD 1 Port J Port H Modulus Down Counter underflow Pulse Accumulator B Overflow PLL lock CRG Self Clock Mode Används ej (BDLC) IIC Bus SPI 1 Reserverad EEPROM I-Bit FLASH I-Bit CAN 0 wake-up CAN 0 errors CAN 0 receive CAN 0 transmit … CAN 4 wake-up CAN 4 errors CAN 4 receive CAN 4 transmit Port P Interrupt PWM Emergency Shutdown Reserverade 19

Maskinorienterad Programmering Avbrottsvippa Tryckknapp Aktivera avbrott Puls vid nedtryckning av tryckknapp "1" 1 D

Maskinorienterad Programmering Avbrottsvippa Tryckknapp Aktivera avbrott Puls vid nedtryckning av tryckknapp "1" 1 D Processor Q C 1 R A 15 A 14 A 13 A 12 A 11 A 0 R/W Undantagshantering Q IRQ Puls då processorn skriver � Write address Avaktivera avbrott 20

Maskinorienterad Programmering Kvittering av avbrott ”Interrupt Acknowledge” EXEMPEL: ( jfr: laborationskort ML 19) Aktivera

Maskinorienterad Programmering Kvittering av avbrott ”Interrupt Acknowledge” EXEMPEL: ( jfr: laborationskort ML 19) Aktivera avbrott Nollställ (”kvittera”) avbrott Undantagshantering Status hos avbrottskällor 21

Maskinorienterad Programmering EXEMPEL, Arbetsbok uppgift 45 (”IRQ 4. S 12”) ; Definitioner, initieringssekvens ;

Maskinorienterad Programmering EXEMPEL, Arbetsbok uppgift 45 (”IRQ 4. S 12”) ; Definitioner, initieringssekvens ; och avbrottsvektor PARPORT 1 EQU $0880 PARPORT 2 EQU $0881 Irq. Stat Irq. Res 1 Irq. Res 2 EQU EQU $0 D 00 $0 D 02 $0 D 03 ORG $1000 * Nollställ våra variabler CLR Var 1 CLR Var 2 CLR Irq. Res 1 CLR Irq. Res 2 * Sätt om avbrottsmasken hos processorn CLI * Initiera avbrottsvektor IRQ ORG $FFF 2 FDB Irq. R Undantagshantering ; Huvudprogram Loop LDAB ADDB STAB Var 1 #1 Var 1 PARPORT 1 LDAB STAB BRA Var 2 PARPORT 2 Loop * Variabler Var 1 Var 2 RMB 1 1 22

Maskinorienterad Programmering EXEMPEL, forts. * Avbrottsrutin Irq. R: LDAA BITA BEQ CLR INC Irq.

Maskinorienterad Programmering EXEMPEL, forts. * Avbrottsrutin Irq. R: LDAA BITA BEQ CLR INC Irq. Stat #2 ; Event 2 ? Irq. R 1 ; Om inte prova nästa Irq. Res 2 Var 2 ; Räkna upp Irq. Stat Irq. Res 1 Irq. Res 2 EQU EQU $0 D 00 $0 D 02 $0 D 03 Irq. R 1: * Kontrollera även Event 1. . . BITA #1 BEQ Irq. R 2 CLR Irq. Res 1 CLR Var 2 ; Nollställ Irq. R 2: RTI Undantagshantering 23

Maskinorienterad Programmering Applikation för avbrott (IRQ) ; Initieringssekvens ORG XXXX Application_Start: LDS #Top. Of.

Maskinorienterad Programmering Applikation för avbrott (IRQ) ; Initieringssekvens ORG XXXX Application_Start: LDS #Top. Of. Stack. . . ; nollställ I-flagga ANDCC #$FE JSR _main. . . FFFF 4000 3 FFF 1000 0 FFF 0400 03 FF ROM, Innehåller det inbyggda debuggerprogrammet DBG 12. RWM, används för program och data. I detta adressintervall placeras gränssnitt mot externa enheter HCS 12 interna register 0000 ORG $FFF 2 FDB irq_service_routine ORG $FFFE FDB Application_Start ; Avbrottshanterare irq_service_routine: RTI Undantagshantering I laborationssystemet (MC 12) kan vi INTE placera avbrottsvektorerna på deras rätta platser (konflikt med DBG 12) I stället placeras dom i RWM 24

Maskinorienterad Programmering MC 12 (DBG 12) och avbott Huvudprogram IRQHandler IRQ Betjäna avbrottet RTI

Maskinorienterad Programmering MC 12 (DBG 12) och avbott Huvudprogram IRQHandler IRQ Betjäna avbrottet RTI Simulator ORG $FFF 2 FDB irq_service_routine ; Avbrottshanterare irq_service_routine: RTI Undantagshantering Vektor ROM Funktion FFFE RESET, Startvektor FFFC Clock Monitor Fail, FFFA COP Watchdog Timeout, JMP [3 FFC] FFF 8 Illegal Op Code, JMP [3 FFA] FFF 6 SWI, JMP [3 FF 8] FFF 4 XIRQ, JMP [3 FF 4] FFF 2 IRQ, JMP [3 FF 2] FF 8 C FFF 0 Enhetsspecifika vektorer JMP [3 Fxx] JMP [3 FFE] MC 12 ORG $3 FF 2 FDB irq_service_routine ; Avbrottshanterare irq_service_routine: RTI 25

Maskinorienterad Programmering Vektoravbrott Undantagshantering Somliga periferikretsar konstrueras för att tillhandahålla avbrottsvektor (kan ej anslutas

Maskinorienterad Programmering Vektoravbrott Undantagshantering Somliga periferikretsar konstrueras för att tillhandahålla avbrottsvektor (kan ej anslutas till HCS 12) 26

Maskinorienterad Programmering Prioritet vid vektoravbrott (Daisy chain) Undantagshantering 27

Maskinorienterad Programmering Prioritet vid vektoravbrott (Daisy chain) Undantagshantering 27

Maskinorienterad Programmering EXEMPEL, ”Cold. Fire” (MC 68 x 00) Vektor nr 0 1 2

Maskinorienterad Programmering EXEMPEL, ”Cold. Fire” (MC 68 x 00) 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 00 C 010 014 018, 01 C 020 024 028 02 C 030 034 038 03 C 040 -05 F 060 064 068 06 C 070 074 078 07 C 080 -0 BF 0 C 0 -0 FF 100 -3 FF 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 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 #<vektor_nummer> Undantag vid flyttalshantering, Reserverade vektorer Användardefinierade vektorer RESET vektor ”Undantag” genererade av program Autovektor avbrott Vektoravbrott 28

Maskinorienterad Programmering Skrivarport med avbrott, Version 5 DAV Datorsystem READY IRQ READY Skrivare Skrivarbuss

Maskinorienterad Programmering Skrivarport med avbrott, Version 5 DAV Datorsystem READY IRQ READY Skrivare Skrivarbuss DAV Datorsystem Skrivare Skrivar buss IRQ "1" 1 D Q C 1 R Adress avkodning Q READY A 1 A 0 R/W Undantagshantering 29

Maskinorienterad Programmering Skrivarport, Version 5 PRINTER EQU PSTATUS EQU PCONTROL EQU $0800 $0801 $0802

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

Maskinorienterad Programmering Skrivarport, Version 6 I vår sista lösning kan vi stänga av avbrotten

Maskinorienterad Programmering Skrivarport, Version 6 I vår sista lösning kan vi stänga av avbrotten från skrivaren. ”Disable Interrupt” Undantagshantering 31