写了一部分软件

This commit is contained in:
RuigeLee
2024-10-29 15:08:45 +08:00
parent 683b6cad92
commit ff4508ec35
2 changed files with 125 additions and 20 deletions

View File

@@ -6,6 +6,7 @@
#define cdr_0_rx_status 0x40000014
#define cdr_0_rx_rxLen 0x40000018
#define cdr_0_rx_rxFifo 0x4000001c
#define cdr_1_tx_status 0x40000080
#define cdr_1_tx_txLen 0x40000084
#define cdr_1_tx_txFifo 0x40000088
@@ -13,11 +14,135 @@
#define cdr_1_rx_status 0x40000094
#define cdr_1_rx_rxLen 0x40000098
#define cdr_1_rx_rxFifo 0x4000009c
#define isWriteGpio 0x60000000
#define isReadGpio 0x60000000
#define isReadIsLast 0x60000008
# x2 计数器
# x5 目标计数值
# x6 1)操作数 从站号
# x7 1) 长度
# x8 1)临时变量
# x9 从站号
# x10 操作数和len 参数0
# x11 两个参数
# x12 临时转发
# x13 1)装填基地址
# x14
# x15 中断镜像
.global main
@ io.interrupt(0) := intTxError
@ io.interrupt(1) := intTxFifoFull
@ io.interrupt(2) := intTxFinish
@ io.interrupt(3) := intRxError
@ io.interrupt(4) := intRxValid
main:
beqz x15, main # 有中断进来,否则在此地等待
bneq x15, 0x10, error # 第一个中断应该是下行接收中断0x10,接收数据到来0 下行
li x15, 0 # 清x15的对应比特
lui x13, %hi(0x40000000) # 装填基地址
lw x10, 0x1c(x13) # 读rxfifo, 获得长度,操作,参数0
1: # 包头2
beqz x15, 1b # 有中断进来,否则在此地等待
bneq x15, 0x10, error # 中断应该是下行接收中断0x10,接收数据到来0 下行
li x15, 0 # 清x15的对应比特
lw x11, 0x1c(x13) # 读rxfifo, 获得参数1,参数2
#本地数据
# 确认本地数据长度
srli x6, x10, 16 # 获得操作数和长度, 右移16位
srli x7, x6, 4 # 获得长度, 右移4位
andi x6, x6, 0xf # 获得操作数取低4比特
beqz x6, opInit # 若操作数为0,跳转初始化
li x8, 1
beq x6, x8, opSync # 若操作数为1,跳转同步
li x8, 2
beq x6, x8, opBCast # 若操作数为1,跳转广播
li x8, 3
beq x6, x8, opUCast # 若操作数为1,跳转广播
j error # 未定义操作数,报错
opInit:
srli x6, x7, 3 #接收长度除以8
sub x6, x0, x6 # x6=-x6
addi x6, x6, 64 x6=x6+64
li x2 # 接收计数器清零启动
opSync:
j error # 未定义操作数,报错
opBCast:
j error # 未定义操作数,报错
opUCast:
j error # 未定义操作数,报错
2: # 下行本地数据
beqz x15, 2b # 有中断进来,否则在此地等待
bneq x15, 0x10, error # 中断应该是下行接收中断0x10,接收数据到来0 下行
li x15, 0 # 清x15的对应比特
# 读rxfifo, 获得本地数据
# 接收计数器+1
# 比较计数器是否收完本地数据,没有则回到2
downpay:
beqz x15, 1b # 有中断进来,否则在此地等待
bneq x15, 0x10, error # 中断应该是下行接收中断0x10,接收数据到来0 下行,下行发送不应该full或者其它,否则错误
# 确认下行转发操作
# 向下行发送写入长度,操作码,参数0
# 向下行发送写入参数1, 参数2
1:
bnez x15, 0x10, 2f
2:
error:
3:
4:
5:
6:
7:
8:
beq x15, 0x200, 2f # 接收数据到来1 上行
beq x15, 0x01, 1f # 发送错误0
beq x15, 0x02, 2f # 发送fifo满0
beq x15, 0x04, 3f # 发送完成0
beq x15, 0x08, 4f # 接收错误0
beq x15, 0x20, 6f # 发送错误1
beq x15, 0x40, 7f # 发送fifo满1
beq x15, 0x80, 8f # 发送完成1
beq x15, 0x100, 9f # 接收错误1
j main # 循环等待直到中断到来
lui x5, %hi(cdr_0_tx_status)
li x6, 128

View File

@@ -16,26 +16,6 @@ _prog_start:
li gp, 1;
ecall
.balign 32
.section .trap_entry, "ax", %progbits