写了一部分软件
This commit is contained in:
@@ -6,6 +6,7 @@
|
|||||||
#define cdr_0_rx_status 0x40000014
|
#define cdr_0_rx_status 0x40000014
|
||||||
#define cdr_0_rx_rxLen 0x40000018
|
#define cdr_0_rx_rxLen 0x40000018
|
||||||
#define cdr_0_rx_rxFifo 0x4000001c
|
#define cdr_0_rx_rxFifo 0x4000001c
|
||||||
|
|
||||||
#define cdr_1_tx_status 0x40000080
|
#define cdr_1_tx_status 0x40000080
|
||||||
#define cdr_1_tx_txLen 0x40000084
|
#define cdr_1_tx_txLen 0x40000084
|
||||||
#define cdr_1_tx_txFifo 0x40000088
|
#define cdr_1_tx_txFifo 0x40000088
|
||||||
@@ -13,11 +14,135 @@
|
|||||||
#define cdr_1_rx_status 0x40000094
|
#define cdr_1_rx_status 0x40000094
|
||||||
#define cdr_1_rx_rxLen 0x40000098
|
#define cdr_1_rx_rxLen 0x40000098
|
||||||
#define cdr_1_rx_rxFifo 0x4000009c
|
#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
|
.global main
|
||||||
|
|
||||||
|
@ io.interrupt(0) := intTxError
|
||||||
|
@ io.interrupt(1) := intTxFifoFull
|
||||||
|
@ io.interrupt(2) := intTxFinish
|
||||||
|
|
||||||
|
@ io.interrupt(3) := intRxError
|
||||||
|
@ io.interrupt(4) := intRxValid
|
||||||
|
|
||||||
main:
|
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)
|
lui x5, %hi(cdr_0_tx_status)
|
||||||
|
|
||||||
li x6, 128
|
li x6, 128
|
||||||
|
|||||||
@@ -16,26 +16,6 @@ _prog_start:
|
|||||||
li gp, 1;
|
li gp, 1;
|
||||||
ecall
|
ecall
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.balign 32
|
.balign 32
|
||||||
.section .trap_entry, "ax", %progbits
|
.section .trap_entry, "ax", %progbits
|
||||||
|
|||||||
Reference in New Issue
Block a user