Maskinorienterad Programmering 211/212 CPU12 eference Guide Stencil: Assemblerprogrammering.pdf Ur innehållet: äknarkretsar ( TMES ) Pulsbreddsmodulering ( PM ) Analog-/Digital- omvandling ( AD ) Seriekommunikation ( SC ) 1 CG, Clock eset Generator HCS12 har programmerbar arbetstakt. Kontrolleras från CG-modul. BusClock (E) = PLLCLK/2 2
EXEMPEL: Bestäm busfrekvens Antag 8 MHz kristall. PLLCLK får aldrig vara mindre än OSCCLK eftersom detta äventyrar stabilitetsvillkoren i oscillatorn. PLLCLK/2 får aldrig vara större än nominella arbetsfrekvensen hos kretsen. För första generationens HCS12 innebär detta att PLLCLK/2 < 25 MHz. 5MHz ( SYN 1) 28MHz ( EFDV 1) Sätt: SYN = 5 och EFDV = 1 (5 1) 28MHz 283MHz 48MHz (1 1) 3 Basadress = $34 Algoritm: 1. Skriv nya värden till SYN, EFDV. 2. Vänta tills kretsen låser (LOCK=1) 3. Växla till PLL (sätt PPLSEL=1) $34 $35 $36 $37 $38 $39 $3A $3B $3C $3D $3E $3F Clock eset Generator (CG) Offset 7 6 5 4 3 2 1 Mnemonic Namn Synthesizer SYN5 SYN4 SYN3 SYN2 SYN1 SYN SYN EFDV EFDV EFDV EFDV eference Divide EFDV 1 3 2 1 *)Test Flags CTFLG 2 TF POF LVF LOCK LOCK SCME SCMF SCM Flags CGFLG 3 F LOCK nterrupt Enable TE SCME CGNT 4 E PLLSEL PSTP SYSA Clock Select OAA PLLA CA TA COPA CLKSEL 5 PLL Control CME PLLON AUTO AOQ PE PCE SCME PLLCTL 6 T Control T6 T5 T4 T3 T2 T1 T TCTL 7 COP Control COP SBCK C2 C1 C COPCTL 8 *)Force and $ FOBYP Bypass Test 9 *)Test Control CTCTL A COP Arm/Timer AMCOP B Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit eset 4
$34 $35 $36 $37 $38 $39 $3A $3B $3C $3D $3E $3F Clock eset Generator (CG) Offset 7 6 5 4 3 2 1 Mnemonic Namn Synthesizer SYN5 SYN4 SYN3 SYN2 SYN1 SYN SYN EFDV EFDV EFDV EFDV eference Divide EFDV 1 3 2 1 *)Test Flags CTFLG 2 TF POF LVF LOCK LOCK SCME SCMF SCM Flags CGFLG 3 F LOCK nterrupt Enable TE SCME CGNT 4 E PLLSEL PSTP SYSA Clock Select OAA PLLA CA TA COPA CLKSEL 5 PLL Control CME PLLON AUTO AOQ PE PCE SCME PLLCTL 6 T Control T6 T5 T4 T3 T2 T1 T TCTL 7 COP Control COP SBCK C2 C1 C COPCTL 8 *)Force and $ FOBYP Bypass Test 9 *)Test Control CTCTL A COP Arm/Timer AMCOP B Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit eset 5..programmering.. mplementera i assembler och C... Vi löser på tavlan... 6
äknarkrets ( timer ), principiell funktion Pulser/ intervall äknar värde eload Q Q Q t Clk Prescaler Används för att dela ned klockfrekvensen Nedräknare Läsbart register = Q Enable Q Periodiska avbrott Kan användas för att skapa en EALTDSKLOCKA 7 ealtidsklocka i HCS12 Tre olika register används för realtidsklockan 8
ealtidsklocka i HCS12, initiering Algoritm, initiering 2. Aktivera avbrott från kretsen 1. Skriv tidbas för avbrottsintervall till TCTL $34 $35 $36 $37 $38 $39 $3A $3B $3C $3D $3E $3F Clock eset Generator (CG) Offset 7 6 5 4 3 2 1 Mnemonic Namn Synthesizer SYN5 SYN4 SYN3 SYN2 SYN1 SYN SYN EFDV EFDV EFDV EFDV eference Divide EFDV 1 3 2 1 *)Test Flags CTFLG 2 TF POF LVF LOCK LOCK SCME SCMF SCM Flags CGFLG 3 F LOCK nterrupt Enable TE SCME CGNT 4 E PLLSEL PSTP SYSA Clock Select OAA PLLA CA TA COPA CLKSEL 5 PLL Control CME PLLON AUTO AOQ PE PCE SCME PLLCTL 6 T Control T6 T5 T4 T3 T2 T1 T TCTL 7 COP Control COP SBCK C2 C1 C COPCTL 8 *)Force and $ FOBYP Bypass Test 9 *)Test Control CTCTL A COP Arm/Timer AMCOP B Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit eset 9 Prescaler för räknarkretsen OSCCLK T Tfreq T T[6:4] [3:] 1 1 11 1 11 11 111 (OFF) OFF 2 1 2 11 2 12 2 13 2 14 2 15 2 16 1 OFF 2x2 1 2x2 11 2x2 12 2x2 13 2x2 14 2x2 15 2x2 16 1 OFF 3x2 1 3x2 11 3x2 12 3x2 13 3x2 14 3x2 15 3x2 16 11 OFF 4x2 1 4x2 11 4x2 12 4x2 13 4x2 14 4x2 15 4x2 16 1 OFF 5x2 1 5x2 11 5x2 12 5x2 13 5x2 14 5x2 15 5x2 16 11 OFF 6x2 1 6x2 11 6x2 12 6x2 13 6x2 14 6x2 15 6x2 16 11 OFF 7x2 1 7x2 11 7x2 12 7x2 13 7x2 14 7x2 15 7x2 16 111 OFF 8x2 1 8x2 11 8x2 12 8x2 13 8x2 14 8x2 15 8x2 16 1 OFF 9x2 1 9x2 11 9x2 12 9x2 13 9x2 14 9x2 15 9x2 16 11 OFF 1x2 1 1x2 11 1x2 12 1x2 13 1x2 14 1x2 15 1x2 16 11 OFF 11x2 1 11x2 11 11x2 12 11x2 13 11x2 14 11x2 15 11x2 16 111 OFF 12x2 1 12x2 11 12x2 12 12x2 13 12x2 14 12x2 15 12x2 16 11 OFF 13x2 1 13x2 11 13x2 12 13x2 13 13x2 14 13x2 15 13x2 16 111 OFF 14x2 1 14x2 11 14x2 12 14x2 13 14x2 14 14x2 15 14x2 16 111 OFF 15x2 1 15x2 11 15x2 12 15x2 13 15x2 14 15x2 15 15x2 16 1111 OFF 16x2 1 16x2 11 16x2 12 16x2 13 16x2 14 16x2 15 16x2 16 1
Beräkning av tidbas OSCCLK T Tfreq 81 T 6 1 1 2 T x2 y 81 4 (Se även exempel i Stencil 2 ) Den bästa approximationen har vi för T = 1 11 = $49, som medför: 1x2 13 = 8192 Eftersom detta värde är något större än det exakta, kommer vi att få en något längre periodtid, nämligen: avbrottsfrekvens = 8 1 6 / 8192 = 97.656 Hz vilket ger periodtiden:.124 s = 1,24 ms. Klockan kommer alltså att "gå för sakta" som en följd av detta systematiska fel. 11 ealtidsklocka i HCS12, vid avbrott Clock eset Generator (CG) Offset 7 6 5 4 3 2 1 Mnemonic Namn Synthesizer $34 SYN5 SYN4 SYN3 SYN2 SYN1 SYN SYN EFDV EFDV EFDV EFDV eference Divide $35 EFDV 1 3 2 1 *)Test Flags $36 CTFLG 2 TF POF LVF LOCK LOCK SCME SCMF SCM Flags $37 CGFLG 3 F LOCK $38 nterrupt Enable TE SCME CGNT 4 E $39 PLLSEL PSTP SYSA Clock Select OAA PLLA CA TA COPA CLKSEL 5 PLL Control Adress $3A CME PLLON AUTO AOQ PE PCE SCME PLLCTL 6 (hex) Funktion T Control FFF eal Time nterrupt $3B T6 T5 T4 T3 T2 T1 T TCTL 7 FFEE Enhanced Capture Timer channel $3C COP Control COP SBCK C2 C1 C COPCTL FFEC Enhanced Capture Timer channel 8 1 FFEA Enhanced Capture Timer channel 2 *)Force and $...... $3D FOBYP Bypass Test 9 FF8E Port P nterrupt FF8C PM Emergency $3E Shutdown *)Test Control CTCTL FF8A- eserverade A FF8 $3F COP Arm/Timer AMCOP B Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit eset Algoritm, kvittera avbrott 1. TF = 1 12
..programmering.. mplementera i assembler och C... Vi löser på tavlan... 13 ealtidsklocka med hög upplösning Enhanced Capture Timer (ECT) En maskincykels noggrannhet EXEMPEL: Arbetstakt= 24 MHz PEOD = 24 ntervall = 1 ms Noggrannhet = 1/24 sek. 41,7 1-9 sec. 14
Programexempel TOS EQU $4 TCNT EQU $44 TE EQU $4C TFLG1 EQU $4E TOC_ EQU $5 PEOD EQU 24 nit: MOVB #1,TOS ; ch är OC MOVB #1,TE ; tillåt Q LDD TCNT ; aktuell cykel ADDD #PEOD ; addera period STD TOC_ ; nästa avbrott TS OG FDB $FFEE TOCirq TOCirq : MOVB #1,TFLG1 ; kvittera LDD TCNT ; ny period ADDD #PEOD STD TOC_ T Adress (hex) Funktion FFF eal Time nterrupt FFEE Enhanced Capture Timer channel FFEC Enhanced Capture Timer channel 1 FFEA Enhanced Capture Timer channel 2...... FF8E Port P nterrupt FF8C PM Emergency Shutdown FF8A- eserverade FF8 15 Pulsbreddsmodulering (PM) U 1 U out 2 U U out dutycycle U period U period dutycycle 3 U out 4 U Period och dutycycle är programmerbart U 1 U out 4 U 16
PM-styrning Control bus Data bus period dutycycle Högtalare, glödlampa element, etc... PM Continous signal out Power Amplifier 17 8 * 8 bitars eller 4 * 16 bitars räknare period duty cycle 18
Programexempel ; PM initiering PME EQU $A PPOL EQU $A1 PMPCLK EQU $A3 PMPE EQU $B4 PMDTY EQU $BC ; låg nivå startar period CL PMPOL ; c:a 4 ms periodtid MOVB #$77,PMPCLK ; pwm kanal MOVB #$FF,PMPE ; börja med 8% duty cycle.. MOVB #$D,PMDTY ; aktivera kanal MOVB #1,PME 19 Analog-/Digital- omvandling 2
Multiplex 8 kanaler. 21 Programexempel ; AD initiering ; Högerjustera resultat, unipolärt ; kontinuerlig mode (scan), AD kanal 6 MOVB ; upplösning MOVB #$A6,ATDCTL5 #$E5,ATDCTL4 ; en konverteringssekvens MOVB #$4,ATDCTL3 ; normal mode MOVB #$C,ATDCTL2 ; Vänta tills omvandling klar wad: BCL ATDSTAT,#$8,wAD ; När resultat färdigt, läs LDAB ATDDL... 22
Seriekommunikation, SC Central Processing Unit Serial to parallel conversion eceive Data: xd Parallel to serial conversion Transmit Data: TxD Central Processing Unit Serial to parallel conversion Transceiver eceive Transmit Transceiver eceive Transmit Parallel to serial conversion Serial transmission 23 Sändare Data buss Mottagare Data buss Control CS OE Data Control OE Data E Clock Shift Serial data out TxD Serial data in xd Clock Shift Sändare och mottagares klockor går i samma takt 24
S232 överföring av tecknet z tecknet z representeras av bitmönstret 111 11 (ASC-tecken). + 1 volt volt - 1 volt S T A T B T idle 1 1 1 1 1 1 idle P A T Y B T S T O P B T z minst signifikanta bit först 25 nitiering, busy-wait Basadress = $C8 Algoritm: 1. nitiera BAUDATE 2. Aktivera Transmitter eceiver Serial Communication nterface (SC) Offset 7 6 5 4 3 2 1 Mnemonic Namn $ Baud ate SB12 SB11 SB1 SB9 SB8 SCBDH High $1 Baud ate SB7 SB6 SB5 SB4 SB3 SB2 SB1 SB SCBDL Low $2 LOOPS SCSA SC M AKE LT PE PT SCC1 Control 1 $3 TE TCE E LE TE E U SBK SCC2 Control 2 $4 TDE TC DF DLE O NF FE PF SCS1 Status 1 $5 AF BK13 TXD SCS2 Status 2 $6 8 Data T8 SCDH High $7 7 6 5 4 3 2 1 T7 T6 T5 T4 T3 T2 T1 T SCDL Data Low SCBD: EQU $C8 ; SC baudrate-register (16 bit). SCC2: EQU $CB ; SC styr-register 2. ; Bitdefinitioner, styrregister TE: EQU $8 ; Transmitter enable. E: EQU $4 ; eceiver enable. 26
Skriv tecken via SC Algoritm: TDE = (Transmit Data Empty) 1. Om TDE=1 SCDL=tecken Serial Communication nterface (SC) Offset 7 6 5 4 3 2 1 Mnemonic Namn $ Baud ate SB12 SB11 SB1 SB9 SB8 SCBDH High $1 Baud ate SB7 SB6 SB5 SB4 SB3 SB2 SB1 SB SCBDL Low $2 LOOPS SCSA SC M AKE LT PE PT SCC1 Control 1 $3 TE TCE E LE TE E U SBK SCC2 Control 2 $4 TDE TC DF DLE O NF FE PF SCS1 Status 1 $5 AF BK13 TXD SCS2 Status 2 $6 8 Data T8 SCDH High $7 7 6 5 4 3 2 1 T7 T6 T5 T4 T3 T2 T1 T SCDL Data Low SCS1: EQU $CC ; SC status-register 1. SCDL: EQU $CF ; SC data-register låg byte. ; Bitdefinitioner, statusregister TDE: EQU $8 ; Transmit data register empty status bit. 27 Läs tecken från SC Algoritm: DF = (eceive Data Full) 1. Om DF =1 tecken=scdl Serial Communication nterface (SC) Offset 7 6 5 4 3 2 1 Mnemonic Namn $ Baud ate SB12 SB11 SB1 SB9 SB8 SCBDH High $1 Baud ate SB7 SB6 SB5 SB4 SB3 SB2 SB1 SB SCBDL Low $2 LOOPS SCSA SC M AKE LT PE PT SCC1 Control 1 $3 TE TCE E LE TE E U SBK SCC2 Control 2 $4 TDE TC DF DLE O NF FE PF SCS1 Status 1 $5 AF BK13 TXD SCS2 Status 2 $6 8 Data T8 SCDH High $7 7 6 5 4 3 2 1 T7 T6 T5 T4 T3 T2 T1 T SCDL Data Low SCS1: EQU $CC ; SC status-register 1. SCDL: EQU $CF ; SC data-register låg byte. ; Bitdefinitioner, statusregister DF: EQU $2 ; eceive data register full status bit. 28
Bestämma Baudrate-värde exempel: 96 baud PLLCLK=48 MHz -> E-klocka = 24 MHz B PLLCLK / 2 16 baudrate baudrate PLLCLK / 2 16 B 9 6 6 241 156,25 16 96 6 241 16156 9615, 6 241 16157 9585 Eclock: EQU 24 ; 24 MHz ; Baudate register värden, baseras på PLL-klocka Baud96: EQU (Eclock/(16*96)) 29..programmering.. mplementera i assembler och C... Vi löser på tavlan... 3