例程配置为SRIO_DIGITAL_LOOPBACK测试模式。
上图八个printf是我自己加上去的,为了看gpSRIO_regs->LSU_CMD[lsuNum].RIO_LSU_REG1,gpSRIO_regs->LSU_CMD[lsuNum].RIO_LSU_REG2 被赋值前后的变化。断点打在KeyStone_SRIO_LSU_transfer()函数的末尾。下图是执行结果。在执行赋值语句后,这两个寄存器被赋值后为什么还是0x0?
Nancy Wang:
可以直接在ccs expression窗口看LSU_cmd值的变化,在持续刷新的模式下看。
haolong liu:
回复 Nancy Wang:
谢谢回复。
上图是console窗口截图。from 0x10802200 to 0x1080a200, 这条信息里0x10802200应该和RIO_LSU_REG2的值一样;0x1080a200应该和RIO_LSU_REG1的值一样。我用expression观察REG2和REG1的值(持续刷新),暂定运行后发现REG2和REG1的值和console窗口的源地址目标地址不一样,为什么?
我理解的是RIO_LSU_REG2里存储是源地址,RIO_LSU_REG1里存储的是目标地址,不知道是否理解有误?
Nancy Wang:
回复 haolong liu:
你看tranfer->localdspaddress的地址是对的。你看到的lsu_cmd的值是多少?可能看到的是加上了uiByteCount之后的值。
haolong liu:
回复 Nancy Wang:
感谢回答!
看到的确实是加上了uiByteCount之后的值。请问这是为什么?
另外,关于上个问题,单步调试,执行完如下图的赋值语句后,通过expressions窗口查看,发现RIO_LSU_REG1并没有被赋值为transfer->rioAddressLSB_ConfigOffset,RIO_LSU_REG2也没有被赋值为transfer->localDspAddress。但是在执行完后面的REG5赋值语句后,REG1和REG2发生变化,被正确赋值。请问为什么?