打印
[STM8]

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

[复制链接]
1690|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1156807738|  楼主 | 2020-8-3 18:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 1156807738 于 2020-8-10 10:50 编辑

各位好,遇到一个问题,特请教各位大佬,请多指教!
因芯片要求,SPI发送数据时候,不是8BIT的完整发送,需要清除几个残余在移位寄存器的bit数据,
我目前的操作是复位外设,重新初始化,但是耗时太长,满足不了主机的读取速度要求。各位有处理过这类问题的请指教!感谢。

使用特权

评论回复
来自 2楼
1156807738|  楼主 | 2020-8-5 08:48 | 只看该作者
本帖最后由 1156807738 于 2020-8-6 17:39 编辑

0000

使用特权

评论回复
来自 3楼
1156807738|  楼主 | 2020-8-6 11:49 | 只看该作者
本帖最后由 1156807738 于 2020-8-6 17:40 编辑

结帖下,复位外设方式可以使用,是我代码写的冗余,耗时严重,精简后,可以满足需求了。如果各位有其他更简便的方法,欢迎交流。

使用特权

评论回复
地板
ipman| | 2020-8-3 20:32 | 只看该作者
没有片选线?SPI是通过片选控制位对齐的啊

使用特权

评论回复
评论
1156807738 2020-8-5 08:39 回复TA
@ipman :前辈,您说的复位SPI单元具体指的是什么?能否给说下 
ipman 2020-8-4 18:30 回复TA
@1156807738 :寄存器是8位的,你不发完,是不会有中断来的,所以就不会从数据寄存器传输到移位寄存器,目前可以通过复位MCU的SPI单元实现吧,无需复位外设。或者用模拟SPI啊。 
1156807738 2020-8-4 15:27 回复TA
@ipman :目前我从机通过复位外设,重新初始化能解决,但是耗时严重,还不能用。所以很让人头痛 
1156807738 2020-8-4 15:23 回复TA
@ipman :您可能没太理解我的意思,我的主机的控制的CLK是固定的,比如主机发送14个CLK,只接收14个bit,也就导致了一些状态和移位寄存器的问题,我要做的是下次再发送时,把所有的状态和移位寄存器都恢复成正常的状态,不影响发送数据的准确性。 
ipman 2020-8-4 15:13 回复TA
@1156807738 :这个不是缓冲寄存器,软件够不着的,SPI残留位一般都是通过连发CLK清除的,接收设备应该有处理机制 
1156807738 2020-8-4 14:16 回复TA
@ipman :不能多发,多发数据主机默认会报错 
ipman 2020-8-4 13:54 回复TA
@1156807738 :发送8个0 清理下 
1156807738 2020-8-4 08:48 回复TA
有片选,即时拉高片选,你剩余的数据还卡在移位寄存器里,状态位肯定是有问题的,如果下次在发数据就错了 
评分
参与人数 1威望 +1 收起 理由
1156807738 + 1 山寨
5
walton1226| | 2020-8-4 08:54 | 只看该作者
//尝试下面的处理方式(主要意图是中途通过切换为主模式复位总线),下面的命令应该不超过2us.
SPE清0
SPI所有IO设为输入模式
MSTR置1
MSTR清0
SPI所有IO恢复功能模式
SPE置1

使用特权

评论回复
评论
1156807738 2020-8-4 15:31 回复TA
前辈,我是再片选的外部中断里处理的,试了下,数据错乱了,哈哈。我在摸索下。谢谢 
6
1156807738|  楼主 | 2020-8-4 08:54 | 只看该作者
本帖最后由 1156807738 于 2020-8-6 18:43 编辑

====

使用特权

评论回复
7
ipman| | 2020-8-10 11:25 | 只看该作者
这个用模拟SPI多好,精确到位,不必担心8的余数clk被发出。

使用特权

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

本版积分规则

7

主题

40

帖子

0

粉丝