1 //-------------------------------------------------------------------
5 //-------------------------------------------------------------------
7 // Copyright (C) 2003, MLB Associates.
9 // This file contains basic startup code for the GPS4020 platform.
10 // After initialization, it will call a single "C" function 'main()'
12 // Note: this program assumes that it has been downloaded into the
13 // on-chip SRAM via the BOOTSTRAP mechanism, so on-chip SRAM is
14 // located at address 0x00000000 and external ROM/FLASH is at
26 .equ MPC_BASE_ADDRESS, 0xE0008000
27 .equ MPC_AREA1_CONFIG, 0x00000000
28 .equ MPC_AREA2_CONFIG, 0x00000004
29 .equ MPC_AREA3_CONFIG, 0x00000008
30 .equ MPC_AREA4_CONFIG, 0x0000000C
31 .equ GPIO_BASE_ADDRESS, 0xE0005000
32 .equ GPIO_DIRECTION_REG_OFFSET,0x00000000
33 .equ GPIO_READ_REG_OFFSET, 0x00000004
34 .equ GPIO_WRITE_REG_OFFSET, 0x00000008
35 .equ UART1_BASE_ADDRESS, 0xE0018000
36 .equ UART_TXBUF, 0x00000010
37 .equ UART_STATUS, 0x0000000C
38 .equ UART_STATUS_TXEMPTY, 0x00000002
41 .global __exception_handlers
44 ldr pc,.undefined_instruction // 0x04
45 ldr pc,.software_interrupt // 0x08 start && software int
46 ldr pc,.abort_prefetch // 0x0C
47 ldr pc,.abort_data // 0x10
55 lab undefined_instruction // 0x24
56 lab software_interrupt // 0x28
57 lab abort_prefetch // 0x2C
58 lab abort_data // 0x30
64 .align 2 @ Align code on 2^2 = 4 byte intervals
70 /*--------------------------------------------------------------------------*/
71 // Setup the GPIO and the ARM registers
73 // make GPIO[0..7] outputs - note: GPIO4 is used for Rx on UART1!
75 ldr r1,=GPIO_BASE_ADDRESS
76 ldr r0, [r1,#GPIO_DIRECTION_REG_OFFSET]
77 and r0, r0, #0b00010000 @ 0 = output, 1 = input
78 str r0, [r1,#GPIO_DIRECTION_REG_OFFSET] @ Store value (DON'T use strb)
80 ldr r1,=MPC_BASE_ADDRESS
81 ldr r2,=0xFF00002D // 0x6xxxxxxx, 16bit R/W RAM
82 str r2,[r1,#MPC_AREA1_CONFIG]
84 ldr r1,=MPC_BASE_ADDRESS
85 ldr r2,=0x00000069 // 0x2xxxxxxx, 16bit R/W RAM
86 str r2,[r1,#MPC_AREA2_CONFIG]
88 ldr r2,[r1,#MPC_AREA3_CONFIG]
89 ldr r2,=0x00000021 // 0x4xxxxxxx, 16bit peripheral
90 str r2,[r1,#MPC_AREA3_CONFIG]
92 ldr r2,[r1,#MPC_AREA4_CONFIG]
93 ldr r2,=0x0000006E // 0x0xxxxxxx, 32bit memory
94 str r2,[r1,#MPC_AREA4_CONFIG]
99 10: ldr r1,=GPIO_BASE_ADDRESS
101 str r0, [r1,#GPIO_WRITE_REG_OFFSET]
105 // Exception handlers
107 undefined_instruction: // 0x24
110 software_interrupt: // 0x28
113 abort_prefetch: // 0x2C
127 mov r8,lr // Location of failure
130 ldr r1,=GPIO_BASE_ADDRESS
131 str r9, [r1,#GPIO_WRITE_REG_OFFSET]
137 str r3,[r1,#GPIO_WRITE_REG_OFFSET]
161 // Write the character in r0
164 ldr r2,=UART1_BASE_ADDRESS
165 10: ldrb r3,[r2,#UART_STATUS]
166 and r3,r3,#UART_STATUS_TXEMPTY
169 strb r0,[r2,#UART_TXBUF]
173 // Write the string pointed to by r1
184 // Print the byte in r1 in hex
191 addge r2,r2,#'A'-'0'-0x0A
196 addge r2,r2,#'A'-'0'-0x0A