IO口模拟SPI总线问题

请教各位老大,如下是网络上找的IO口模拟SPI总线发送接收数据的程序,已知从设备上升沿采集数据,下降沿输出数据。有几个问题不明白,用红色标出来了,请老大指点一下,谢谢!
INT8U SpiTxRxByte(INT8U dat)
{
INT8U i,temp;
temp = 0; 
SCK = 0;                  //已知从设备上升沿采集。时钟置低,准备发送一BIT数据
for(i=0; i<8; i++)
{
  if(dat & 0x80)
  {
         MOSI = 1;        //数据已经准备好
  }
  else MOSI = 0;
  dat <<= 1;
  SCK = 1;                //时钟置高,制造一个上升沿,数据打入从设备
  _nop_;
  _nop_;
  _nop_;
  _nop_;
  temp <<= 1;       //这里开始不明白了,怎么没有制造下降沿就读从设备的数据呢。从设备是下降沿才出数据的啊。我感觉是"temp<<1;"应该放在SCK=0之 
if(MISO)temp++;    //后才对
  SCK = 0;
  _nop_;
  _nop_; 
}

return temp;
}

请老大解释一下为什么这样写,谢谢了哈!

时钟时钟程序色标

满意回复

+10

NE5532 查看完整内容

呵呵,这么高的分哪,给我吧,我告诉你咋回事。 1.从图上看出来,CSn拉低以后,MISO的第一个BIT就已经上线了,所以说这个时序严格来说在读“上一个”下降沿送出 ...

+6

sunhq02 查看完整内容

NE5532说的第三点是对的

+5

airwill 查看完整内容

就是为了符合 下面那张图的时序要求呀

+5

dqyubsh 查看完整内容

SPI有几种类型的,不一定别人的程序刚好满足你的要求。看看别人的死路,自己写一个好了。

+5

billyliang89 查看完整内容

根据你所提供的图“SO”那一行,输出数据也是上升沿锁存,即上升沿使设备锁存MOSI的数据的同时在MISO上送出数据,懂了没? ...

+5

sunhq02 查看完整内容

SPI的时序虽然是那样子没错 但是作为主设备,时序的控制权在主设备手里 从设备遵守的原则是,在主设备时钟前沿发出后的一定时间之内准备好数据 ,并在主设备时钟 ...

+5

sunhq02 查看完整内容

第2点,那个数据并不是一直在线上 SPI的协议规定从设备有义务在时钟后沿维持数据一段时间,但不是一直都在 并不一定维持到时钟前沿 ...

+5

yewuyi 查看完整内容

呵呵,这种东西如果对着时序表还看不明白,就直接打屁股10下把

+4

amwrdfe 查看完整内容

i2c,uart,对着时序图来搞,没什么难的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册  手机登录

x

相关帖子

On My  Way!

 回复 收藏 分享 淘帖 

举报

  

airwill

     

338

主题

1万

帖子

4万

积分

版主

---------------------

专家等级:

结帖率:96%

打赏:0.00

受赏:58.00

沙发

 发表于 2012-2-10 16:40 | 只看该作者 |返回版面

就是为了符合 下面那张图的时序要求呀

欢迎进入 TI 模拟技术论坛

 回复 

举报

  

dqyubsh

44

主题

2236

帖子

7012

积分

高级工程师

专家等级:

结帖率:100%

板凳

 发表于 2012-2-10 16:47 | 只看该作者 |返回版面

SPI有几种类型的,不一定别人的程序刚好满足你的要求。看看别人的死路,自己写一个好了。

yubsh@263.net

 回复 

举报

  

billyliang89

0

主题

1

帖子

3

积分

实习生

专家等级:

结帖率:0%

地板

 发表于 2012-3-3 12:37 | 只看该作者 |返回版面

根据你所提供的图“SO”那一行,输出数据也是上升沿锁存,即上升沿使设备锁存MOSI的数据的同时在MISO上送出数据,懂了没?

21ic公开课新版上线!部分课程免费试看。还有限量优惠券可领,先到先得!http://open.21ic.com

 回复 

举报

  

sunhq02

4

主题

524

帖子

1610

积分

助理工程师

专家等级:

结帖率:100%

打赏:0.00

受赏:18.00

5楼

 发表于 2012-3-3 21:04 | 只看该作者 |返回版面

SPI的时序虽然是那样子没错
但是作为主设备,时序的控制权在主设备手里
从设备遵守的原则是,在主设备时钟前沿发出后的一定时间之内准备好数据
,并在主设备时钟后沿发出后一定时间之内保持数据
,也就是说,主设备时钟后沿前后的这段时间里面,读从设备数据,都是安全的
,前一个指令或者后一个指令并没有关系

