ECE 372

Document Sample
ECE 372 Powered By Docstoc
					          ECE 372 – Microcontroller Design
          Basic Assembly Programming

                            For Loop Example:
                            for(j=0; j<10; j++)
                            {
                                // do something
                            }

Programming Steps:                     Assembly Code:
1.   Initialize J                            ldaa #0     ; Initialize j
                                       Loop: cmpa #10    ; Compare j to 10
2.   Compare J to 10
                                             bge EndLoop ; Else !(j<10)
3.   If Not Less than 10,                                ; do something
     1. End Loop                             adda #1     ; Increment j
4.   Else                                    bra Loop    ; Repeat Loop
     1.    do something                EndLoop:          ; do something else
     2.    Increment J
     3.    Repeat Loop (Step 2)


                                                                         1
ECE 372 – Microcontroller Design
Basic Assembly Programming
Assembly Code:
      ldaa #0     ; Initialize j
Loop: cmpa #10    ; Compare j to 10
      bge EndLoop ; Else !(j<10)
                  ; do something
      adda #1     ; Increment j                          How do we determine
      bra Loop    ; Repeat Loop                          these values?
EndLoop:          ; do something else

 $4000   $86   LDAA immediate addressing
 $4001   $00   Value to be stored in A
 $4002    $    CMPA immediate addressing
 $4003   $0A   Compare Value 10
 $4004    $    BGE (Branch if greater then or equal to
               zero)
 $4005   $04   PC=PC+2+Rel
 $4006    $    ADDA immediate addressing
 $4007   $01   Value to add to A
 $4008    $    Branch Always
 $4009   $F8   PC=PC+2+Rel
   …                                                                      2
ECE 372 – Microcontroller Design
HCS12 Instruction Set Summary Overview




                         …

                         …
                         …



                         …



                                         3
ECE 372 – Microcontroller Design
HCS12 Instruction Glossary




                                   4
ECE 372 – Microcontroller Design
HCS12 Opcode Table




                                   5
ECE 372 – Microcontroller Design
Basic Assembly Programming
Assembly Code:
      ldaa #0     ; Initialize j
Loop: cmpa #10    ; Compare j to 10
      bge EndLoop ; Else !(j<10)
                  ; do something
      adda #1     ; Increment j
      bra Loop    ; Repeat Loop
EndLoop:          ; do something else

 $4000   $86   LDAA immediate addressing
 $4001   $00   Value to be stored in A
 $4002   $81   CMPA immediate addressing
 $4003   $0A   Compare Value 10
 $4004   $2C   BGE (Branch if greater then or equal to
               zero)
 $4005   $04   PC=PC+2+Rel
 $4006   $8B   ADDA immediate addressing
 $4007   $01   Value to add to A
 $4008   $20   Branch Always
 $4009   $F8   PC=PC+2+Rel
   …                                                     6
ECE 372 – Microcontroller Design
Execution Time Analysis

How long does this loop take to execute?                       Cycles
 $4000   $86   LDAA immediate addressing                         1
 $4001   $00   Value to be stored in A
 $4002   $81   CMPA immediate addressing                         1
 $4003   $0A   Compare Value 10
 $4004   $2C   BGE (Branch if greater then or equal to zero)    3/1
 $4005   $04   PC=PC+2+Rel                                              Loop
 $4006   $8B   ADDA immediate addressing                         1
 $4007   $01   Value to add to A
 $4008   $20   Branch Always                                     3
 $4009   $F8   PC=PC+2+Rel
   …

Loop Cycles = (1+1+1+3)*10 + (1+3)
Loop Cycles = 64 cycles
Core Clock = 4 MHz
Execution Time = 64 * 250 ns = 16000 ns
Execution Time = 16 us
                                                                           7
ECE 372 – Microcontroller Design
HCS12 Registers




                                   8
        ECE 372 – Microcontroller Design
        HCS12 Registers - Accumulators




   Accumulators
       Source and destination of arithmetic
        operations
       A, B are 8-bit registers
       D is the combination of A and B
             Forms a 16-bit register
             A is the MSB and B is the LSB
       Used for 16-bit operations
                                               ldaa #$5




                                                          9
     ECE 372 – Microcontroller Design
     HCS12 Registers - Accumulators




Is there any difference between the following assembly code examples?
ldaa #$50
ldab #$01          vs.        ldd #$0150      vs.      ldd #$5001




