专家您好:
最近在调试hyperlink接口时出现一些问题。
1.hyperlink配置时有local寄存器和remote寄存器,keystone例程中只配置了local寄存器,请问这两个寄存器同时配置时需要注意什么?我在程序中一端使用了
local寄存器,一端使用remote寄存器。使用local寄存器的intlocal为0,结果中断发给了自己。
2.dsp之间的hyperlink通信,使用了不同的驱动版本,发现映射地址的配置不一致,两端的窗口大小不一,基地址也不尽相同,导致传输错误。请问hyperlink地
址映射配置时是否需要两端的local或者remote配置一致???
谢谢!!!
Thomas Yang1:
1,同时配置时,需要注意满足地址映射规则,映射规则请参考Hyperlink 文档。
2.当然需要local或者remote配置一致。如下是1个tx–rx例子:
Show the remote DDR addresses between 0x8000_0000 and 0x8FFF_FFFF (addressed in one consecutive 256MB Segment):
•28 bit offset – 0x0567 89a0
•Bits 28-31 0x0101 = 5
•txigmask = 11 mask 0x0FFF_FFFF
•Address sent to the receive/remote side = 0x5567_89a0On the receive side, the address is 0x8000_0000 + 0x0567_89a0 = 0x8567_89a0
(Segment size = 28 -> offset mask = 0x0fff ffff
li yanlong:
回复 Thomas Yang1:
专家您好:
说一下我根据keystone例程对地址映射的理解。
两个dspA,B通过Hyperlink通信,想把dspA中0x8a000000中的1024Byte数据传输到dspB的0x8a000000上,配置hyperlink时选定local寄存器段大小为16MB,
共16段(0x40000000:0x1000000:0x50000000),我将其中一段0x40000000的地址映射为0x8a000000,传输时将dspA 0x8a000000的数据memcpy到
0x4000000,这时dspB的0x8a000000上就出现了我想传输的数据。这是在我dspA,dspB的local寄存器配置完全相同的情况下才能正确,若两边的地址映射不一致传
输就会出现错误。但是,我只配置dspA的remote地址映射寄存器,dspB的地址映射完全不配置,数据也能通过以上操作发送过去。
所以请问您地址映射规则是否还有哪些需要注意的地方,能否只依据发端的需求配置地址映射而不考虑收端的配置一致性???因为我们现在很多程序底层都
封成了库的形式看不到具体的地址映射代码,所以调试时统一两边的地址映射配置比较麻烦,谢谢
Thomas Yang1:
回复 li yanlong:
需要知道接收端的映射关系,否则现在即使调通了,以后地址稍微改一下,有可能就要出问题