OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5139|回复: 0

不用中断,尽量少占用 CPU 时间,如何高速、连续启动 SPI ?

[复制链接]

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11529
金钱
11529
注册时间
2014-4-1
在线时间
1312 小时
发表于 2014-4-4 08:44:25 | 显示全部楼层 |阅读模式

要用F407的 SPI 接口接收 AD 数据,采样频率几百K ~ 1 MHz。

SPI 的启动方法有以下几种:
1、用软件向 SPI -> DR 寄存器写数据,写一次就启动一次。这是常规的方法。
   我现在的情况是:CPU很忙,这样做难以达到几百 K 的速度。另外,暂时不考虑在中断中写 DR 寄存器,因为难以与其他中断协调
2、用 DMA 方式,可以“批量”启动 SPI,次数可以定义。     
   可惜两个 DMA 控制器都已经占用了,一个用于 DA 高速输出(板子另有一片高速 DA ),另一个准备用来转移这个 AD 的数据。

有两个问题:
1、还有其他可能的方法吗?
2、一个 DMA 控制器,可以同时打开两个通道吗?

我这样设想:
1、定时器 PWM 方式输出脉冲,启动 AD 转换;
2、这个脉冲的后沿同时启动 DMA ,向 SPI-DR 寄存器搬数据,即启动 SPI 接收 AD 数据;
3、接收完成事件启动同一个 DMA 的另一个通道,把接收数据搬到其他地方(缓冲区)。
以上过程反复运行。

两个通道的物理过程,决定了它们不是同时出现的。似乎可行吧。








正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-12 19:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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