搜索
bottom↓
回复: 13

51内置硬件SPI,如果判断SPI传送完成标志会多花很多时间

[复制链接]

出0入27汤圆

发表于 2023-3-23 12:53:51 | 显示全部楼层 |阅读模式
SPI写一字节代码,两帧码之间时间间隔4.18US:
  1.     /* 清标志 */
  2.     SPSTAT = 0xC0;
  3.     /* 数据写入发送缓冲区 */
  4.     SPDAT  = fu8_Data;
  5.     /* 等待完成 */
  6.     while(!(SPSTAT&0x80));
  7.     //SPSTAT = 0xC0;
复制代码


如果把把查询完成标志的语句注释掉,两帧码之间间隔1.58US,足足缩短2.6US。
我查了编译后的汇编,这个查询也就两条指令:
  1. C:0x0013    E5AD     MOV      A,SPSTAT(0xAD)
  2. C:0x0015    30E7FB   JNB      0xE0.7,C:0013
复制代码



由此看来这两条指令循环了多次才等到到标志位置位的。
但我不查询SPI传送完成,看波形数据也被送出了啊,这里等待的时间为啥这么长?不等待可不可以。

出40入518汤圆

发表于 2023-3-23 13:02:14 | 显示全部楼层
你能确保你下一次再操作的时间间隔足够大应该是没问题吧
我也有这样用过,用DAC输出波形,尽量快速,所以把等待都取消掉了。
或者安全一点的方法是下次再用SPI的时候再进行判断

出0入27汤圆

 楼主| 发表于 2023-3-23 14:25:05 | 显示全部楼层
智涅 发表于 2023-3-23 13:02
你能确保你下一次再操作的时间间隔足够大应该是没问题吧
我也有这样用过,用DAC输出波形,尽量快速,所以把 ...
(引用自2楼)

足够时间间隔不好裁量,毕竟我要最短时间的。
是不是用逻辑分析仪,看到数据都是正确传送就可以呢?

出0入16汤圆

发表于 2023-3-23 14:50:06 | 显示全部楼层
突破标识时间连续使用肯定不可靠,一个行也不能代表个个行,发送之前判断一下标识是否完成了,没完成说明等待时间太短,如果是短时间里有大量数据要发则扔到到缓冲区一条一条单独发送,一直大量数据则无解

出40入45汤圆

发表于 2023-3-23 14:58:03 | 显示全部楼层
  1. SPSTAT = 0xA5;
  2. SPDAT = fu8_Data;
  3. SPSTAT = 0x5A;
  4. SPDAT = fu8_Data;
  5. SPSTAT = 0xA5;
  6. SPDAT = fu8_Data;
  7. SPSTAT = 0x5A;
  8. SPDAT = fu8_Data;
复制代码


试试就 shishi

出0入27汤圆

 楼主| 发表于 2023-3-23 15:12:15 | 显示全部楼层
矩阵时间 发表于 2023-3-23 14:58
试试就 shishi
(引用自5楼)

感谢。
这样测试写数据时序确实出不来了。
我循环写SPI的代码时序是可以出来的,说明指令延时的时间足够到标志位置位。那我就没必要写SPI之后再等待标志位置位了。

出0入224汤圆

发表于 2023-3-23 15:13:02 | 显示全部楼层
可以把判断发送结束标志的判断,放到每次发送之前。

出0入27汤圆

 楼主| 发表于 2023-3-23 15:19:45 | 显示全部楼层
yyts 发表于 2023-3-23 15:13
可以把判断发送结束标志的判断,放到每次发送之前。
(引用自7楼)

逻辑上有个坑:如果之前没有写操作,此位一直为0,我是不是还得加个超时判断?程序搞起来就太复杂了。

出40入45汤圆

发表于 2023-3-23 16:22:22 | 显示全部楼层
neutronlmk 发表于 2023-3-23 15:19
逻辑上有个坑:如果之前没有写操作,此位一直为0,我是不是还得加个超时判断?程序搞起来就太复杂了。 ...
(引用自8楼)

逻辑上没有坑
把那个判断放前面试试吧
就一个忙标识位而已

出20入186汤圆

发表于 2023-3-23 16:30:44 | 显示全部楼层
你把波特率调低点,你再试肯定就会乱掉。

出0入0汤圆

发表于 2023-3-23 16:46:05 | 显示全部楼层
为什么不用中断呢

出0入475汤圆

发表于 2023-3-24 09:18:52 来自手机 | 显示全部楼层
要等好久不是基本上可以算的出来的吗。spi速度多少,一个字节传输耗多少时间,去掉你搬运时间,剩下的不就是等待的么。
你这样估计是刚好凑巧罢了,前面人说的你换低波特率看看,估计就出问题

出0入0汤圆

发表于 2023-3-24 22:01:01 | 显示全部楼层
什么应用场景对SPI发送的时间要求这么严格呢

出45入38汤圆

发表于 2023-3-28 09:09:39 | 显示全部楼层
本帖最后由 国学芯用 于 2023-3-28 09:18 编辑

要范例程序测试一下  




如果还不行,可以用STC8H8K64U 仿真看一下  https://www.amobbs.com/thread-5777628-1-1.html

本帖子中包含更多资源

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

x
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-21 00:08

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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