FreeCalypso > hg > freecalypso-tools
annotate target-utils/flash-boot-test/uartinit.S @ 926:6a0aa8d36d06
rvinterf backslash escape: introduce libprint
The new helper function library named libprint is meant to replace
the badly misnamed libg23, and will soon contain functions for
printing all of the same kinds of GPF TST packets that are now handled
in libg23. However, we are also moving safe_print_trace() from libasync
to this new library, and changing it to emit our new backslash escape
format.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Tue, 23 May 2023 03:47:46 +0000 |
parents | cc6594a7fc7a |
children |
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} |