Appendix D
**************************************************************
*
* Forward declaration of the default fault handlers.
*
**************************************************************
.global myStart, myStack, ResetISR, Vecs, _c_int00, _main
**************************************************************
* Interrupt vector table
**************************************************************
.sect “.intvecs”
Vecs: .word myStack + 0x400 ; The initial stack pointer
.word _main ; The reset handler
.word NmiSR ; The NMI handler
.word FaultISR ; The hard fault handler
.word IntDefaultHandler ; The MPU fault handler
.word IntDefaultHandler ; The bus fault handler
.word IntDefaultHandler ; The usage fault handler
.word 0 ; Reserved
.word 0 ; Reserved
.word 0 ; Reserved
.word 0 ; Reserved
.word IntDefaultHandler ; SVCall handler
.word IntDefaultHandler ; Debug monitor handler
.word 0 ; Reserved
.word IntDefaultHandler ; The PendSV handler
.word IntDefaultHandler ; The SysTick handler
.word IntDefaultHandler ; GPIO Port A
.word IntDefaultHandler ; GPIO Port B
.word IntDefaultHandler ; GPIO Port C
.word IntDefaultHandler ; GPIO Port D
.word IntDefaultHandler ; GPIO Port E
.word IntDefaultHandler ; UART0 Rx and Tx
.word IntDefaultHandler ; UART1 Rx and Tx
.word IntDefaultHandler ; SSI0 Rx and Tx
.word IntDefaultHandler ; I2C0 Master and Slave
.word IntDefaultHandler ; PWM Fault
.word IntDefaultHandler ; PWM Generator 0
.word IntDefaultHandler ; PWM Generator 1
.word IntDefaultHandler ; PWM Generator 2
.word IntDefaultHandler ; Quadrature Encoder 0
.word IntDefaultHandler ; ADC Sequence 0
.word IntDefaultHandler ; ADC Sequence 1
.word IntDefaultHandler ; ADC Sequence 2
.word IntDefaultHandler ; ADC Sequence 3
.word IntDefaultHandler ; Watchdog timer
.word IntDefaultHandler ; Timer 0 subtimer A
.word IntDefaultHandler ; Timer 0 subtimer B
.word IntDefaultHandler ; Timer 1 subtimer A
.word IntDefaultHandler ; Timer 1 subtimer B
.word IntDefaultHandler ; Timer 2 subtimer A
.word IntDefaultHandler ; Timer 2 subtimer B
.word IntDefaultHandler ; Analog Comparator 0
.word IntDefaultHandler ; Analog Comparator 1
.word IntDefaultHandler ; Analog Comparator 2
.word IntDefaultHandler ; System Control (PLL OSC BO)
.word IntDefaultHandler ; FLASH Control
.word IntDefaultHandler ; GPIO Port F
.word IntDefaultHandler ; GPIO Port G
.word IntDefaultHandler ; GPIO Port H
.word IntDefaultHandler ; UART2 Rx and Tx
.word IntDefaultHandler ; SSI1 Rx and Tx
.word IntDefaultHandler ; Timer 3 subtimer A
.word IntDefaultHandler ; Timer 3 subtimer B
.word IntDefaultHandler ; I2C1 Master and Slave
.word IntDefaultHandler ; Quadrature Encoder 1
.word IntDefaultHandler ; CAN0
.word IntDefaultHandler ; CAN1
.word IntDefaultHandler ; CAN2
.word IntDefaultHandler ; Ethernet
.word IntDefaultHandler ; Hibernate
.word IntDefaultHandler ; USB0
.word IntDefaultHandler ; PWM Generator 3
.word IntDefaultHandler ; uDMA Software Transfer
.word IntDefaultHandler ; uDMA Error
.word IntDefaultHandler ; ADC1 Sequence 0
.word IntDefaultHandler ; ADC1 Sequence 1
.word IntDefaultHandler ; ADC1 Sequence 2
.word IntDefaultHandler ; ADC1 Sequence 3
.word IntDefaultHandler ; I2S0
.word IntDefaultHandler ; External Bus Interface 0
.word IntDefaultHandler ; GPIO Port J
.word IntDefaultHandler ; GPIO Port K
.word IntDefaultHandler ; GPIO Port L
.word IntDefaultHandler ; SSI2 Rx and Tx
.word IntDefaultHandler ; SSI3 Rx and Tx
.word IntDefaultHandler ; UART3 Rx and Tx
.word IntDefaultHandler ; UART4 Rx and Tx
.word IntDefaultHandler ; UART5 Rx and Tx
.word IntDefaultHandler ; UART6 Rx and Tx
.word IntDefaultHandler ; UART7 Rx and Tx
.word 0 ; Reserved
.word 0 ; Reserved
.word 0 ; Reserved
.word 0 ; Reserved
.word IntDefaultHandler ; I2C2 Master and Slave
.word IntDefaultHandler ; I2C3 Master and Slave
.word IntDefaultHandler ; Timer 4 subtimer A
.word IntDefaultHandler ; Timer 4 subtimer B
.word 0 ; Reserved
.word 0 ; Reserved
.word 0 ; Reserved
.word 0 ; Reserved
.word 0 ; Reserved
.word 0 ; Reserved
.word 0 ; Reserved
.word 0 ; Reserved
.word 0 ; Reserved
.word 0 ; Reserved
.word 0 ; Reserved
.word 0 ; Reserved
.word 0 ; Reserved
.word 0 ; Reserved
.word 0 ; Reserved
.word 0 ; Reserved
.word 0 ; Reserved
.word 0 ; Reserved
.word 0 ; Reserved
.word 0 ; Reserved
.word IntDefaultHandler ; Timer 5 subtimer A
.word IntDefaultHandler ; Timer 5 subtimer B
.word IntDefaultHandler ; Wide Timer 0 subtimer A
.word IntDefaultHandler ; Wide Timer 0 subtimer B
.word IntDefaultHandler ; Wide Timer 1 subtimer A
.word IntDefaultHandler ; Wide Timer 1 subtimer B
.word IntDefaultHandler ; Wide Timer 2 subtimer A
.word IntDefaultHandler ; Wide Timer 2 subtimer B
.word IntDefaultHandler ; Wide Timer 3 subtimer A
.word IntDefaultHandler ; Wide Timer 3 subtimer B
.word IntDefaultHandler ; Wide Timer 4 subtimer A
.word IntDefaultHandler ; Wide Timer 4 subtimer B
.word IntDefaultHandler ; Wide Timer 5 subtimer A
.word IntDefaultHandler ; Wide Timer 5 subtimer B
.word IntDefaultHandler ; FPU
.word IntDefaultHandler ; PECI 0
.word IntDefaultHandler ; LPC 0
.word IntDefaultHandler ; I2C4 Master and Slave
.word IntDefaultHandler ; I2C5 Master and Slave
.word IntDefaultHandler ; GPIO Port M
.word IntDefaultHandler ; GPIO Port N
.word IntDefaultHandler ; Quadrature Encoder 2
.word IntDefaultHandler ; Fan 0
.word 0 ; Reserved
.word IntDefaultHandler ; GPIO Port P (Summary or P0)
.word IntDefaultHandler ; GPIO Port P1
.word IntDefaultHandler ; GPIO Port P2
.word IntDefaultHandler ; GPIO Port P3
.word IntDefaultHandler ; GPIO Port P4
.word IntDefaultHandler ; GPIO Port P5
.word IntDefaultHandler ; GPIO Port P6
.word IntDefaultHandler ; GPIO Port P7
.word IntDefaultHandler ; GPIO Port Q (Summary or Q0)
.word IntDefaultHandler ; GPIO Port Q1
.word IntDefaultHandler ; GPIO Port Q2
.word IntDefaultHandler ; GPIO Port Q3
.word IntDefaultHandler ; GPIO Port Q4
.word IntDefaultHandler ; GPIO Port Q5
.word IntDefaultHandler ; GPIO Port Q6
.word IntDefaultHandler ; GPIO Port Q7
.word IntDefaultHandler ; GPIO Port R
.word IntDefaultHandler ; GPIO Port S
.word IntDefaultHandler ; PWM 1 Generator 0
.word IntDefaultHandler ; PWM 1 Generator 1
.word IntDefaultHandler ; PWM 1 Generator 2
.word IntDefaultHandler ; PWM 1 Generator 3
.word IntDefaultHandler ; PWM 1 Fault
.sect “.myCode”
myStart:
; Set sysclk to DIV/4, use PLL, XTAL_16 MHz, OSC_MAIN
; system control base is 0x400FE000, offset 0x60
; bits [26:23] = 0x3
; bit [22] = 0x1
; bit [13] = 0x0
; bit [11] = 0x0
; bits [10:6] = 0x15
; bits [5:4] = 0x0
; bit [0] = 0x0
; All of this translates to 0x01C00540
MOVW r0, #0xE000
MOVT r0, #0x400F
MOVW r2, #0x60 ; offset 0x060 for this register
MOVW r1, #0x0540
MOVT r1, #0x01C0
STR r1, [r0, r2] ; write the register’s contents
; MOVW r6, #0xE000
; MOVT r6, #0xE000
MOVW r7, #0x604 ; enable timer0 - RCGCTIMER
LDR r1, [r0, r7] ; p. 321, base 0x400FE000
ORR r1, #0x1 ; offset - 0x604
STR r1, [r0, r7] ; bit 0
NOP
NOP
NOP
NOP
NOP ; give myself 5 clocks per spec
MOVW r8, #0x0000 ; configure timer0 to be
MOVT r8, #0x4003 ; one-shot, p.698 GPTMTnMR
MOVW r7, #0x4 ; base 0x40030000
LDR r1, [r8, r7] ; offset 0x4
ORR r1, #0x21 ; bit 5 = 1, 1:0 = 0x1
STR r1, [r8, r7]
LDR r1, [r8] ; set as 16-bit timer only
ORR r1, #0x4 ; base 0x40030000
STR r1, [r8] ; offset 0, bit[2:0] = 0x4
MOVW r7, #0x30 ; set the match value at 0
MOV r1, #0 ; since we’re counting down
STR r1, [r8, r7] ; offset - 0x30
MOVW r7, #0x18 ; set bits in the GPTM
LDR r1, [r8, r7] ; Interrupt Mask Register
ORR r1, #0x10 ; p. 714 - base: 0x40030000
STR r1, [r8, r7] ; offset - 0x18, bit 5
MOVW r6, #0xE000 ; enable interrupt on timer0
MOVT r6, #0xE000 ; p. 132, base 0xE000E000
MOVW r7, #0x100 ; offset - 0x100, bit 19
MOV r1, #(1 < <19) ; enable bit 19 for timer0
STR r1, [r6, r7]
;NOP
;NOP
;NOP
;NOP
;NOP
MOVW r6, #0x0000 ; start the timer
MOVT r6, #0x4003
MOVW r7, #0xC
LDR r1, [r6, r7]
ORR r1, #0x1
STR r1, [r6, r7] ; go!!
Spin
B Spin ; sit waiting for the interrupt to occur
**************************************************************
* Interrupt functions
**************************************************************
.text
;ResetISR:
;_c_int00:
_main
B myStart
NmiSR:
B $
FaultISR:
B $
IntDefaultHandler:
MOVW r10, #0xBEEF
MOVT r10, #0xDEAD
NOP
Spot
B Spot
**************************************************************
myStack .usect “.stack”, 0x400