FreeCalypso > hg > freecalypso-tools
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/target-utils/flash-boot-test/uartinit.S Mon May 01 20:02:49 2017 +0000 @@ -0,0 +1,51 @@ +/* + * The UART initialization code in this assembly module has been lifted + * from the disassembly of the Calypso boot ROM, and slightly adapted + * for our needs. + */ + + .text + .code 32 + .globl uart_init + +uart_init: + stmfd sp!, {r4-r11,lr} +@ prepare UART init values + mov r11, #3 + mov r5, #0 + mov r10, #7 @ baud rate divisor for 115200 baud + mov r9, #0x80 + mov r7, #0xbf + mov r4, #7 +@ UART base address + ldr r6, =uart_base + ldr r12, [r6] + add r3, r12, #8 +@ R3 points to register 8 (MDR1) +@ write 07 into it: reset mode + strb r4, [r3] + add r0, r12, #3 +@ R0 points to register 3 (LCR) +@ write BF into it: map in the extended registers + strb r7, [r0] + add r1, r12, #2 +@ R1 points to register 2: EFR under current mapping +@ set bit 4: enable enhanced functions + ldrb r8, [r1] + orr r8, r8, #0x10 + strb r8, [r1] +@ write 80 into LCR: map in the baud rate divisor registers + strb r9, [r0] +@ reg 2 (pointed to by R1) is now IIR/FCR +@ write 07 into FCR: FIFOs enabled and cleared, no DMA + strb r4, [r1] +@ write BF into LCR again + strb r7, [r0] +@ load baud rate divisor + strb r10, [r12] + strb r5, [r12, #1] +@ write 03 into LCR: restore normal registers, 8N1 + strb r11, [r0] +@ write 00 into MDR1: plain UART mode + strb r5, [r3] + ldmfd sp!, {r4-r11,pc}