现在用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就会出错,当不连接从器件传感器观察也是错的
这是什么错误那?谢谢!
Shine:
做个内部自环(loopback)的测试看看是不是也会有这个问题?
user5354609:
回复 Shine:
你好,我做了一个内部回环的自测,发现也是同样的问题,发送首位是一的数返回值是0,,不正常。发送首位不是1的数,返回值都很正常?难道是我的传输函数写错了?是什么原因那?
user5354609:
回复 user5354609:
发送首位不是1的十六位数返回值都很正常,发送什么,返回什么
user5354609:
回复 Shine:
你好,我还是没有解决这个问题,回环自测也是这个问题!希望得到你的帮助,非常感谢
Tony Tang:
回复 user5354609:
用starterware里的SPI例程试试。
user5354609:
回复 Tony Tang:
例程是八位数据传输,好使,没有问题。我改成16位传输就有问题!难道是我的传输函数有问题?