UART0_TX連接到GPIOA-8
UART0_RX則是有專屬接收腳位(不須配置)
UART架構
暫存器
Baudrate計算
使用UART開機模式時,Clock固定使用PLL1且速度為147.46MHz
UART clock = (PLL clock) / (Uart Clock Divisor) UARTCLKDIV = 40 UART clock = 147.46MHz / 40 = 3.6864MHz BDR = (3686400 / (115200 * 16)) - 1 = 1
main.s
.global _start .equiv GPIOC_OUT, 0xc000a080 .equiv GPIOC_OUTENB, 0xc000a084 .equiv GPIOC_PAD, 0xc000a098 .equiv GPIOA_ALTFN0, 0xc000a020 .equiv UART_LCON0, 0xc0016000 .equiv UART_UCON0, 0xc0016002 .equiv UART_FCON0, 0xc0016004 .equiv UART_MCON0, 0xc0016006 .equiv UART_TRSTATUS0, 0xc0016008 .equiv UART_THB0, 0xc0016010 .equiv UART_BRD0, 0xc0016014 .equiv UART_CLKENB0, 0xc0016040 .equiv UART_CLKGEN0, 0xc0016044 .arm .text _start: b reset b . b . b . b . b . b . b . reset: ldr r0, =GPIOC_OUTENB ldr r1, =(1 << 16) str r1, [r0] ldr r0, =GPIOA_ALTFN0 ldr r1, =(1 << 16) str r1, [r0] ldr r0, =UART_CLKENB0 ldr r1, [r0] bic r1, #4 str r1, [r0] ldr r0, =UART_LCON0 ldr r1, =0x83 strh r1, [r0] ldr r0, =UART_UCON0 ldr r1, =5 strh r1, [r0] ldr r0, =UART_FCON0 ldr r1, =6 strh r1, [r0] ldr r0, =UART_MCON0 ldr r1, =0xc0 str r1, [r0] ldr r0, =UART_BRD0 ldr r1, =1 strh r1, [r0] ldr r0, =UART_CLKGEN0 ldr r1, =0x272 strh r1, [r0] ldr r0, =UART_FCON0 ldr r1, =1 strh r1, [r0] ldr r0, =UART_CLKENB0 ldr r1, [r0] orr r1, #4 str r1, [r0] ldr r0, =GPIOC_OUT ldr r1, =(1 << 16) str r1, [r0] ldr r0, =GPIOC_PAD 0: ldr r1, [r0] tst r1, #(1 << 5) bne 0b ldr r0, =GPIOC_OUT ldr r1, =~(1 << 16) str r1, [r0] ldr r0, =UART_THB0 ldr r2, =hello ldr r3, =UART_TRSTATUS0 1: ldr r1, [r3] tst r1, #(1 << 1) beq 1b ldrb r1, [r2] strb r1, [r0] add r2, #1 cmp r1, #0 bne 1b b . .align hello: .asciz "Hello, world!" .end
完成