我用5501的MCBSP1接口连接SX1257的SPI接口控制其寄存器的读写。SX1257寄存器的读写时序如下图:
寄存器如下:
程序如下:
Uint16 SPI_ReadReg(Uint16 addr)
{
Uint16 value=0;
addr &= 0x7f;
hMcbsp=MCBSP_open(MCBSP_PORT1,MCBSP_OPEN_RESET);
SPI_8bit(hMcbsp);
while(!MCBSP_xrdy(hMcbsp)){};
MCBSP_write16(hMcbsp,addr);
while(!MCBSP_rrdy(hMcbsp)){};
value=MCBSP_read16(hMcbsp);
SPIEND_Delay();
MCBSP_close(hMcbsp);
return value;
}
执行该程序读出的寄存器只与寄存器的初始值不一致,并且将5501配置成不同的时钟读数也不一致,但都与寄存器的初始值不相符。
我用PLL_setFreq(0,15,0,0,0,1,0)函数配置的时钟,有源晶振为10MHz,SX1257的SPI接口最高工作时钟为10MHz,所以应该没有超出其时钟范围。
想请教一下老师,我应该从哪些方面查找程序的问题。
谢谢。
Shine:
试试在读之前加dummy write
while(!MCBSP_xrdy(hMcbsp)){};
MCBSP_write16(hMcbsp,0);
Meng Huang1:
回复 Shine:
加了空写读出的数据也不正确呢?所有寄存器的值读出来都是1
Meng Huang1:
回复 Shine:
加了
while(!MCBSP_xrdy(hMcbsp)){};
MCBSP_write16(hMcbsp,0);
结果也不正确呢?所有寄存器的值读出来都是1。