打印

FSL AW60 SPI发送数据,怎么获取已发送状态(不是SPTEF=1哦)?

[复制链接]
1742|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jatkai|  楼主 | 2008-11-28 19:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
TE, spi, ICL, ic, pic
FSL AW60 SPI发送数据,怎么获取已发送完状态(不是SPTEF=1哦)?也就是发送后检查那个标志位表示发送完毕,然后将CS置高.

这个问题有很多人肯定会回答等待SPTEF为1就是发送完毕,其实我已做过实验了,用视波器看了几个相关信号.
事实上,SPETF为1后只是表示你可以往SPI的发送缓冲区送数据,而此刻SPICLK和SPIMOSI依然在发未发生的数据位.

我查看数据手册很久,好像并没有那个标志位来指明SPI发送数据位全部完成的标志.

我现在暂时是通过检测SPICLK的维持常态时间来确认发送完毕与否.

但总觉得不爽,请那位高手解决一下.

相关帖子

沙发
张明峰| | 2008-11-28 22:35 | 只看该作者

就是SPETF,毫无疑问

你的疑虑只是因为简单的顺序错误而造成的,别钻牛角尖。

使用特权

评论回复
板凳
jatkai|  楼主 | 2008-11-29 10:01 | 只看该作者

毫无钻牛之意!张先生!请帮忙看下代码,附上图说明.请帮指出

    /*初始化SPI */
          CS = 1;
         SPI1C1 = 0x00;            
    SPI1C2 = 0x00;
    //--------------------------------------------
    // BUSclk = 4MHz
    // SPIClk = 4M/2/2 = 1MHz
    SPI1BR = 0x10;            
    //--------------------------------------------
    // SPE = 1 使用SPI接口
    // MSTR = 1 SPI为主模式
    // CPHA=0,CPOL=0 时钟线平常为低电平,接收数据时在SPICLK的上
         // 升沿读取数据
    // LSBFE=1,低位先传    
    SPI1C1 = 0x51;
    (void)(SPI1S == 0);        
          CS = 1;


   
    /*向SPI发送数据 */
    CS = 0;    
    //temp = SPI1S;
    while (!SPI1S_SPTEF);    
    SPI1D = port;    
    while (!SPI1S_SPTEF);
        
    //temp = SPI1S;    
    SPI1D = sendData;    
    while (!SPI1S_SPTEF);   
                                        
    CS = 1;         // 此刻SPIEF已为1,如果置高CS那么如图所示.
                       // 数据还没有完全发送完,CS就变为高电平

    

使用特权

评论回复
地板
jatkai|  楼主 | 2008-11-29 10:11 | 只看该作者

真是水,到现在我还不知怎么上传图片?请那位帮手说一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

36

帖子

0

粉丝