FreeCalypso > hg > freecalypso-tools
annotate target-utils/flash-boot-test/uartinit.S @ 842:9da5fb3f42dd
fc-tmsync aur-all command implemented
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Sat, 31 Jul 2021 09:06:30 +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} |
