This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

F28M35x的库函数问题



求教关于SSIDataPut()与SSIDataGet()这两条指令的执行的问题,SSIDataGet()这条函数如果未使用SSI模块的中断,若接收FIFO中没有数据是否会停在此处导致MCU无法执行其它任务呢?SSIDataPut()这条指令是否会产生同样的问题呢?谢谢各位了先!

  • hongyue,

    如果FIFO没有数据,则CPU会停留在这个函数中,直到FIFO有数据。你可以看一下这个函数的源码:

    SSIDataGet(unsigned long ulBase, unsigned long *pulData)

    {     // Check the arguments.    

    ASSERT(SSIBaseValid(ulBase));

    // Wait until there is data to be read.    

    while(!(HWREG(ulBase + SSI_O_SR) & SSI_SR_RNE))     {     }

    SSIDataPut也有同样的问题。

    但是API库中也有类似的函数不带这个block功能的,即SSIDataPutNonBlocking, SSIDataGetNonBlocking.

    Eric

  • 谢谢Eric,明白了。那有没有清除FIFO中数据的指令呢?还有就是当使用SSI为主模式时,要接收从设备的数据需要发送空字节,是否可以这样写SSIDataPut(SSI0,0x00)?因为总感觉FIFO中有数据导致读取液晶字库点阵信息存到指定数组中的数据有错误,再通过LCD来显示会显示乱码。

  • hongyue

    SSIDataPut(SSI0,0x00)是对FIFO写数据,并非清空。你需要确认乱码原因,包括设置FIFO的level有没有设置对,跟你的数据要匹配等。可以查看一下驱动库的文档,以及SSI的技术手册。相信你会找到解决方法。

    Eric

  • 非常感谢Eric!我再查查。