參考資料:
http://nano.lichee.pro/
https://mangopi.org/mangopi_r
UART1腳位位於PA2、PA3

位址

暫存器

Baudrate計算方式
PLL = 24MHz*N*K/M 0x80041800: K = 1 M = 1 N = 24 PLL_PERIPH = 24MHz*25 = 600MHz AHB_CLK = PLL_PERIPH/(AHB_PRE_DIV*AHB_CLK_DIV_RATIO) = 600MHz/(3*1) = 200MHz APB_CLK = AHB_CLK/APB_CLK_RATIO = 200MHz/2 = 100MHz 0x00003180: AHB_PRE_DIV = 3 APB_CLK_RATIO = 2 AHB_CLK_DIV_RATIO = 1 Baudrate = APB_CLK/(16*divisor) = 100MHz/(16*54) = 115741 ~= 115200
main.s
.global _start
.equiv CCU_BASE, 0x01c20000
.equiv GPIO_BASE, 0x01c20800
.equiv UART1_BASE, 0x01c25400
.equiv PLL_PERIPH_CTRL_REG, 0x0028
.equiv AHB_APB_HCLKC_CFG_REG, 0x0054
.equiv BUS_CLK_GATING_REG2, 0x0068
.equiv BUS_SOFT_RST_REG2, 0x02d0
.equiv PA, (0x24 * 0)
.equiv PORT_CFG0, 0x00
.equiv PORT_DATA, 0x10
.equiv UART_RBR, 0x0000
.equiv UART_DLL, 0x0000
.equiv UART_DLH, 0x0004
.equiv UART_IER, 0x0004
.equiv UART_IIR, 0x0008
.equiv UART_LCR, 0x000c
.equiv UART_MCR, 0x0010
.equiv UART_USR, 0x007c
.arm
.text
_start:
.long 0xea000016
.byte 'e', 'G', 'O', 'N', '.', 'B', 'T', '0'
.long 0, __spl_size
.byte 'S', 'P', 'L', 2
.long 0, 0
.long 0, 0, 0, 0, 0, 0, 0, 0
.long 0, 0, 0, 0, 0, 0, 0, 0
_vector:
b reset
b .
b .
b .
b .
b .
b .
b .
reset:
ldr r0, =CCU_BASE
ldr r1, =0x80041800
str r1, [r0, #PLL_PERIPH_CTRL_REG]
ldr r1, =0x00003180
str r1, [r0, #AHB_APB_HCLKC_CFG_REG]
ldr r0, =GPIO_BASE
ldr r1, =0x5500
str r1, [r0, #(PA + PORT_CFG0)]
ldr r0, =CCU_BASE
ldr r1, =(1 << 21)
str r1, [r0, #BUS_CLK_GATING_REG2]
str r1, [r0, #BUS_SOFT_RST_REG2]
ldr r0, =UART1_BASE
ldr r1, =0x00
str r1, [r0, #UART_IER]
ldr r1, =0xf7
str r1, [r0, #UART_IIR]
ldr r1, =0x00
str r1, [r0, #UART_MCR]
ldr r1, [r0, #UART_LCR]
orr r1, #(1 << 7)
str r1, [r0, #UART_LCR]
ldr r1, =54
str r1, [r0, #UART_DLL]
ldr r1, =0x00
str r1, [r0, #UART_DLH]
ldr r1, [r0, #UART_LCR]
bic r1, #(1 << 7)
str r1, [r0, #UART_LCR]
ldr r1, [r0, #UART_LCR]
bic r1, #0x1f
orr r1, #0x03
str r1, [r0, #UART_LCR]
ldr r0, =UART1_BASE
ldr r2, =hello
1:
ldr r1, [r0, #UART_USR]
tst r1, #(1 << 1)
beq 1b
ldrb r1, [r2]
strb r1, [r0, #UART_RBR]
add r2, #1
cmp r1, #0
bne 1b
main:
b main
.align
hello: .asciz "Hello, world!"
.end
Baudrate 115200bps