根据例程已经基本跑通,因设计需要,想每次SWRITE 发送包长为240字节,尝试设置SRIO_MAX_MTU由256改为240,以及CSL_SRIO_SetDataStreamingMTU(hsro,40),系统每次发出的SWRITE包长依然为256字节,请TI高手指点,多谢!
King Wang1:
我有点疑惑,我这里没有你的这个代码,但是我看到的代码里面SRIO_MAX_MTU主要用来配置Message类型报文 ,Message是Type11类型报文。而你说的SWRITE是type6的报文,应该属于DirectI/O的方式。而且协议上来说SWRITE的payload可以是double word的倍数,因此240byte是可以的。
user2003297:
回复 King Wang1:
非常感谢KingWang1的解释,想再请问一下:SWRITE的payload的长度该在哪里配置?哪个变量或者寄存器?盼解答,多谢。
King Wang1:
回复 user2003297:
SWRITE都属于Direct I/O的传输,是配置LSU寄存器,长度在LSU_REG3里面的byte_count配置。
user2003297:
回复 King Wang1:
再次感谢KingWang1,我按您的方法配置了byte_count为240(Srio_SockSendDIO(*240*)),确实可以发送SWRITE的数据包。
但是这样每次调用Srio_SockSendDIO只能发送一个SWRITE包,如果我想一次调用Srio_SockSendDIO发送缓存里的一段数据,比如480字节,想分成2个240字节的SWRITE包来发,这样调用Srio_SockSendDIO(*,480,*),实际系统发出2个SWRITE,第一个长为256,第二个为224,并未按我的设想发送。
请问1:如果想分成2个240字节的SWRITE包来发,该如何配置?
PS:我尝试去配置DS_LL_CTL寄存器的MTU为60,也没有起作用,是不是DS_LL_CTL所配置的信息只对消息类型有效,而对DIO类型无效?
King Wang1:
回复 user2003297:
我理解应该是不行的。你只能两次调用Srio_SockSendDIO函数,每次240字节。同时改变第二次的目的地址。
你这里看到的你发送480byte的报文被分成256和224byte两个报文,这是因为LSU最大的总线读取传输块就是256byte (payload),这个参数好像不能改,因此你的需求只能通过发送两次来解决。