114 lines
2.3 KiB
ArmAsm
114 lines
2.3 KiB
ArmAsm
#include "tl2cdr.h"
|
||
#include "sysDef.h"
|
||
#include "plic.h"
|
||
|
||
#if 0
|
||
/*
|
||
其他代码全部使用RV32E编译,仅此代码采用 RV32I 编译,故而可以使用x0, x16~x31寄存器
|
||
为了方便,不再使用ABI中的别名,直接使用x0, x16~x31;x1~x15使用ABI中定义的别名
|
||
*/
|
||
#endif
|
||
|
||
#if !(defined(__riscv_i) || defined(__USE_RV32I_ABI))
|
||
#error "must be compiled in RV32I"
|
||
#endif
|
||
|
||
.globl _prog_start
|
||
.globl _rv32i_plic_handle
|
||
|
||
.section .text.init, "ax", %progbits
|
||
_prog_start:
|
||
//a0 call_function no
|
||
li x16, SYS_INIT
|
||
beqz a0, init_func //初始化系统,输入必要的地址信息,返回 中断程序 的地址
|
||
|
||
li x16, SYS_SEND_DATA
|
||
beq a0, x16, send_data_func
|
||
|
||
li x16, SYS_SET_RECV_INFO
|
||
beq a0, x16, set_recv_info_func
|
||
|
||
li x16, SYS_SLAVE_WORK
|
||
beq a0, x16, slave_work_func
|
||
|
||
10: j 10b //死循环,输入错误的功能号
|
||
ret //心理安慰,并不会返回
|
||
|
||
|
||
|
||
//---------------------------------------------------------
|
||
//a1~a5
|
||
|
||
hlm_slave_work:
|
||
li x18, 1
|
||
i_rx0_txPair(x18)
|
||
i_rx0_limitTime(x0)
|
||
i_rx1_txPair(x0)
|
||
i_rx1_limitTime(x0)
|
||
1:
|
||
i_hlm_read_intflag(x17)
|
||
i_hlm_status(x16)
|
||
|
||
andi x18, x17, HLM_INT_RX0_START
|
||
|
||
ret
|
||
|
||
|
||
|
||
//---------------------------------------------------------
|
||
//初始化系统,输入必要的地址信息,返回中断程序的地址
|
||
//a1, plic_claim的地址, 其实也可以不用传送
|
||
init_func:
|
||
ret
|
||
|
||
|
||
//---------------------------------------------------------
|
||
//主站启动发送数据
|
||
//a1, 当前需要发送的数据的地址
|
||
//a2, 当前数据发送的长度
|
||
//a3, dummy
|
||
//a4, dummy
|
||
send_data_func:
|
||
#warning ..................................................
|
||
ret
|
||
|
||
|
||
//---------------------------------------------------------
|
||
//设置接收数据的地址,第一个接收数据的长度,往后都是数据
|
||
//a1, 设置接收数据的缓冲区
|
||
slave_work_func:
|
||
1:
|
||
i_hlm_status(x18)
|
||
andi x19, x18, HLM_RX0_VALID
|
||
beqz x19, 1b
|
||
|
||
i_rx0_rxFifo(x20)
|
||
srli x19, x20, 20
|
||
addi x19, x19, 4
|
||
i_tx1_txLen(x29)
|
||
i_tx1_txFifo(x29)
|
||
li x21, 4
|
||
|
||
1:
|
||
i_hlm_status(x29)
|
||
andi x18, x18, HLM_RX0_VALID
|
||
beqz x18, 1b
|
||
i_rx0_rxFifo(x29)
|
||
i_tx1_txFifo(x29)
|
||
addi x21, x21, 4
|
||
bltu x21, x19, 1b
|
||
|
||
ret
|
||
|
||
//---------------------------------------------------------
|
||
set_recv_info_func:
|
||
ret
|
||
|
||
|
||
//---------------------------------------------------------
|
||
//中断程序,没有使用
|
||
.balign 32
|
||
_rv32i_plic_handle:
|
||
mret
|
||
|