ldaa #$00                                              clra
ldab #$0A          vs.        ldd #10         vs.      ldab #$0A




                                                                        10
         ECE 372 – Microcontroller Design
         HCS12 Registers - CCR

   Condition Code Register (CCR)
        C – Carry/Borrow
              Set when a carry occurs during addition or
               a borrow occurs during subtraction

        O – Overflow
              Set in the event of an overflow during an
               arithmetic operation

        Z – Zero
              Set when all the bits of the result are 0s

        N – Negative
              Shows the state of the MSB of the result
              N is most commonly used in two’s
               complement arithmetic (more on this later)

        H – Half Carry
              Indicates a carry from accumulator A bit 3
               during an addition operation
              DAA instruction uses the value of the H bit

                                                             11
         ECE 372 – Microcontroller Design
         HCS12 Registers - CCR

   Condition Code Register (CCR)
        S – Enable/Disable STOP instruction
              Clearing the S bit enables the STOP
               instruction
              Setting the S bit will treat a STOP
               instruction like a NOP


        I, X – Mask IRQ/XIRQ Interrupts
              More on these later




                                                     12
ECE 372 – Microcontroller Design
Time for Fun (or maybe not?)




             1                 2       3




             4          5          4   5




             1                 2       3


                                           13
ECE 372 – Microcontroller Design
MC9S12C Block Diagram




                                   14
ECE 372 – Microcontroller Design
MC9S12C Block Diagram




                        Internal System Bus   15
         ECE 372 – Microcontroller Design
         Instruction Execution Timing - Reset
         $4000   $86     LDAA immediate addressing
         $4001   $00     Value to be stored in A
         $4002   $81     CMPA immediate addressing
         $4003   $0A     Compare Value 10
         $4004   $2C     BGE (Branch if greater then or equal to
                         zero)
         $4005   $04     PC=PC+2+Rel
         $4006   $8B     ADDA immediate addressing
         $4007   $01     Value to add to A
         $4008   $20     Branch Always
         $4009   $F8     PC=PC+2+Rel


        ECLK

        R/W

    ADDR15:0         $FFFE        $4000         $4002



    DATA15:0            $4000         $8600         $810A




                       Read initial   Read ldaa instruction
Triggered by Reset     PC address     and immediate value
                                                                   16
    ECE 372 – Microcontroller Design
    Instruction Execution Timing – Initial Loop Execution
    $4000   $86   LDAA immediate addressing
    $4001   $00   Value to be stored in A
    $4002   $81   CMPA immediate addressing
    $4003   $0A   Compare Value 10
    $4004   $2C   BGE (Branch if greater then or equal to
                  zero)
    $4005   $04   PC=PC+2+Rel
    $4006   $8B   ADDA immediate addressing
    $4007   $01   Value to add to A
    $4008   $20   Branch Always
    $4009   $F8   PC=PC+2+Rel


   ECLK

    R/W

ADDR15:0     $FFFE         $4000          $4002         $4004        $4006



DATA15:0          $4000        $8600           $810A        $2C04        $8B01



                                       A = 0                                     A = 1
                                                              Branch not taken,
                                                            requires only 1 cycles
                                                                                         17
    ECE 372 – Microcontroller Design
    Instruction Execution Timing – BRA Execution
    $4000   $86   LDAA immediate addressing
    $4001   $00   Value to be stored in A
    $4002   $81   CMPA immediate addressing
    $4003   $0A   Compare Value 10
    $4004   $2C   BGE (Branch if greater then or equal to
                  zero)
    $4005   $04   PC=PC+2+Rel
    $4006   $8B   ADDA immediate addressing
    $4007   $01   Value to add to A
    $4008   $20   Branch Always
    $4009   $F8   PC=PC+2+Rel


   ECLK

    R/W
                                     PC = $4008 + 2 + $F8(-8) = $4002

ADDR15:0     $4006           $4008                                      $4002      $4004



DATA15:0          $8B01           $20F8                                    $810A      $2C04



                          A = 1
                                  Branch always (BRA)
                                    requires 3 cycles
                                                                                              18
    ECE 372 – Microcontroller Design
    Instruction Execution Timing – Final Loop Execution
    $4000     $86    LDAA immediate addressing
    $4001     $00    Value to be stored in A
    $4002     $81    CMPA immediate addressing
    $4003     $0A    Compare Value 10
    $4004     $2C    BGE (Branch if greater then or equal to
                     zero)
    $4005     $04    PC=PC+2+Rel
    $4006     $8B    ADDA immediate addressing
    $4007     $01    Value to add to A
    $4008     $20    Branch Always
    $4009     $F8    PC=PC+2+Rel


   ECLK

    R/W
                                      PC = $4004 + 2 + $04 = $4010

ADDR15:0        $4002         $4004                                  $4010



DATA15:0             $810A        $2C04                                 $????



            A = 10
                                 A>=10, Branch taken,
                                   requires 3 cycles
                                                                                19

				
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
views:1
posted:11/24/2011
language:English
pages:19