现在用omapl138的DSP 端也就是c6748作为主机通过spi读取某传感器的值。传感器采用分页寻址,需要有读写命令,跳转到某页,传送的数据为16位,首位是1代表写,0代表读。现有如下问题:当传输16位数据如首位不是1的0x7e00时,用示波器观察spi主机的输出,发现数据和时钟都没有错误,串口显示读取到的数据也是对的。但是当发送首位是1的数据,如0x8555时(只要首位是1就会出错),时钟和数据都会出现问题,自己写的传输函数和示波器观察情况如下
//SPIx 读写一个两个字节
//TxData:要写入的双字节
//返回值:读取到的双字节
signed short SPIx_ReadWriteBytes(unsigned short TxData)
{
signed short RxData;
SPIDat1Config(SOC_SPI_1_REGS, (SPI_CSHOLD | SPI_DATA_FORMAT0), (1<<7));
while( (HWREG(SOC_SPI_1_REGS + SPI_SPIBUF) & 0x20000000 ))
{
;
}
SPITransmitData1(SOC_SPI_1_REGS, TxData);
while( (HWREG(SOC_SPI_1_REGS + SPI_SPIBUF) & 0x80000000 ) );//while((SPI1->SR&1<<0)==0) //等待接收完2个byte,接收缓冲为空
{
RxData = SPIDataReceive(SOC_SPI_1_REGS);
}
SPIDat1Config(SOC_SPI_1_REGS, (SPI_DATA_FORMAT0), (1<<7));
return RxData;
}
下面是发送数据0x7e00,发送的数据和时钟还有读取到的值都没有错误,不连接从器件传感器发送的数据和时钟也是对的
下面是发送数据0x8555 ,发送的数据和时钟都不标准,发现只要首位是1就会出错,当不连接从器件传感器观察也是错的
这是什么错误那?谢谢!
