FreeCalypso > hg > freecalypso-tools
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 |
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} |