FreeCalypso > hg > freecalypso-tools
changeset 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 | 5515360e2f61 |
children | 59de85ae94a7 |
files | target-utils/flash-boot-test/Makefile target-utils/flash-boot-test/main.c target-utils/flash-boot-test/uartinit.S |
diffstat | 3 files changed, 56 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/target-utils/flash-boot-test/Makefile Sun Apr 30 17:45:21 2017 +0000 +++ b/target-utils/flash-boot-test/Makefile Mon May 01 20:02:49 2017 +0000 @@ -4,7 +4,7 @@ LD= arm-elf-ld OBJCOPY=arm-elf-objcopy -OBJS= vectors.o crt0.o cmdtab.o main.o mygetchar.o uartbase.o +OBJS= vectors.o crt0.o cmdtab.o main.o mygetchar.o uartbase.o uartinit.o LIBS= ../libcommon/libcommon.a ../libprintf/libprintf.a ../libbase/libbase.a \ ../libc/libc.a LIBGCC= `${CC} -print-file-name=libgcc.a`
--- a/target-utils/flash-boot-test/main.c Sun Apr 30 17:45:21 2017 +0000 +++ b/target-utils/flash-boot-test/main.c Mon May 01 20:02:49 2017 +0000 @@ -4,8 +4,10 @@ main() { - printf("\nFlash boot test program running (mode %u)\n", - _Magic_words[0]); + /* 13 MHz to the peripherals */ + *(volatile u16 *)0xFFFFFD02 |= 0x40; + uart_init(); + printf("Flash boot test program running (mode %u)\n", _Magic_words[0]); for (;;) { putchar('='); if (command_entry())
--- /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}