1 / 61

EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12, Arbetsbok för MC12 CPU12 Reference Guide

EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12, Arbetsbok för MC12 CPU12 Reference Guide Ur innehållet: Historik Översikt, ”single-chip-computer” DG256 Programmerarens bild (Exempel). Instruktionsuppsättning. ”ISA” – Instruction Set Architecture. Vilka operationer kan utföras ?

ceri
Télécharger la présentation

EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12, Arbetsbok för MC12 CPU12 Reference Guide

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. EDA 451 - Digital och Datorteknik • 2009-2010 • MC68HC12, • Arbetsbok för MC12 • CPU12 Reference Guide • Ur innehållet: • Historik • Översikt, ”single-chip-computer” DG256 • Programmerarens bild • (Exempel)

  2. Instruktionsuppsättning ”ISA” – Instruction Set Architecture • Vilka operationer kan utföras ? • Instruktionsgrupper • Hur lagras operanderna förutom i minnet ? • Korttidslagring • Hur nås operander i minnet? • Adresseringssätt • Vilka typer/storlekar av operander kan hanteras ? • Generella/speciella register, registerstorlek

  3. Instruktionsgrupper • Motorola (Freescale) • MC68HC12 • Load/Store • Data movement • Program (Flow) control • Integer arithmetic • Logical operations • Bit manipulation • System control EXEMPEL: • PowerPC • Load/Store • Program (Flow) control • Integer arithmetic • Floating-point arithmetic • Processor control • Synchronization • Miscellanous • Motorola (Freescale) • MC68X00/Coldfire • Data movement • Program (Flow) control • Integer arithmetic • Floating-point arithmetic • Logical operations • Bit manipulation • System control • Cache maintenance • FLEX • Load/Store • Data movement • Program (Flow) control • Integer arithmetic/test • Logical operations • Shift/rotate • Stack operations

  4. Korttidslagring, Stack/Ackumulator/Register Exempel: Kodning av operationen A = B + C Register LOAD R1,B LOAD R2,C ADD R3,R1,R2 STORE A,R3 Stack PUSH B PUSH C ADD POP A Ackumulator LOAD B ADD C STORE A Exempel: PDP8, R6502 MC68HC12 FLEX ... Exempel (RISC): PowerPC, MIPS, SPARC ... Exempel: B5500, HP3000/70 ... Exempel (CISC): IBM360, DEC PDP11/VAX MC68x00 Intel Pentium ... Dessutom existerar ”mellanting” av dessa. Mest namnkunnigt exempel: Intel 8086 (-186/-286/-386/-486)

  5. Register – programmerarens bild Stackmaskiner: Har som regel inga ”synliga”register Ackumulatormaskiner: Har oftast flera register men med dedikerad användning: Exempel: ”Ackumulator”, ”Indexregister” Registermaskiner: Generellt användbara register. Exempel: ”Dataregister”, ”Adressregister”, ”Flyttalsregister”

  6. EXEMPEL - Registermaskiner PowerPC Motorola (Freescale) MC68X00/Coldfire Zilog Z80

  7. EXEMPEL Ackumulator – Intel 80xx 80386 8086 8080/8085 31 16 15 8 7 0 15 8 7 0 AL AH EAX A X AL AH ACCUMULATOR A X BL EBX BH 7 0 B X BL BH BASE B X ACCUMULATOR CL CH ECX C X CL CH ACCUMULATOR C X 15 DL DH EDX 8 7 0 D X DL DH ACCUMULATOR D X B C SI ESI 15 0 D E DI EDI SP STACK POINTER H L BP EBP BP BASE POINTER B C SP ESP SI SOURCE INDEX 15 0 DI DESTINATION INDEX 31 16 15 0 STACK POINTER 15 0 IP EIP PROGRAM COUNTER IP INSTRUCTION POINTER FLAGS EFLAGS INCREMENTER/DECREMENTER FLAGSL FLAGSH STATUS FLAGS 15 0 15 0 CS CODE SEGMENT CS CODE DS DATA SEGMENT SS STACK SS STACK SEGMENT DS ES EXTRA SEGMENT ES DATA FS GS

  8. EXEMPEL - Ackumulator Motorola 68HC12 8 7 0 15 A B 8-BIT ACCUMULATORS A AND B OR 16-BIT DOUBLE ACCUMULATOR D D FLEX 15 0 Motorola 6800 X INDEX REGISTER X 15 0 7 0 7 0 Y INDEX REGISTER Y A ACCUMULATOR A ACCA ACCUMULATOR A 15 0 7 0 7 0 SP STACK POINTER B ACCUMULATOR B ACCB ACCUMULATOR B 15 0 7 0 15 0 PC PROGRAM COUNTER X INDEX REGISTER IX INDEX REGISTER 7 0 7 0 15 0 S X H I N Z V C CONDITION CODES REGISTER PC PROGRAM COUNTER Rockwell 6502 PC PROGRAM COUNTER 7 0 15 0 SP STACK POINTER SP STACK POINTER 7 0 3 0 A ACCUMULATOR A 5 0 N Z V C CONDITION CODES REGISTER H I N Z V C CONDITION CODES REGISTER 7 0 Y INDEX REGISTER Y 7 0 X INDEX REGISTER X 15 8 7 0 PCH PCL PROGRAM COUNTER 15 0 1 S STACK POINTER 7 0 N V 1 B D I Z C PROCESSOR STATUS REG ’P’

  9. Programmerarens bild – datatyper/storlek

  10. Historik 68HC12SX 68HC12S 68HC12 68HC11 6809 6801 6800 1978 2002 2006 1974 1982 1986 1990 1994 1998

  11. HCS12 adressrum, IO och minne CPU12, klockor och räknare ”Random Access”- Minne RWM, FLASH, EEPROM Periferienheter Parallell Input/Output: Seriell kommunikation AD PWM Freescale 68HCS12

  12. HCS12DG256,blockdiagram

  13. HCS12DG256, ”core”

  14. HCS12DG256, ”core” Spänningsregulatorer (flera olika spänningar används internt) ”Background Debug Mode” för test/avlusning En kristall utgör bas för alla klockfrekvenser i systemet Realtidsklocka och andra klockfunktioner Programmerbara funktioner Vi återkommer till detta i ”Maskinorienterad Programmering”

  15. Icke flyktigt minne Upp till 256 Kbyte i ”minnesbankar” 48 kB utan användning av ”bankar” 4 kB EEPROM Flyktigt minne 12 kB RAM Primärminne

  16. EXEMPEL, linjärt adressrum FFFF 4000 3FFF 1000 FFF 400 3FF 0 FLASH RWM (”RAM”) Synlig del av EEPROM MCHCS12 Interna register

  17. FFFF C000 BFFF 8000 7FFF 4000 3FFF 1000 FFF 400 3FF 0 FLASH 30 33 34 35 38 39 3A 3B 3C 3D ”Bankat” FLASH Dx256 31 32 36 37 FLASH RWM (”RAM”) Synlig del EEPROM MCHCS12 Interna register EXEMPEL, ”bankat” adressrum

  18. EXEMPEL, i laborationsdator MC12 FFFF C000 BFFF 8000 7FFF 4000 3C80 1000 FFF 400 3FF 0 FLASH (monitor/debugger) 30 33 34 35 38 39 3A 3B 3C 3D ”Bankat” FLASH Dx256 31 32 36 37 Minne tillgängligt för ”användarprogram” FLASH (monitor/debugger) RWM (”RAM”) Externt IO-gränssnitt MCHCS12 Interna register

  19. Periferikretsar i HCS12DG256 AD – Analog till Digital omvandling ECT- Räknarkretsar för noggrann tidmätning SCI – Asynkron seriekommunikation Parallell In-Utmatning PWM – Pulsbreddsmodulering Etc…

  20. HCS12DG256, ”core” Centralenhet CPU12

  21. Registeruppsättning CPU12 15 8 7 0 A B 8-BIT ACCUMULATORS A AND B OR 16-BIT DOUBLE ACCUMULATOR D D 15 0 X INDEX REGISTER X 15 0 Y INDEX REGISTER Y 15 0 SP STACK POINTER 15 0 PC PROGRAM COUNTER 7 0 S X H I N Z V C CONDITION CODES REGISTER

  22. Adresseringssätt Vi känner igen de flesta adresseringssätten i från FLEX. Indexerade adresseringssätt kan även användas med register X,Y och SP ibland också med PC (PC-relativt) Nytt här är också ”Indirekt adressering”

  23. Inherent Maskinkod för instruktionen Cykel för cykel beskrivning Flaggpåverkan

  24. Omedelbar (Immediate) 8-bit/16-bit opr8i, 8-bitars konstant om 8-bitars register Opr16i, 16-bitars konstant om 16-bitars register

  25. Direkt (Direct Page) Absolut (Extented) opr16a, kan adressera hela adressintervallet 0000-FFFF opr8a, kan enbart adressera intervallet 0000-00FF, anger minst signifikant byte av adressen

  26. PC-relativ (”BRANCH”-instruktioner) • 8-bitars offset (-128..127) • 9-bitars offset (-256..255) • 16-bitars offset (-32768..32767)

  27. Indexerade adresseringssätt: • Register relativ, konstant offset Basregister kan vara något av: X,Y,SP,PC EXEMPEL: LDAA 5,X STAA 20,Y LDAA sym,PC STA off,SP ... Observera, ingen syntaktisk skillnad. Assemblator väljer effektivast kodning Specialfall: n,PCR LDAA sym,PCR Antag PC pekar på nästa instruktion. Operanden är här PC-sym, jfr offsetberäkning för ”BRA”-instruktioner

  28. Indexerade adresseringssätt: • Auto pre- increment/decrement • Auto post- increment/decrement Basregister kan vara något av: X,Y,SP EXEMPEL: LDAA 1,-X STAA 4,Y- STAB 8,+SP LDAB 7,SP+ ...

  29. Indexerade adresseringssätt: • Register relativ, offset i ackumulator Basregister kan vara något av: X,Y,SP,PC EXEMPEL: LDAA A,X STAA B,Y STAB D,SP LDAB D,PC ...

  30. Indexerade adresseringssätt: • Indirekt EXEMPEL: LDAA [D,X] STAA [sym,PCR] STAB [2,SP] LDAB [D,Y] ...

  31. Instruktionsgrupper LOAD-instruktioner STORE-instruktioner MOVE-instruktioner

  32. Instruktioner för kopiering av registerinnehåll Använd denna Övriga finns här av ”kompatibilitetsskäl” Instruktioner för växling av registerinnehåll Använd denna Övriga finns här av ”kompatibilitetsskäl” Instruktion för teckenutvidgning

  33. Ovillkorlig programflödeskontroll

  34. EXEMPEL - Modularisering ORG $1000 main: JSR init main_loop: JSR read JSR ... --- BRA main_loop init: --- RTS read: --- RTS

  35. Instruktioner för addition Instruktioner för subtraktion

  36. Instruktioner för logiska operationer • EXEMPEL: Nollställ bit 7-bit 4 på adress $3000 • LDAB $3000 • ANDB #%00001111 • STAB $3000 • EXEMPEL: Ettställ bit 7 och bit 0 på adress $3000 • LDAB $3000 • ORAB #%10000001 • STAB $3000 Unära operationer • EXEMPEL: Invertera bit 2 och bit1 på adress $3000 • LDAB $3000 • EORB #%00000110 • STAB $3000

  37. Logiska skiftoperationer • Exempel på användning: • Multiplikation med 2, tal utan tecken. • Division med 2, tal utan tecken.

  38. Aritmetiska skiftoperationer • Exempel på användning, högerskift: • Division med 2, tal med tecken.

  39. Instruktioner för rotation (carry-skift) • EXEMPEL: Skifta ett 32-bitars tal på adress $3000, 1 steg åt höger • LSR $3000 • ROR $3001 • ROR $3002 • ROR $3003 • Exempel på användning: • Skiftoperationer på tal större än 8 bitar.

  40. Instruktioner för jämförelser och test

  41. Villkorlig programflödeskontroll

  42. Instruktioner för räknande programslingor

  43. Kontrollstrukturer loop ... until( Villkor ) while( Villkor ) loop If( Villkor ) then ... if( Villkor ) then ... else ... end if(Villkor) { Satser; } if(Villkor) { Satser1; }else{ Satser2; } while(Villkor) { Satser; } do{ Satser; } while(Villkor);

  44. If (...) {...} ”Rättfram” kodning... DipSwitch EQU $600 HexDisp EQU $400 ... TST DipSwitch BNE assign BRA end assign LDAB DipSwitch STAB HexDisp end: if (DipSwitch != 0) HexDisp = Dipswitch;

  45. If (...) {...} Bättre kodning... DipSwitch EQU $600 HexDisp EQU $400 ... TST DipSwitch BEQ end LDAB DipSwitch STAB HexDisp end: if (DipSwitch != 0) HexDisp = Dipswitch;

  46. If (...) {...} else { ...} DipSwitch EQU $600 HexDisp EQU $400 ... LDAB DipSwitch ... TSTB BEQ not_else LDAB #0 STAB HexDisp BRA end not_else: LDAB #1 STAB HexDisp end: if (DipSwitch == 0) HexDisp = 1; else HexDisp = 0;

  47. If (...) {...} else { ...} DipSwitch EQU $600 HexDisp EQU $400 ... LDAB DipSwitch ... TSTB BNE else LDAB #1 STAB HexDisp BRA end else: LDAB #0 STAB HexDisp end: if (DipSwitch == 0) HexDisp = 1; else HexDisp = 0;

  48. DipSwitch EQU $600 HexDisp EQU $400 ... LDAB DipSwitch ... CMPB #5 BHS then LDAB #0 STAB HexDisp BRA end then: LDAB #1 STAB HexDisp end: If (...) {...} else { ...} if (DipSwitch >= 5) HexDisp = 1; else HexDisp = 0;

  49. while (...) {...} DipSwitch EQU $600 HexDisp EQU $400 ... while: LDAB DipSwitch ... TSTB BEQ end_while LDAB #1 STAB HexDisp BRA while end_while: LDAB #0 STAB HexDisp while (DipSwitch != 0) HexDisp = 1; HexDisp = 0;

  50. while (...) {...} Delay: LDD ”count” Delay_loop: NOP ... NOP SUBD #1 BHI Delay_loop Delay_end: RTS Delay( unsigned int count ) { while (count > 0) count = count - 1; }

More Related