Steward
分享是一種喜悅、更是一種幸福
掌機 - PMP V - Assembly - UART
main.s
.equiv zero, $0
.equiv at, $1
.equiv v0, $2
.equiv v1, $3
.equiv a0, $4
.equiv a1, $5
.equiv a2, $6
.equiv a3, $7
.equiv t0, $8
.equiv t1, $9
.equiv t2, $10
.equiv t3, $11
.equiv t4, $12
.equiv t5, $13
.equiv t6, $14
.equiv t7, $15
.equiv s0, $16
.equiv s1, $17
.equiv s2, $18
.equiv s3, $19
.equiv s4, $20
.equiv s5, $21
.equiv s6, $22
.equiv s7, $23
.equiv t8, $24
.equiv t9, $25
.equiv k0, $26
.equiv k1, $27
.equiv gp, $28
.equiv sp, $29
.equiv fp, $30
.equiv ra, $31
.equiv CLKGR, 0xb0000020
.equiv URBR0, 0xb0030000
.equiv UDLLR0, 0xb0030000
.equiv UDLHR0, 0xb0030004
.equiv UIER0, 0xb0030004
.equiv UFCR0, 0xb0030008
.equiv ULCR0, 0xb003000c
.equiv ULSR0, 0xb0030014
.equiv ISR0, 0xb0030020
.equiv PCFUNS, 0xb0010244
.equiv PCTRGC, 0xb0010278
.equiv PCSELS, 0xb0010254
.globl _start
.set noreorder
.text
.ifdef STAGE2
.word 0x555555ff
.word 0x55555555
.byte 0xff
.byte 0xff
.byte 0xff
.byte 0x00
.endif
_start:
nop
li v0, 0x00400004 # disable interrupt
mtc0 v0, $12
li v1, 0x00800000 # clear cause content
mtc0 v1, $13
li sp, 0x80004000
uart_init:
li v0, 0x1000
sw v0, PCFUNS
sw v0, PCTRGC
sw v0, PCSELS
lw v0, CLKGR
li v1, 0xfffffffe
and v0, v1
sw v0, CLKGR
sb zero, UIER0
li v0, 0xef
sb v0, UFCR0
li v0, 0xfc
sb v0, ISR0
li v0, 0x03
sb v0, ULCR0
lbu v0, ULCR0
ori v0, 0x80
sb v0, ULCR0
sb zero, UDLHR0
li v0, 0x0d
sb v0, UDLLR0
lbu v0, ULCR0
li v1, 0x7f
and v0, v1
sb v0, ULCR0
li v0, 0x17
sb v0, UFCR0
jal delay
li a0, 100
jal uart_char
li a0, 'A'
end:
b end
uart_char:
sb a0, URBR0
0:
lbu v0, ULSR0
andi v0, 0x60
li v1, 0x60
bne v0, v1, 0b
nop
jr ra
nop
delay:
li v0, 180
mul a0, v0
0:
bnez a0, 0b
addiu a0, -1
jr ra
nop
main.ld
OUTPUT_ARCH(mips)
ENTRY(_start)
MEMORY
{
low8k : ORIGIN = 0x80000000 , LENGTH = 0x2000
high8k : ORIGIN = 0x80002000 , LENGTH = 0x2000
}
SECTIONS
{
.text : {
*(.text.1)
*(.text.0)
} > low8k
.data : {
. = ALIGN(4);
*(.rodata*) *(.data*) *(.scommon*) *(.reginfo*)
} > low8k
.bss : {
. = ALIGN(4);
_bss_start = ABSOLUTE(.);
*(.sbss*) *(.bss*)
. = ALIGN(4);
_bss_end = ABSOLUTE(.);
} > high8k
__stack = 0x80004000;
}
Makefile
all: mipsel-linux-as -o main.o main.s --defsym=STAGE1=1 mipsel-linux-ld -T main.ld -o main.elf main.o mipsel-linux-objcopy -O binary main.elf stage1.bin clean: rm -rf main.o main.elf main.bin stage1.bin
編譯
$ cd $ wget https://github.com/steward-fu/website/releases/download/pmp-v/bin_rs90-toolchain-2019.04.30.tar $ tar xvf bin_rs90-toolchain-2019.04.30.tar $ sudo mv rs90-toolchain /opt/ $ export PATH=$PATH:/opt/rs90-toolchain/usr/bin $ make
接著進入燒錄模式(按下B插入USB),再使用jzboot燒錄stage1.bin就可以