IO口模拟SPI总线问题

来源:互联网 发布:淘宝网禁止黄赌毒 编辑:程序博客网 时间:2024/06/05 18:16
请教各位老大,如下是网络上找的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

相关帖子

  • • TLC1543程序及仿真电路图中文资料
  • • 为么STM8S调试的时候,单步执行到switch语句就自动复位呢,
  • • 分享关于MSP430F5438的程序例程
  • • 关于LPC4337 内部带flash的MCU下载程序后无法启动
  • • 51单片机倒计时器程序
  • • 怎么通过程序自身判定外部时钟有没有启振
  • • 再次提问!32最小系统为什么下载不了程序?求解!!
  • • 一段奇葩的FLASH写入寿命测试程序,求批
  • • KEA128用OTG USB是否能下载程序?
On My  Way!
 
回复 收藏 分享 淘帖 赏

举报

  
airwill
     

338

主题

1万

帖子

4万

积分

版主

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

  • 关注TA
  • 发消息

专家等级:

结帖率:96%

打赏:0.00

受赏:58.00

沙发
 发表于 2012-2-10 16:40 | 只看该作者 |返回版面
就是为了符合 下面那张图的时序要求呀
欢迎进入 TI 模拟技术论坛!
 
回复 赏

举报

  
dqyubsh

44

主题

2236

帖子

7012

积分

高级工程师

  • 关注TA
  • 发消息

专家等级:

结帖率:100%

板凳
 发表于 2012-2-10 16:47 | 只看该作者 |返回版面
SPI有几种类型的,不一定别人的程序刚好满足你的要求。看看别人的死路,自己写一个好了。
yubsh@263.net
 
回复 赏

举报

  
billyliang89

0

主题

1

帖子

3

积分

实习生

  • 关注TA
  • 发消息

专家等级:

结帖率:0%

地板
 发表于 2012-3-3 12:37 | 只看该作者 |返回版面
根据你所提供的图“SO”那一行,输出数据也是上升沿锁存,即上升沿使设备锁存MOSI的数据的同时在MISO上送出数据,懂了没?
21ic公开课新版上线!部分课程免费试看。还有限量优惠券可领,先到先得!http://open.21ic.com
 
回复 赏

举报

  
sunhq02

4

主题

524

帖子

1610

积分

助理工程师

  • 关注TA
  • 发消息

专家等级:

结帖率:100%

打赏:0.00

受赏:18.00

5
 发表于 2012-3-3 21:04 | 只看该作者 |返回版面
SPI的时序虽然是那样子没错
但是作为主设备,时序的控制权在主设备手里
从设备遵守的原则是,在主设备时钟前沿发出后的一定时间之内准备好数据
,并在主设备时钟后沿发出后一定时间之内保持数据
,也就是说,主设备时钟后沿前后的这段时间里面,读从设备数据,都是安全的
,前一个指令或者后一个指令并没有关系
21ic公开课新版上线!部分课程免费试看。还有限量优惠券可领,先到先得!http://open.21ic.com
 
回复 赏

举报

  
NE5532
      

159

主题

1万

帖子

5万

积分

版主

  • 关注TA
  • 发消息

专家等级:

结帖率: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

积分

助理工程师

  • 关注TA
  • 发消息

专家等级:

结帖率:100%

打赏:0.00

受赏:18.00

7
 发表于 2012-3-3 23:19 | 只看该作者 |返回版面
NE5532说的第三点是对的
21ic公开课新版上线!部分课程免费试看。还有限量优惠券可领,先到先得!http://open.21ic.com
 
回复 赏

举报

  
sunhq02

4

主题

524

帖子

1610

积分

助理工程师

  • 关注TA
  • 发消息

专家等级:

结帖率:100%

打赏:0.00

受赏:18.00

8
 发表于 2012-3-3 23:23 | 只看该作者 |返回版面
第2点,那个数据并不是一直在线上
SPI的协议规定从设备有义务在时钟后沿维持数据一段时间,但不是一直都在
并不一定维持到时钟前沿
21ic公开课新版上线!部分课程免费试看。还有限量优惠券可领,先到先得!http://open.21ic.com
 
回复 赏

举报

  
yewuyi
     

1408

主题

1万

帖子

7万

积分

版主

  • 关注TA
  • 发消息

专家等级:

结帖率:59%

9
 发表于 2012-3-4 11:34 | 只看该作者 |返回版面
呵呵,这种东西如果对着时序表还看不明白,就直接打屁股10下把
一:我的回帖多数只是猜测/估计/想象,建立在我现有知识结构的理解和分析上,多数都没有动手实际检验过,请斟酌采纳.
二:若对我的技术类主帖或回帖有异议,欢迎讨论,拒绝过激攻击或辱骂,否则全站追杀屏蔽发帖,后果自负.
三:对本人的其它意见,请直接向站长投诉,勿使用站内短信骚扰/挑衅/辱骂,否则将全站追杀屏蔽发帖,后果自负.
 
回复 赏

举报

  
amwrdfe

30

主题

730

帖子

2377

积分

初级工程师

  • 关注TA
  • 发消息

专家等级:

结帖率:33%

打赏:8.88

受赏:0.00

10
 发表于 2012-3-4 13:22 | 只看该作者 |返回版面
i2c,uart,对着时序图来搞,没什么难的。
21ic公开课新版上线!部分课程免费试看。还有限量优惠券可领,先到先得!http://open.21ic.com
 
回复 赏

举报

  
guess

0

主题

1

帖子

3

积分

实习生

  • 关注TA
  • 发消息

专家等级:

结帖率:0%

11
 发表于 2012-10-9 15:42 | 只看该作者 |返回版面
学习了 正在学习中~
21ic公开课新版上线!部分课程免费试看。还有限量优惠券可领,先到先得!http://open.21ic.com
 
回复 赏

举报

  
dlyt_test001

0

主题

255

帖子

775

积分

高级技术员

  • 关注TA
  • 发消息

专家等级:

结帖率:50%

12
 发表于 2012-10-9 16:11 | 只看该作者 |返回版面
最好做个通用的,定义一个数据结构吧!上升沿还是下降沿有效可设置;
附图上的所有时间间隔可设置。
:lol
兼容PEAK CAN;32路模拟量信号发生器;串口转TTL/STC下载模块/刷机模块;淘宝上搜索“MD13213”“MD21T22”
 
回复 赏

举报

  
reduct

0

主题

6

帖子

18

积分

实习生

  • 关注TA
  • 发消息

专家等级:

结帖率:0%

13
 发表于 2015-1-7 19:03 | 只看该作者 |返回版面
人家写的这个程序其实没什么问题的,tem<<1将最低位报持为0,如果放在SCK=0之后的话,就少了一个位了。
原创粉丝点击