我们知道c6455的srio传输就是设置lsu的几个寄存器(以nwrite传输为例),这几个寄存器作用是:
寄存器0和1表示目的端MEMORY地址支持64BIT地址
寄存器2表示传输端 MEMORY地址支持32BIT范围
寄存器3表示一次传输的BYTE_COUNT,12个BIT表示一次传4KB数据,大于256B时物理层自动拆分
寄存器4表示输出口、目标ID、是否产生中断
寄存器5表示LSU传输的触发字,PACKET TYPE表示包类型 寄存器6状态寄存器,传输启动BUSY1,传输结束BUSY0
设置寄存器代码如下:
SRIO_REGS->LSU[n].LSU_REG0 = 0;
SRIO_REGS->LSU[n].LSU_REG1 = uiRemoteAddress;
SRIO_REGS->LSU[n].LSU_REG2 = uiLocalAddress;
SRIO_REGS->LSU[n].LSU_REG3 = byte_count;
SRIO_REGS->LSU[n].LSU_REG4 = (uiDestID << 8)|(uiIdSize << 24)|(outPortId << 30);
SRIO_REGS->LSU[n].LSU_REG5 = (packetType)|(hopCount << 8)|(doorbellInfo << 16);
由于reg0 reg1 reg2是代表源、目的memory地址,那么我们只能用相当于内存拷贝的方式(源地址的内容拷贝到目的地址)来传输数据了,假如我想把数据1,2,3,4……通 过srio由dsp传到fpga,是不是我首先需要把这些数据暂时先存入到dsp端指定地址处,然后再用内存拷贝方式进行srio传输?
Allen35065:
不需要,源地址(REG2)填DSP侧的数据读取地址,目标地址(REG0,REG1)填FPGA侧的写入地址即可。