GKD Pixel是使用UART1做為除錯介面,腳位如下:
![]()
UART1 Clock
![]()
Baudrate計算方式
Baudrate = 24MHz / (16 * Divisor) 115200 = 24000000 / (16 * 13)
main.s
.extern _start
.set noreorder
.equiv LED, 14
.equiv DELAY, 0x100000
.equiv CPM, 0xb0000000
.equiv PA, 0xb0010000
.equiv PB, 0xb0011000
.equiv PC, 0xb0012000
.equiv PD, 0xb0013000
.equiv UART1, 0xb0031000
.equiv PXINT, 0x0010
.equiv PXMSK, 0x0020
.equiv PXPAT1, 0x0030
.equiv PXPAT0, 0x0040
.equiv URBR, 0x0000
.equiv UTHR, 0x0000
.equiv UDLLR, 0x0000
.equiv UDLHR, 0x0004
.equiv UIER, 0x0004
.equiv UIIR, 0x0008
.equiv UFCR, 0x0008
.equiv ULCR, 0x000c
.equiv UMCR, 0x0010
.equiv ULSR, 0x0014
.equiv UMSR, 0x0018
.equiv USPR, 0x001c
.equiv ISR, 0x0020
.equiv UMR, 0x0024
.equiv UACR, 0x0028
.equiv URCR, 0x0040
.equiv UTCR, 0x0044
.equiv CLKGR0, 0x0020
.text
.ascii "LPSM"
.rept 2044
.byte 0
.endr
_start:
li $8, CPM + CLKGR0
lw $9, 0($8)
and $9, ~(1 << 15)
sw $9, 0($8)
li $9, ~((1 << 23) | (1 << 24))
li $8, PB + PXMSK
sw $9, 0($8)
li $8, PB + PXPAT0
sw $9, 0($8)
li $9, (1 << 7) | 3
li $8, UART1 + ULCR
sw $9, 0($8)
li $10, 0
li $8, UART1 + UDLHR
sw $10, 0($8)
li $9, 13
li $8, UART1 + UDLLR
sw $9, 0($8)
li $9, 3
li $8, UART1 + ULCR
sw $9, 0($8)
li $9, (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0)
li $8, UART1 + UFCR
sw $9, 0($8)
li $v0, '0
bal send_byte
li $v0, 'H'
bal send_byte
li $v0, 'e'
bal send_byte
li $v0, 'l'
bal send_byte
li $v0, 'l'
bal send_byte
li $v0, 'o'
bal send_byte
li $v0, ','
bal send_byte
li $v0, ' '
bal send_byte
li $v0, 'w'
bal send_byte
li $v0, 'o'
bal send_byte
li $v0, 'r'
bal send_byte
li $v0, 'l'
bal send_byte
li $v0, 'd'
bal send_byte
li $v0, '!'
bal send_byte
main:
b main
nop
send_byte:
li $8, UART1 + ULSR
0:
lb $9, 0($8)
and $9, (1 << 6)
beq $9, $zero, 0b
nop
li $8, UART1 + UTHR
sb $v0, 0($8)
jr $ra
nop
完成