F28379d采用c2000ware编写,通过SPI与LCD屏幕(主控ST7735)通信时,只使用了MOSI,CLK以及其他两个普通的GPIO,使能FIFO,检查软硬件都没问题,但是一直调试不通,后来单独用示波器单独抓取CLK,MOSI时序发现了问题,在发送数据的时候直接连续发送时,如下图:
函数内部为SPI_writeDataNonBlocking(SPIA_BASE, data<<8);这时时序出现异常,原本一共5个字节但只有最后一个字节出来了,前面的字节时钟只有4个脉冲与数据信号都没有出来
后来试着在后面添加延时,当延时至少20us时,时序才算正常,五个字节全都出来了。
而且这个问题不论是否使用有阻塞,有fifo的传送方式都会存在,值得注意的是在延时10us或15us时,时序出现的问题又不一样,只有最后一个字节出来,前面的数据一个字节的时钟只有4个脉冲,感觉是发送没发送完就开始了下一个字节的发送。
但是原来使用的STM32(也是硬件SPI)都是直接这样连续发送使用的,但是移植在c2000上出现这种问题,请问这正常吗,出现异常的原因是什么,有没有方法解决
Susan Yang:
请您先参考下下面的程序
Example_2837xDSpi_MasterTransmit.c
F28379d采用c2000ware编写,通过SPI与LCD屏幕(主控ST7735)通信时,只使用了MOSI,CLK以及其他两个普通的GPIO,使能FIFO,检查软硬件都没问题,但是一直调试不通,后来单独用示波器单独抓取CLK,MOSI时序发现了问题,在发送数据的时候直接连续发送时,如下图:
函数内部为SPI_writeDataNonBlocking(SPIA_BASE, data<<8);这时时序出现异常,原本一共5个字节但只有最后一个字节出来了,前面的字节时钟只有4个脉冲与数据信号都没有出来
后来试着在后面添加延时,当延时至少20us时,时序才算正常,五个字节全都出来了。
而且这个问题不论是否使用有阻塞,有fifo的传送方式都会存在,值得注意的是在延时10us或15us时,时序出现的问题又不一样,只有最后一个字节出来,前面的数据一个字节的时钟只有4个脉冲,感觉是发送没发送完就开始了下一个字节的发送。
但是原来使用的STM32(也是硬件SPI)都是直接这样连续发送使用的,但是移植在c2000上出现这种问题,请问这正常吗,出现异常的原因是什么,有没有方法解决
mangui zhang:调用底层SPI读写函数程序是串行执行肯定是等待一个字节一个字节完成送出后才跳出函数
你追踪一下函数内部执行情况,是不是没有等待或判断发送完成?