查看: 4730|回复: 2

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

[复制链接]

该用户从未签到

1

主题

2

帖子

0

新手上路

Rank: 1

积分
23
最后登录
1970-1-1
发表于 2008-12-7 13:52:41 | 显示全部楼层 |阅读模式
FSL AW60 SPI发送数据,怎么获取已发送完状态(不是SPTEF=1哦)?也就是发送后检查那个标志位表示发送完毕,然后将CS置高.

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

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

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

但总觉得不爽,请那位高手解决一下.
我知道答案 目前已有1人回答
回复

使用道具 举报

该用户从未签到

1

主题

2

帖子

0

新手上路

Rank: 1

积分
23
最后登录
1970-1-1
 楼主| 发表于 2008-12-7 13:53:08 | 显示全部楼层

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

    /*初始化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就变为高电平

该用户从未签到

1

主题

5

帖子

0

新手上路

Rank: 1

积分
28
最后登录
1970-1-1
发表于 2008-12-11 13:49:33 | 显示全部楼层

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

你的疑虑只是因为简单的顺序错误而造成
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-20 19:32 , Processed in 0.085490 second(s), 23 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表