社区
嵌入开发(WinCE)
帖子详情
在SPI驱动里面接收SPI数据,怎么及时处理SPI数据缓冲区才不会让一帧数据跟下一帧数据起冲突。
xqhrs232
2009-04-02 09:07:18
在SPI驱动里面接收SPI数据,怎么及时处理SPI数据缓冲区才不会让一帧数据跟下一帧数据起冲突。
...全文
1765
26
打赏
收藏
在SPI驱动里面接收SPI数据,怎么及时处理SPI数据缓冲区才不会让一帧数据跟下一帧数据起冲突。
在SPI驱动里面接收SPI数据,怎么及时处理SPI数据缓冲区才不会让一帧数据跟下一帧数据起冲突。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
26 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xqhrs232
2009-10-21
打赏
举报
回复
环形缓冲队列----实现起来蛮难的.
xqhrs232
2009-04-07
打赏
举报
回复
READFILE( )怎么读?循环不断地读取?这样太费时间啊!
wjf_zjut
2009-04-07
打赏
举报
回复
环形缓冲队列的实现代码,串口驱动mdd.c里面有的,可以移植过来用!
wjf_zjut
2009-04-07
打赏
举报
回复
环境指针的实现代码,串口驱动mdd.c里面有的,可以移植过来用!
wjf_zjut
2009-04-07
打赏
举报
回复
[Quote=引用 22 楼 xqhrs232 的回复:]
READFILE( )怎么读?循环不断地读取?这样太费时间啊!
[/Quote]
确实是开一个线程循环读取的。
ulovexd
2009-04-06
打赏
举报
回复
[Quote=引用 11 楼 friendfish 的回复:]
做个环形缓冲队列;
简单的用数组来实现:
定义一个结构体,结构体里有三个成员:
1.队列的头指示符
2.队列尾指示符
3.数组
具体读写是这样:
驱动往进写数据时用队列的头指示符做数组的下标把数据放进去;
应用读数据时用队列的尾指针指示符做数组的下标把数据读出来;
要做的好一点的话,单独做个库,对外只提供读写的接口;驱动要写数据时调用接口直接写;应用读数据时调用接口直接读;
库里对数组的…
[/Quote]
很好的方法,楼主可以试试,我也学习了,小弟也在搞这个spi驱动。
morris88
2009-04-03
打赏
举报
回复
typedef struct {
int len;
unsigned char *buf;
} myBuf;
驱动进行缓存。每个 myBuf 对应一个 frame,建立多个 myBuf 对应多个 frame。当然 myBuf 个数不宜过多,可根据实测调整。
xqhrs232
2009-04-03
打赏
举报
回复
[Quote=引用 7 楼 xajhuang 的回复:]
建立一个适当大小的软Buffer,每次接收的数据都按照顺序缓存到Buffer中,上层根据Buffer的指针来读取需要的数据。
[/Quote]
上层怎么知道对应指针?驱动肯定要上发给AP知道,但这个时间间隔里面,这个指针说不定已经被更新为新的数值了。
xqhrs232
2009-04-03
打赏
举报
回复
[Quote=引用 7 楼 xajhuang 的回复:]
建立一个适当大小的软Buffer,每次接收的数据都按照顺序缓存到Buffer中,上层根据Buffer的指针来读取需要的数据。
[/Quote]
上层怎么知道对应指针?驱动肯定要上发给AP知道,但这个时间间隔里面,这个指针说不定已经被更新为新的数值了。
xajhuang
2009-04-03
打赏
举报
回复
建立一个适当大小的软Buffer,每次接收的数据都按照顺序缓存到Buffer中,上层根据Buffer的指针来读取需要的数据。
xqhrs232
2009-04-03
打赏
举报
回复
[Quote=引用 5 楼 gooogleman 的回复:]
使用SPI中断模式。处理完一帧之后再去读
我觉得使用中断比查询要好的多。
[/Quote]
通过驱动层发消息通知上层AP去读,AP收到了消息,然后去读,这个时间估计蛮长的,时间太长了,SPI里面接收好的数据估计早被下一帧数据给改变了,这样做的实时性不好。
gooogleman
2009-04-03
打赏
举报
回复
使用SPI中断模式。处理完一帧之后再去读
我觉得使用中断比查询要好的多。
wdw1600
2009-04-03
打赏
举报
回复
驱动里面可以用寄存器控制速度,如果你测试发觉丢帧了就调节下速度就可以了晒。
SPPREn这个寄存器:Baud rate = PCLK/2/(Precaler Value + 1)
起个软中断,然后写个中断服务程序?????SPI不是有专门的中断吗?还起个软中断做什么,最好把驱动弄成中断模式。
rushonin
2009-04-03
打赏
举报
回复
起个软中断,然后写个中断服务程序
xqhrs232
2009-04-03
打赏
举报
回复
接收线程跟处理线程里面用到的数据缓冲区都是同一个,怎么保持两个线程对这片数据缓冲区访问的唯一?并且能够及时响应SPI中断。
1》通过关键区是一种方法,但觉得效率会低,也不能及时响应SPI中断
xqhrs232
2009-04-03
打赏
举报
回复
ReadFile不知道读多少数据的,也不知道从缓冲区的那个地方开始读起。
xajhuang
2009-04-03
打赏
举报
回复
也就是说Soft Buffer 只存在PDD/MDD驱动中,和应用程序无关,应用程序根本不用去管MDD驱动中有没有Buffer,只需要利用ReadFile从MDD层读取数据。
所以Buffer以及指针的管理都在MDD层的ReadFile函数中实现和管理。
xajhuang
2009-04-03
打赏
举报
回复
[Quote=引用 9 楼 xqhrs232 的回复:]
引用 7 楼 xajhuang 的回复:
建立一个适当大小的软Buffer,每次接收的数据都按照顺序缓存到Buffer中,上层根据Buffer的指针来读取需要的数据。
上层怎么知道对应指针?驱动肯定要上发给AP知道,但这个时间间隔里面,这个指针说不定已经被更新为新的数值了。
[/Quote]
上层不需要知道下面的指针,只需要提供一个ReadFile的函数就行了,在ReadFile函数中你自己处理Buffer的指针就行了。
xqhrs232
2009-04-03
打赏
举报
回复
一帧数据技术一条命令数据啊。CPU是S3C6400。
wjf_zjut
2009-04-03
打赏
举报
回复
楼主说的一帧数据是什么意思。如果没接收一个数据就产生一个中断的话,是来不及的。不知道楼主用的CPU,SPI有没有FIFO?
加载更多回复(6)
JAVA_API1.6文档(中文)
java.nio 定义作为
数据
容器的
缓冲区
,并提供其他 NIO 包的概述。 java.nio.channels 定义了各种通道,这些通道表示到能够执行 I/O 操作的实体(如文件和套接字)的连接;定义了用于多路复用的、非阻塞 I/O 操作的...
java api最新7.0
java.nio 定义作为
数据
容器的
缓冲区
,并提供其他 NIO 包的概述。 java.nio.channels 定义了各种通道,这些通道表示到能够执行 I/O 操作的实体(如文件和套接字)的连接;定义了用于多路复用的、非阻塞 I/O 操作的...
STM32 HAL库
SPI
从机不定长
数据
帧
接收
响应
不定长帧的
数据
若是串口方式可使用DMA加空闲中断,特意去看了下
SPI
不支持空闲中断,然后设计上也就没有采用DMA方式
接收
数据
,单纯的使用中断方式维护。 从机不定长帧的区分使用了定时器超时机制,确定当前主机的...
spi
DMA 复位后主机
接收
上
一帧
数据
由于硬件接口有限,需要用
spi
总线进行设备之间进行通信,我使用的HAL库,对于实现
spi
主从通信我将在另一篇文章里描述一下配置。该文章主要说明
SPI
复位问题。 问题1:由于
spi
在进行通信时,有时会受到干扰,或者...
【MCU32】
SPI
通信单
接收
模式时钟异常
SPI
是全双工模式,主机即使只
接收
数据
也要向TX
缓冲区
写
数据
,时钟产生并开启传输。当
SPI
配置为单
接收
模式时,
SPI
会自动向TX
缓冲区
填写
数据
,时钟产生并开启传输。:
SPI
单发送模式,向下位机发送命令字节,下位机
接收
...
嵌入开发(WinCE)
19,504
社区成员
41,569
社区内容
发帖
与我相关
我的任务
嵌入开发(WinCE)
硬件/嵌入开发 嵌入开发(WinCE)
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章