大牛们,希望不吝赐教
我用C6713与一款FLASH芯片通信,设置MCBSP 为SPI主机,8BIT,MSB。
SPI写操作和读操作(读之前先写一个无效的数)都是没问题的。
但是实际应用中,经常需要对slave的某个寄存器进行操作,例如,一个读
寄存器的指令:写地址,写控制字,然后才是读。就出现问题了!!!
例如 :
SPI_Send_Bytet(Reg_H); //通过SPI写16位寄存器高8BIT地址
SPI_Send_Byte(Reg_L); //通过SPI写16位寄存器低8BIT地址
SPI_Send_Byte(FDM2|RWB_READ|(s*0x20+0x08));//通过SPI写控制字节
SPI_Send_Byte(0); //写无效字节
X_H= SPI_Read_Byte(); //读取16BIT寄存器的高8BIT
SPI_Send_Byte(0); // 写无效字节
X_L = SPI_Read_Byte(); //读取16BIT寄存器的低8BIT///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
在整个指令的操作过程中有5组8BIT的 时钟序列。前3组对应主机写3个字节,后2组对应主机读2个字节
我用示波器观察,mcbsp的数据发送引脚,数据都是正常的。
但是mcbsp的数据接收引脚,在5组时钟内 理论上之后第4 、5组时钟对应的数据 是savle响应读操作产生的,
但是,我读到的数据 是这5组时钟内,mcbsp数据接收引脚上的 随机的 其中某2组。
请问,如果操作,可以保证,在类似这样的“需要先写再读的操作序列中”我可以取到 需要的数据呢?
Tony Tang:
在前面的3次写操作过都加入一个读接收寄存器的操作,确保接收寄存器被清除,这样是否可行?