21ic公开课新版上线!部分课程免费试看。还有限量优惠券可领,先到先得!http://open.21ic.com

 回复 

举报

  

NE5532

      

159

主题

1万

帖子

5万

积分

版主

专家等级:

结帖率:97%

打赏:0.00

受赏:38.00

6楼

 发表于 2012-3-3 21:10 | 只看该作者 |返回版面

呵呵,这么高的分哪,给我吧,我告诉你咋回事。

1.从图上看出来,CSn拉低以后,MISO的第一个BIT就已经上线了,所以说这个时序严格来说在读“上一个”下降沿送出的数据。
2.既然数据时在下降沿上线,那么没有发生“这一个”下降沿之前,上一个数据一直在线上。所以只要在上升沿之前读数都可以。
3.不知道这个程序用的啥单片机,多高频率,但是写程序的这个人明显没搞过汇编,最后两个NOP根本不需要,“return temp;”编译出来,加上下一次的调用语句,绝对不止4条汇编语句。而且很少见到什么单片机端口速度能超过SPI的(主频几十M的哪种除外)

††††看NE5532教学视频,炼就工程技术研发功力††††††††††
《跟我学DC-DC电源管理技术》【从只会写软件成长为软硬兼施】
《印刷电路板设计进阶》【12年一线设计经验大放送】
《印刷电路板设计基础》【新手别怕,老工程师带你入门!】

 回复 

举报

  

sunhq02

4

主题

524

帖子

1610

积分

助理工程师

专家等级:

结帖率:100%

打赏:0.00

受赏:18.00

7楼

 发表于 2012-3-3 23:19 | 只看该作者 |返回版面

NE5532说的第三点是对的

21ic公开课新版上线!部分课程免费试看。还有限量优惠券可领,先到先得!http://open.21ic.com

 回复 

举报

  

sunhq02

4

主题

524

帖子

1610

积分

助理工程师

专家等级:

结帖率:100%

打赏:0.00

受赏:18.00

8楼

 发表于 2012-3-3 23:23 | 只看该作者 |返回版面

第2点,那个数据并不是一直在线上
SPI的协议规定从设备有义务在时钟后沿维持数据一段时间,但不是一直都在
并不一定维持到时钟前沿

21ic公开课新版上线!部分课程免费试看。还有限量优惠券可领,先到先得!http://open.21ic.com

 回复 

举报

  

yewuyi

     

1408

主题

1万

帖子

7万

积分

版主

专家等级:

结帖率:59%

9楼

 发表于 2012-3-4 11:34 | 只看该作者 |返回版面

呵呵,这种东西如果对着时序表还看不明白,就直接打屁股10下把

一:我的回帖多数只是猜测/估计/想象,建立在我现有知识结构的理解和分析上,多数都没有动手实际检验过,请斟酌采纳.
二:若对我的技术类主帖或回帖有异议,欢迎讨论,拒绝过激攻击或辱骂,否则全站追杀屏蔽发帖,后果自负.
三:对本人的其它意见,请直接向站长投诉,勿使用站内短信骚扰/挑衅/辱骂,否则将全站追杀屏蔽发帖,后果自负.

 回复 

举报

  

amwrdfe

30

主题

730

帖子

2377

积分

初级工程师

专家等级:

结帖率:33%

打赏:8.88

受赏:0.00

10楼

 发表于 2012-3-4 13:22 | 只看该作者 |返回版面

i2c,uart,对着时序图来搞,没什么难的。

21ic公开课新版上线!部分课程免费试看。还有限量优惠券可领,先到先得!http://open.21ic.com

 回复 

举报

  

guess

0

主题

1

帖子

3

积分

实习生

专家等级:

结帖率:0%

11楼

 发表于 2012-10-9 15:42 | 只看该作者 |返回版面

学习了 正在学习中~

21ic公开课新版上线!部分课程免费试看。还有限量优惠券可领,先到先得!http://open.21ic.com

 回复 

举报

  

dlyt_test001

0

主题

255

帖子

775

积分

高级技术员

专家等级:

结帖率:50%

12楼

 发表于 2012-10-9 16:11 | 只看该作者 |返回版面

最好做个通用的,定义一个数据结构吧!上升沿还是下降沿有效可设置;
附图上的所有时间间隔可设置。
:lol

兼容PEAK CAN;32路模拟量信号发生器;串口转TTL/STC下载模块/刷机模块;淘宝上搜索“MD13213”“MD21T22”

 回复 

举报

  

reduct

0

主题

6

帖子

18

积分

实习生

专家等级:

结帖率:0%

13楼

 发表于 2015-1-7 19:03 | 只看该作者 |返回版面

人家写的这个程序其实没什么问题的,tem<<1将最低位报持为0,如果放在SCK=0之后的话,就少了一个位了。
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页