[STM8] ST8S003的SPI如何清除移位寄存器的残余数据,复位状态

[复制链接]
2081|16
 楼主| 1156807738 发表于 2020-8-3 18:31 | 显示全部楼层 |阅读模式
本帖最后由 1156807738 于 2020-8-10 10:50 编辑

各位好,遇到一个问题,特请教各位大佬,请多指教!
因芯片要求,SPI发送数据时候,不是8BIT的完整发送,需要清除几个残余在移位寄存器的bit数据,
我目前的操作是复位外设,重新初始化,但是耗时太长,满足不了主机的读取速度要求。各位有处理过这类问题的请指教!感谢。
 楼主| 1156807738 发表于 2020-8-5 08:48 | 显示全部楼层
本帖最后由 1156807738 于 2020-8-6 17:39 编辑

0000
 楼主| 1156807738 发表于 2020-8-6 11:49 | 显示全部楼层
本帖最后由 1156807738 于 2020-8-6 17:40 编辑

结帖下,复位外设方式可以使用,是我代码写的冗余,耗时严重,精简后,可以满足需求了。如果各位有其他更简便的方法,欢迎交流。
ipman 发表于 2020-8-3 20:32 | 显示全部楼层
没有片选线?SPI是通过片选控制位对齐的啊

评论

@ipman :前辈,您说的复位SPI单元具体指的是什么?能否给说下  发表于 2020-8-5 08:39
@1156807738 :寄存器是8位的,你不发完,是不会有中断来的,所以就不会从数据寄存器传输到移位寄存器,目前可以通过复位MCU的SPI单元实现吧,无需复位外设。或者用模拟SPI啊。  发表于 2020-8-4 18:30
@ipman :目前我从机通过复位外设,重新初始化能解决,但是耗时严重,还不能用。所以很让人头痛  发表于 2020-8-4 15:27
@ipman :您可能没太理解我的意思,我的主机的控制的CLK是固定的,比如主机发送14个CLK,只接收14个bit,也就导致了一些状态和移位寄存器的问题,我要做的是下次再发送时,把所有的状态和移位寄存器都恢复成正常的状态,不影响发送数据的准确性。  发表于 2020-8-4 15:23
@1156807738 :这个不是缓冲寄存器,软件够不着的,SPI残留位一般都是通过连发CLK清除的,接收设备应该有处理机制  发表于 2020-8-4 15:13
@ipman :不能多发,多发数据主机默认会报错  发表于 2020-8-4 14:16
@1156807738 :发送8个0 清理下  发表于 2020-8-4 13:54
有片选,即时拉高片选,你剩余的数据还卡在移位寄存器里,状态位肯定是有问题的,如果下次在发数据就错了  发表于 2020-8-4 08:48

评分

参与人数 1威望 +1 收起 理由
1156807738 + 1 山寨

查看全部评分

walton1226 发表于 2020-8-4 08:54 | 显示全部楼层
//尝试下面的处理方式(主要意图是中途通过切换为主模式复位总线),下面的命令应该不超过2us.
SPE清0
SPI所有IO设为输入模式
MSTR置1
MSTR清0
SPI所有IO恢复功能模式
SPE置1

评论

前辈,我是再片选的外部中断里处理的,试了下,数据错乱了,哈哈。我在摸索下。谢谢  发表于 2020-8-4 15:31
 楼主| 1156807738 发表于 2020-8-4 08:54 | 显示全部楼层
本帖最后由 1156807738 于 2020-8-6 18:43 编辑

====
ipman 发表于 2020-8-10 11:25 | 显示全部楼层
这个用模拟SPI多好,精确到位,不必担心8的余数clk被发出。

评论

感谢回帖! 我做这个是中间的转接通信,如果使用模拟时间来不及。  发表于 2020-8-11 15:15
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

40

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部