TI中文支持网
TI专业的中文技术问题搜集分享网站

OMAPL138 DSP端关于spi通信时钟问题

现在用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位传输就有问题!难道是我的传输函数有问题?

赞(0)
未经允许不得转载:TI中文支持网 » OMAPL138 DSP端关于spi通信时钟问题
分享到: 更多 (0)