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