From d87c2dacf02548840ca731bd9b95e254682ad1d2 Mon Sep 17 00:00:00 2001 From: bacon Date: Wed, 12 Feb 2025 15:58:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=86=E5=88=AB=E9=87=87=E7=94=A8=E4=B8=AD?= =?UTF-8?q?=E6=96=AD=E3=80=81=E6=9F=A5=E8=AF=A2=E6=96=B9=E5=BC=8F=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E8=BD=AC=E5=8F=91=E6=97=B6=E9=97=B4=EF=BC=8C=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E5=A4=87=E4=BB=BD=E4=BB=A3=E7=A0=81=EF=BC=8C=E9=80=9A?= =?UTF-8?q?=E8=BF=87=E6=8E=A7=E5=88=B6Makefile=E8=84=9A=E6=9C=AC=E9=87=8C?= =?UTF-8?q?=E7=9A=84APP=5FMARCH=E3=80=81MABI=E7=9A=84rv32i=E5=92=8Crv32e?= =?UTF-8?q?=E6=9D=A5=E6=8E=A7=E5=88=B6C=E8=AF=AD=E8=A8=80=E5=92=8Casm?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 46 +++--- rocket-chip | 2 +- tb/sw/src/MstMain.c | 10 +- tb/sw/src/SlvMain.c | 12 -- tb/sw/src/halfLvdsMacSvr.c | 82 +++-------- tb/sw/src/{mstSvr.S => hlmSvrOpt.S} | 125 ++++++++++++++++ tb/sw/src/mstStartup.S | 6 +- tb/sw/src/slvStartup.S | 4 +- tb/sw/src/slvSvr.S | 216 ---------------------------- tb/sw/src/sysDef.h | 1 + 10 files changed, 181 insertions(+), 323 deletions(-) rename tb/sw/src/{mstSvr.S => hlmSvrOpt.S} (63%) delete mode 100644 tb/sw/src/slvSvr.S diff --git a/Makefile b/Makefile index f8f48aa..844f42d 100644 --- a/Makefile +++ b/Makefile @@ -84,24 +84,24 @@ sw: $(RVCC) -ggdb $(ISR_MARCH) $(ISR_CFLAGS) -Wall -mcmodel=medany -mexplicit-relocs -mcmodel=medany -mexplicit-relocs \ -I ./tb/sw/ -I ./tb/sw/src \ -I ./tb/sw/tl2cdr \ - -c ./tb/sw/src/mstSvr.S \ - -o ./tb/sw/build/mstSvr.o + -c ./tb/sw/src/hlmSvrOpt.S \ + -o ./tb/sw/build/hlmSvrOpt.o $(RVCC) -ggdb $(ISR_MARCH) $(ISR_CFLAGS) -Wall -mcmodel=medany -mexplicit-relocs -nostdlib -nodefaultlibs -nostartfiles \ -T ./tb/sw/linker.lds \ - ./tb/sw/build/mstSvr.o \ - -o ./tb/sw/build/mstSvr.elf + ./tb/sw/build/hlmSvrOpt.o \ + -o ./tb/sw/build/hlmSvrOpt.elf - $(TARGET)-objcopy -O binary ./tb/sw/build/mstSvr.elf ./tb/sw/build/mstSvr.bin + $(TARGET)-objcopy -O binary ./tb/sw/build/hlmSvrOpt.elf ./tb/sw/build/hlmSvrOpt.bin - python3 ./tb/sw/bin_2_c_array.py ./tb/sw/build/mstSvr.bin ./tb/sw/build/mstSvr.c + python3 ./tb/sw/bin_2_c_array.py ./tb/sw/build/hlmSvrOpt.bin ./tb/sw/build/hlmSvrOpt.c #这是主站的程序 $(RVCC) -ggdb $(APP_MARCH) $(APP_CFLAGS) -Wall -mcmodel=medany -mexplicit-relocs \ -I ./tb/sw/ -I ./tb/sw/src \ -I ./tb/sw/tl2cdr \ - -c ./tb/sw/build/mstSvr.c \ - -o ./tb/sw/build/mstSvr.o + -c ./tb/sw/build/hlmSvrOpt.c \ + -o ./tb/sw/build/hlmSvrOpt.o $(RVCC) -ggdb $(APP_MARCH) $(APP_CFLAGS) -Wall -mcmodel=medany -mexplicit-relocs -mcmodel=medany -mexplicit-relocs \ -I ./tb/sw/ -I ./tb/sw/src \ @@ -137,7 +137,7 @@ sw: -T ./tb/sw/linker.lds \ ./tb/sw/build/mstStartup.o \ ./tb/sw/build/mstMain.o \ - ./tb/sw/build/mstSvr.o \ + ./tb/sw/build/hlmSvrOpt.o \ ./tb/sw/build/tl2cdr.o \ ./tb/sw/build/halfLvdsMacSvr.o \ ./tb/sw/build/plic.o \ @@ -151,27 +151,27 @@ sw: sed -i 's/@400/@000/g' ./tb/sw/build/mstTest.verilog #这是从站的中断服务程序,以及初始化程序 - $(RVCC) -ggdb $(ISR_MARCH) $(ISR_CFLAGS) -Wall -mcmodel=medany -mexplicit-relocs -mcmodel=medany -mexplicit-relocs \ - -I ./tb/sw/ -I ./tb/sw/src \ - -I ./tb/sw/tl2cdr \ - -c ./tb/sw/src/slvSvr.S \ - -o ./tb/sw/build/slvSvr.o + #$(RVCC) -ggdb $(ISR_MARCH) $(ISR_CFLAGS) -Wall -mcmodel=medany -mexplicit-relocs -mcmodel=medany -mexplicit-relocs \ + #-I ./tb/sw/ -I ./tb/sw/src \ + #-I ./tb/sw/tl2cdr \ + #-c ./tb/sw/src/slvSvr.S \ + #-o ./tb/sw/build/slvSvr.o - $(RVCC) -ggdb $(ISR_MARCH) $(ISR_CFLAGS) -Wall -mcmodel=medany -mexplicit-relocs -nostdlib -nodefaultlibs -nostartfiles \ - -T ./tb/sw/linker.lds \ - ./tb/sw/build/slvSvr.o \ - -o ./tb/sw/build/slvSvr.elf + #$(RVCC) -ggdb $(ISR_MARCH) $(ISR_CFLAGS) -Wall -mcmodel=medany -mexplicit-relocs -nostdlib -nodefaultlibs -nostartfiles \ + #-T ./tb/sw/linker.lds \ + #./tb/sw/build/slvSvr.o \ + #-o ./tb/sw/build/slvSvr.elf - $(TARGET)-objcopy -O binary ./tb/sw/build/slvSvr.elf ./tb/sw/build/slvSvr.bin + #$(TARGET)-objcopy -O binary ./tb/sw/build/slvSvr.elf ./tb/sw/build/slvSvr.bin - python3 ./tb/sw/bin_2_c_array.py ./tb/sw/build/slvSvr.bin ./tb/sw/build/slvSvr.c + #python3 ./tb/sw/bin_2_c_array.py ./tb/sw/build/slvSvr.bin ./tb/sw/build/slvSvr.c #这是从站的程序 $(RVCC) -ggdb $(APP_MARCH) $(APP_CFLAGS) -Wall -mcmodel=medany -mexplicit-relocs \ -I ./tb/sw/ -I ./tb/sw/src \ -I ./tb/sw/tl2cdr \ - -c ./tb/sw/build/slvSvr.c \ - -o ./tb/sw/build/slvSvr.o + -c ./tb/sw/build/hlmSvrOpt.c \ + -o ./tb/sw/build/hlmSvrOpt.o $(RVCC) -ggdb $(APP_MARCH) $(APP_CFLAGS) -Wall -mcmodel=medany -mexplicit-relocs \ -I ./tb/sw/ -I ./tb/sw/src \ @@ -205,7 +205,7 @@ sw: $(RVCC) -ggdb $(APP_MARCH) $(APP_CFLAGS) -Wall -mcmodel=medany -mexplicit-relocs -nostdlib -nodefaultlibs -nostartfiles \ -T ./tb/sw/linker.lds \ - ./tb/sw/build/slvSvr.o \ + ./tb/sw/build/hlmSvrOpt.o \ ./tb/sw/build/slvStartup.o \ ./tb/sw/build/slvMain.o \ ./tb/sw/build/tl2cdr.o \ diff --git a/rocket-chip b/rocket-chip index 2131fe7..98770cc 160000 --- a/rocket-chip +++ b/rocket-chip @@ -1 +1 @@ -Subproject commit 2131fe7cd62dfa695da82463007cab310650aa22 +Subproject commit 98770cc27734ee1a8724ea301068c3f772e7feab diff --git a/tb/sw/src/MstMain.c b/tb/sw/src/MstMain.c index 50bb07b..c001e52 100644 --- a/tb/sw/src/MstMain.c +++ b/tb/sw/src/MstMain.c @@ -5,10 +5,6 @@ #include "halfLvdsMacSvr.h" #include "plic.h" -#ifdef __riscv_i -#define USING_POLL_STRATEGY -#endif - //------------------------------------------------------------------- //internal function static uint32_t init_plic(void); @@ -26,13 +22,9 @@ void main() for (i = 0; i < 100; i++) asm volatile("nop"); -#ifdef USING_POLL_STRATEGY //使用查询策略 POLL_STRATEGY 操作 half lvds mac HLM_poll(WORKMODE_MASTER); -#else - //使用中断策略操作half lvds mac - HLM_work_with_isr(WORKMODE_MASTER); -#endif + while (1); } diff --git a/tb/sw/src/SlvMain.c b/tb/sw/src/SlvMain.c index 29e32e8..8c4f5a0 100644 --- a/tb/sw/src/SlvMain.c +++ b/tb/sw/src/SlvMain.c @@ -8,12 +8,6 @@ #include "sysDef.h" #include "plic.h" -#ifdef __riscv_i -#define USING_POLL_STRATEGY -#endif - - - static void error(); static uint32_t init_plic(void); @@ -33,15 +27,9 @@ void main() //tx1 上行 //rx0 下行 //rx1 上行 -#ifdef USING_POLL_STRATEGY //使用查询策略 POLL_STRATEGY 操作 half lvds mac HLM_poll(WORKMODE_SLAVE); -#else - //使用中断策略操作half lvds mac - HLM_work_with_isr(WORKMODE_SLAVE); -#endif - while (1); } diff --git a/tb/sw/src/halfLvdsMacSvr.c b/tb/sw/src/halfLvdsMacSvr.c index a5a2ccc..921ae1a 100644 --- a/tb/sw/src/halfLvdsMacSvr.c +++ b/tb/sw/src/halfLvdsMacSvr.c @@ -13,51 +13,6 @@ uint8_t MST_RX_BUF[RX_BUF_NUM * RX_BUF_MAX_LEN] __attribute__((aligned(32))); extern const uint8_t int_svr_code[]; uint32_t (*sys_call)(uint32_t no, ...); - -uint32_t HLM_work_with_isr(uint32_t mode) -{ - int i; - - sys_call = (void *)int_svr_code; - - //复位脉冲 - *tx0_softReset = 1; - *tx1_softReset = 1; - *rx0_softReset = 1; - *rx1_softReset = 1; - - - //tx0 下行 - //tx1 上行 - //rx0 下行 - //rx1 上行 - if (mode == WORKMODE_MASTER) - { - uint32_t tx_len; - - tx_len = 32; - - for (i = 0; i < tx_len - 1; i++) - { - MST_TX_BUF[i] = i; - } - - sys_call(SYS_SET_RECV_INFO, MST_RX_BUF); - sys_call(SYS_SEND_DATA, MST_TX_BUF, tx_len); - } - else if (mode == WORKMODE_SLAVE) - { - - } - else - { - - } - - return 0; -} - - /* #define CDR_INT_TX0END 14U #define CDR_INT_TX1END 15U @@ -75,6 +30,14 @@ uint32_t HLM_work_with_isr(uint32_t mode) volatile uint32_t isr_flag[32] = {0}; uint32_t HLM_poll(uint32_t mode) { + sys_call = (void *)int_svr_code; + //复位脉冲 + *tx0_softReset = 1; + *tx1_softReset = 1; + *rx0_softReset = 1; + *rx1_softReset = 1; + + if (mode == WORKMODE_MASTER) { uint32_t tx_pkt_len = 256; @@ -164,7 +127,20 @@ uint32_t HLM_poll(uint32_t mode) *rx1_rxTxPair = 0; *rx1_rxTimerAim = 0; *plic_enable_0_31 = 0; + + #ifdef __riscv_e + sys_call(SYS_SLAVE_WORK); + #else + while(1) + { + status = *HLM_status; + if (status & HLM_RX0_VALID) + { + rx_start = 1; + break; + } + } while (1) { @@ -185,23 +161,11 @@ uint32_t HLM_poll(uint32_t mode) if (rx_pkt_len <= (rx_index * 4)) { rx_start = 0; + break; } } - else - { - if (status & HLM_RX0_VALID) - rx_start = 1; - } -#if 0 - //rx0 下行 - if (isr_flag[CDR_INT_RX0START]) - { - isr_flag[CDR_INT_RX0START] = 0; - rx_start = 1; - - } -#endif } + #endif } else { diff --git a/tb/sw/src/mstSvr.S b/tb/sw/src/hlmSvrOpt.S similarity index 63% rename from tb/sw/src/mstSvr.S rename to tb/sw/src/hlmSvrOpt.S index 7359bb2..4968f23 100644 --- a/tb/sw/src/mstSvr.S +++ b/tb/sw/src/hlmSvrOpt.S @@ -1,5 +1,6 @@ #include "tl2cdr.h" #include "sysDef.h" +#include "plic.h" #if 0 /* @@ -45,7 +46,130 @@ x31, 最大的服务中断号 .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, plic_claim的地址, 其实也可以不用传送 +init_func: + mv x30, a1 # plic_claim + mv x31, a2 # isr_flag + + la x17, _rv32i_plic_handle + mv a0, x17 + + li x29, TL2CDR_BASE + ret + +//主站启动发送数据 +//a1, 当前需要发送的数据的地址 +//a2, 当前数据发送的长度 +//a3, dummy +//a4, dummy +send_data_func: + mv REG_tx_data, a1 + mv REG_tx_data_len, a2 + +//*tx0_txLen = 8 + tx_len; //前导+长度命令 + mv x16, a2 + addi x17, x16, 8 + sw x17, TX0_WriteTxLen(REG_TL2CDR_BASE) + +//*tx0_txFifo = (tx_len << 20) | (0 << 16) | 0x0000; + slli x17, x16, 20 + sw x17, TX0_WriteTxFifo(REG_TL2CDR_BASE) + + li a0, 1 + ret + +//设置接收数据的地址,第一个接收数据的长度,往后都是数据 +//a1, 设置接收数据的缓冲区 +set_recv_info_func: + mv REG_rx_data, a1 + li a0, 1 + ret + +#if 0 +slave_work_func: +1: + lw x18, (CDR_INT_RX0START * 4)(x31) + beqz x18, 1b + sw x0, (CDR_INT_RX0START * 4)(x31) + + lw x20, RX0_ReadRxFifo(x29) + srli x19, x20, 20 + addi x19, x19, 4 + sw x19, TX1_WriteTxLen(x29) + sw x20, TX1_WriteTxFifo(x29) + li x21, 4 + +1: + lw x18, HLM_ReadStatus(x29) + andi x18, x18, HLM_RX0_VALID + beqz x18, 1b + lw x20, RX0_ReadRxFifo(x29) + sw x20, TX1_WriteTxFifo(x29) + addi x21, x21, 4 + bltu x21, x19, 1b + + ret +#else +slave_work_func: +1: + lw x18, HLM_ReadStatus(x29) + andi x19, x18, HLM_RX0_VALID + beqz x19, 1b + + lw x20, RX0_ReadRxFifo(x29) + srli x19, x20, 20 + addi x19, x19, 4 + sw x19, TX1_WriteTxLen(x29) + sw x20, TX1_WriteTxFifo(x29) + li x21, 4 + +1: + lw x18, HLM_ReadStatus(x29) + andi x18, x18, HLM_RX0_VALID + beqz x18, 1b + lw x20, RX0_ReadRxFifo(x29) + sw x20, TX1_WriteTxFifo(x29) + addi x21, x21, 4 + bltu x21, x19, 1b + + ret +#endif + + + + .balign 32 +_rv32i_plic_handle: + lw x16, 0(x30) # x16 = *plic_claim + sw x16, 0(x30) # *plic_claim = x16 + + slli x17, x16, 2 # x17 = x17 * 4 + add x17, x31, x17 # x17 = x31 + x17 + li x16, 1 + sw x16, 0(x17) + mret + + + +#if 0 _prog_start: //a0 call_function no li x16, SYS_INIT @@ -195,3 +319,4 @@ isr_hdl_table: j isr_tx1_deq_hdl j isr_rx0_enq_hdl j isr_rx1_enq_hdl +#endif diff --git a/tb/sw/src/mstStartup.S b/tb/sw/src/mstStartup.S index 889a51e..6f53831 100644 --- a/tb/sw/src/mstStartup.S +++ b/tb/sw/src/mstStartup.S @@ -4,6 +4,7 @@ .extern int_svr_code .extern plic_claim +.extern isr_flag #ifdef __riscv_i .extern plic_handle @@ -55,9 +56,11 @@ _prog_start: #else li a0, 0 - lui t0, %hi(plic_claim) + lui t0, %hi(plic_claim) lw a1, %lo(plic_claim)(t0) + la a2, isr_flag + call int_svr_code mv t0, a0 #这里选择不同的trap_entry服务函数,这个是RV32I的代码 #endif @@ -74,7 +77,6 @@ _prog_start: ecall #ifdef __riscv_i - .extern isr_flag .balign 32 trap_entry: #.macro define_const name, value diff --git a/tb/sw/src/slvStartup.S b/tb/sw/src/slvStartup.S index f56c480..b3d586e 100644 --- a/tb/sw/src/slvStartup.S +++ b/tb/sw/src/slvStartup.S @@ -4,6 +4,7 @@ .extern main .extern int_svr_code .extern plic_claim +.extern isr_flag .globl _prog_start .section .text.init @@ -51,6 +52,8 @@ _prog_start: lui t0, %hi(plic_claim) lw a1, %lo(plic_claim)(t0) + la a2, isr_flag + call int_svr_code mv t0, a0 #这里选择不同的trap_entry服务函数,这个是RV32I的代码 #endif @@ -69,7 +72,6 @@ _prog_start: #ifdef __riscv_i - .extern isr_flag .balign 32 trap_entry: #.macro define_const name, value diff --git a/tb/sw/src/slvSvr.S b/tb/sw/src/slvSvr.S deleted file mode 100644 index dbda3ce..0000000 --- a/tb/sw/src/slvSvr.S +++ /dev/null @@ -1,216 +0,0 @@ -#include "tl2cdr.h" -#include "sysDef.h" - -#if 0 -/* -其他代码全部使用RV32E编译,仅此代码采用 RV32I 编译,故而可以使用x0, x16~x31寄存器 -为了方便,不再使用ABI中的别名,直接使用x0, x16~x31;x1~x15使用ABI中定义的别名 - -x16~x23, 作为临时寄存器使用 - - -x24, TL2CDR_BASE - -x25, 接收数据的存储地址,第一个4字节接收数据的长度,往后都是数据 - -x26, 当前需要发送的数据的地址,第一个4个字节是长度(写入tx0_txLen)、第二开始是数据 -x27, 需要发送的数据长度 - -x28, plic_claim的地址,用于读取当前正在服务的中断号,清除中断号 -x29, REG_ISR_ADDR 中断服务子程序入口 - -x30, 最小的服务中断号 -x31, 最大的服务中断号 -*/ - -#endif - -#define REG_TL2CDR_BASE x24 -#define REG_rx_data x25 -#define REG_tx_data x26 -#define REG_tx_data_len x27 -#define REG_plic_claim x28 -#define REG_ISR_ADDR x29 -#define REG_min_isr_num x30 -#define REG_max_isr_num x31 - -#define REG_4 x23 - -.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_system_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 - -10: j 10b //死循环,输入错误的功能号 - ret //心理安慰,并不会返回 - - -//初始化系统,输入必要的地址信息,返回中断程序的地址 -//a1, plic_claim的地址, 其实也可以不用传送 -init_system_func: - mv REG_plic_claim, a1 # plic_claim - - la x17, _rv32i_plic_handle - mv a0, x17 - - li REG_TL2CDR_BASE, TL2CDR_BASE - la REG_ISR_ADDR, isr_hdl_table - li REG_min_isr_num, 14 - li REG_max_isr_num, 25 - li REG_4, 4 - - li x21, 0 - ret - -//主站启动发送数据 -//完全依靠中断搬运 - -//a1, 当前需要发送的数据的地址 -//a2, 当前数据发送的长度 -//a3, dummy -//a4, dummy -send_data_func: - mv REG_tx_data, a1 - mv REG_tx_data_len, a2 - -//*tx0_txLen = 8 + tx_len; //前导+长度命令 - mv x16, a2 - addi x17, x16, 8 - sw x17, TX0_WriteTxLen(REG_TL2CDR_BASE) - -//*tx0_txFifo = (tx_len << 20) | (0 << 16) | 0x0000; - slli x17, x16, 20 - sw x17, TX0_WriteTxFifo(REG_TL2CDR_BASE) - -//*tx0_txFifo = data[0] - #lw x17, 0(REG_tx_data) - #sw x17, TX0_WriteTxFifo(REG_TL2CDR_BASE) - - #add REG_tx_data, REG_tx_data, REG_4 - #sub REG_tx_data_len, REG_tx_data_len, REG_4 - - li a0, 1 - ret - -//设置接收数据的地址,第一个接收数据的长度,往后都是数据 -//a1, 设置接收数据的缓冲区 -set_recv_info_func: - mv REG_rx_data, a1 - li a0, 1 - ret - -//-------------------------------------------- -//这是中断程序开始的地方 - - .balign 32 -_rv32i_plic_handle: - lw x16, 0(REG_plic_claim) # x16 = *plic_claim - sw x16, 0(REG_plic_claim) # *plic_claim = x16 - - bltu x16, REG_min_isr_num, exit_handle #if x16 < REG_min_isr_num then goto exit_handle - bltu REG_max_isr_num, x16, exit_handle #if REG_max_isr_num < x16 then goto exit_handle - sub x17, x16, REG_min_isr_num - slli x17, x17, 2 # x17 = x17 * 4 - add x18, REG_ISR_ADDR, x17 # x18 = REG_ISR_ADDR + x17 - jr x18 - -exit_handle: - mret - -isr_tx0_end_hdl: - #li x17, 1 - #sw x17, TX0_WriteSoftReset(REG_TL2CDR_BASE) - mret - -isr_tx1_end_hdl: - #li x17, 1 - #sw x17, TX0_WriteSoftReset(REG_TL2CDR_BASE) - mret - -isr_rx0_err_hdl: -1: j 1b - mret - -isr_rx1_err_hdl: -1: j 1b - mret - -isr_rx0_start_hdl: - mret - -isr_rx1_start_hdl: -#if 0 - lw x22, RX1_ReadRxLen(REG_TL2CDR_BASE) - sw x22, 0(REG_rx_data) - add REG_rx_data, REG_rx_data, REG_4 -#endif - mret - -isr_rx0_end_hdl: - mret - -isr_rx1_end_hdl: - mret - -isr_tx0_deq_hdl: -#if 0 - beqz REG_tx_data_len, 1f //if (REG_tx_data_len > 0) - lw x17, 0(REG_tx_data) - sw x17, TX0_WriteTxLen(REG_TL2CDR_BASE) - - add REG_tx_data, REG_tx_data, REG_4 - sub REG_tx_data_len, REG_tx_data_len, REG_4 -1: -#endif - mret - -isr_tx1_deq_hdl: - mret - -isr_rx0_enq_hdl: - lw x17, RX0_ReadRxFifo(REG_TL2CDR_BASE) - bnez x21, 1f //if x21 != 0 then goto 1f - srli x16, x17, 20 - add x16, x16, REG_4 - mv x20, x16 - add x16, x16, REG_4 - sw x16, TX1_WriteTxLen(REG_TL2CDR_BASE) -1: - bge x21, x20, 1f - add x21, x21, REG_4 - sw x17, TX1_WriteTxFifo(REG_TL2CDR_BASE) -1: - mret - -isr_rx1_enq_hdl: -#if 0 - lw x17, RX1_ReadRxFifo(REG_TL2CDR_BASE) - sw x17, 0(REG_rx_data) - add REG_rx_data, REG_rx_data, REG_4 -#endif - mret - -isr_hdl_table: - j isr_tx0_end_hdl - j isr_tx1_end_hdl - j isr_rx0_err_hdl - j isr_rx1_err_hdl - j isr_rx0_start_hdl - j isr_rx1_start_hdl - j isr_rx0_end_hdl - j isr_rx1_end_hdl - j isr_tx0_deq_hdl - j isr_tx1_deq_hdl - j isr_rx0_enq_hdl - j isr_rx1_enq_hdl diff --git a/tb/sw/src/sysDef.h b/tb/sw/src/sysDef.h index 590cbb4..a37db52 100644 --- a/tb/sw/src/sysDef.h +++ b/tb/sw/src/sysDef.h @@ -4,6 +4,7 @@ #define SYS_INIT 0 #define SYS_SEND_DATA 1 #define SYS_SET_RECV_INFO 2 +#define SYS_SLAVE_WORK 3 #define WORKMODE_MASTER 0