能否解释一下为什么红框内,0x1地址的与0x0地址的数据打包了,但是0x3地址的数据却没有和0x2的地址打包,并且也没有报错呢
如果当前来的是地址0x1的数据,但是并没有来0x0地址的,那么怎么封装呢,这是否意味着我需要记录所有的偶数地址的数据呢,比如我搞一个寄存器,将所有的偶数地址的数据存入这个寄存器,如果后续有奇数地址来,就在这个大的寄存器中寻找该奇数地址的前一个偶数地址的数据。这是我的第一个问题。
第二个问题就是,对于mailbox模式,dw_mode 为8bit 和16bit 两种情况,分别是怎么映射到hic 的内部寄存器的,比如h2dbuf0(0x40),您能举出我写这个寄存器所需要给的地址嘛(针对8bit和16bit的情况)
关于第一个问题,16位写入的正确方法是先写入偶数地址,然后再写入奇数地址。 例如,应首先写入B0 (这不会触发16位写入),然后写入B1 (此事件将触发B1B0的16位写入)
关于第二个问题,邮箱寄存器将作为任何其他寄存器访问,您可以参考名为"读取的数据包装和解包"的表格。 我不知道您所面临的确切问题,能否举个例子?
我回答说DWMODE是8位,但ACCSIZE设置为16位。 在这种情况下,B0和B1将作为两个通道提供,HIC模块将等待打包,直至两个数据都可用。 在这种情况下,外部主机必须先写入B0,然后再写入B1。
您设置的HICHOSTCR.ACCSIZE是什么?
例如,DWMODE为16位,ACCSIZE设置为16位,由于两个访问大小匹配,因此HIC模块不需要等待任何封装。 对每个地址进行的任何访问,HIC将立即触发写入/读取。 对于第一个地址0x0,传入的数据将为B1B0,并将立即转发此读/写数据。 对于下一个地址0x1,数据将是B3B2,它也会立即转发,依此类推。
只有当DWMODE和ACCSIZE不匹配时,才需要打包。 如果它们匹配,则不会发生包装。 希望这一点得到澄清