#define GAFR1_L 0x40E0005C #define GPDR0 0x40E0000C #define GPDR1 0x40E00010 #define CKEN 0x41300004 #define PWMCR0 0x40B00000 #define PWMDCR0 0x40B00004 #define PWMPCR0 0x40B00008 .macro addruart,rx @ mrc p15, 0, \rx, c1, c0 @ tst \rx, #1 @ MMU enabled? @ moveq \rx, #0x40000000 @ physical @ movne \rx, #io_p2v(0x40000000) @ virtual mov \rx, #0x40000000 orr \rx, \rx, #0x00700000 .endm .macro addr4,rx @ mrc p15, 0, \rx, c1 ,c0 @ tst \rx, #1 @ MMU enabled? @ moveq \rx, #0x40000000 @ movne \rx, #io_p2v(0x40000000) mov \rx, #0x40000000 .endm .macro inituart,rd,rx ldr \rd, =0x41300004 @ CKEN ldr \rx, [\rd] orr \rx, \rx, #0x20 str \rx, [\rd] ldr \rd, =0x40E0005C ldr \rx, [\rd] bic \rx, \rx, #0xF0000000 @ clear GPIO46/47 config orr \rx, \rx, #0x60000000 @ set GPIO46: AF2, GPIO47: AF1 str \rx, [\rd] ldr \rd, =0x40E00010 ldr \rx, [\rd] bic \rx, \rx, #0x0000c000 @ clear GPIO46/47 direction orr \rx, \rx, #0x00008000 @ set GPIO 47 out, 46 in str \rx, [\rd] addruart \rd mov \rx, #0x83 @ DLAB = 1 strb \rx, [\rd, #0x0c] mov \rx, #0x08 @ Divisor 8 => 115200 bps strb \rx, [\rd, #0x00] mov \rx, #0x00 strb \rx, [\rd, #0x04] @ Divisor high = 0 mov \rx, #0x03 strb \rx, [\rd, #0x0c] @ DLAB = 0, n81 mov \rx, #0x00 strb \rx, [\rd, #0x10] @ MCR = 0 mov \rx, #0x00 strb \rx, [\rd, #0x28] @ disable autobaud mov \rx, #0x40 strb \rx, [\rd, #0x04] @ IER UUE (UART Enable) .endm .macro senduart,rd,rx ldr r4, [\rx, #0x14] tst r4, #(1 << 6) beq pc-8 strb \rd, [\rx, #0] .endm .macro backlight_on,rd,rx ldr \rd, =0x41300004 @ CKEN |= 0x03 ldr \rx, [\rd] orr \rx, \rx, #0x03 str \rx, [\rd] ldr \rd, =0x40B00000 mov \rx, #0x02 str \rx, [\rd] ldr \rd, =0x40B00008 mov \rx, #0x31 @ 49 str \rx, [\rd] ldr \rd, =0x40B00004 mov \rx, #0x19 @ 25 str \rx, [\rd] ldr \rd, =0x40E0000C ldr \rx, [\rd] orr \rx, \rx, #0x00010000 str \rx, [\rd] ldr \rd, =0x40E00058 ldr \rx, [\rd] bic \rx, \rx, #0x00000003 orr \rx, \rx, #0x00000002 str \rx, [\rd] .endm .macro backlight_off ldr r2, =0x40E00058 ldr r3, [r2] bic r3, r3, #0x03 str r3, [r2] ldr r2, =0x40E0000C @ direction input ldr r3, [r2] bic r3, r3, #0x00010000 str r3, [r2] .endm start: inituart r2, r3 addruart r3 mov r2, #'H' senduart r2, r3 mov r2, #'A' senduart r2, r3 mov r2, #'L' senduart r2, r3 mov r2, #'L' senduart r2, r3 mov r2, #'O' senduart r2, r3 mov r2, #0x10 senduart r2, r3 mov r2, #0x13 senduart r2, r3 /* backlight_on r2, r3 */ backlight_off