annotate target-utils/flash-boot-test/uartinit.S @ 200:cc6594a7fc7a

target-utils/flash-boot-test: added UART init, needed for mode 1
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 01 May 2017 20:02:49 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
200
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 * The UART initialization code in this assembly module has been lifted
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 * from the disassembly of the Calypso boot ROM, and slightly adapted
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 * for our needs.
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 */
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 .text
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 .code 32
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 .globl uart_init
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 uart_init:
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 stmfd sp!, {r4-r11,lr}
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 @ prepare UART init values
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 mov r11, #3
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 mov r5, #0
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 mov r10, #7 @ baud rate divisor for 115200 baud
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 mov r9, #0x80
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 mov r7, #0xbf
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 mov r4, #7
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 @ UART base address
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 ldr r6, =uart_base
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 ldr r12, [r6]
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 add r3, r12, #8
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 @ R3 points to register 8 (MDR1)
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 @ write 07 into it: reset mode
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 strb r4, [r3]
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 add r0, r12, #3
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 @ R0 points to register 3 (LCR)
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 @ write BF into it: map in the extended registers
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 strb r7, [r0]
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 add r1, r12, #2
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 @ R1 points to register 2: EFR under current mapping
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 @ set bit 4: enable enhanced functions
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 ldrb r8, [r1]
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 orr r8, r8, #0x10
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 strb r8, [r1]
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 @ write 80 into LCR: map in the baud rate divisor registers
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 strb r9, [r0]
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 @ reg 2 (pointed to by R1) is now IIR/FCR
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 @ write 07 into FCR: FIFOs enabled and cleared, no DMA
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 strb r4, [r1]
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 @ write BF into LCR again
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 strb r7, [r0]
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 @ load baud rate divisor
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 strb r10, [r12]
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 strb r5, [r12, #1]
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 @ write 03 into LCR: restore normal registers, 8N1
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 strb r11, [r0]
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 @ write 00 into MDR1: plain UART mode
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 strb r5, [r3]
cc6594a7fc7a target-utils/flash-boot-test: added UART init, needed for mode 1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 ldmfd sp!, {r4-r11,pc}