乐鑫技术交流
直播中

李星童

7年用户 998经验值
私信 关注
[问答]

有什么好的方法让ESP32使用外部AD采集数据,尽量不用CPU参与吗?

我想使用ESP32+外置AD7767采集数据,像STM32一样,使用SPI+DMA的方式采集数据,尽量不用CPU参与。DRDY触发DMA搬运的方式在STM32上是,将DRDY接入 tiM3_ETR输入脚。一旦DRDY下降沿到来,TIM3计一个脉冲,产生内部的触发信号TRGO。并且由该信号启动一个DMA,用它来触发SPI 发送的DMA传输。我看了ESP32上类似的是使用Pulse Counter,但是脉冲计数好像是也是使用中断触发的,没有类似stm32上的外部触发ETR功能。

请问有什么好的方法让ESP32使用外部AD采集数据,尽量不用CPU参与吗?
                    

回帖(1)

糖栗子

2024-6-24 17:00:26
在ESP32上实现类似STM32的SPI+DMA数据采集方法,可以尝试以下步骤:

1. 选择合适的外部AD转换器:首先,确保你选择的AD转换器(如AD7767)与ESP32兼容,并且支持SPI通信。

2. 配置GPIO引脚:将ESP32的SPI接口与外部AD转换器连接。通常需要连接以下引脚:
   - MISO(主设备输入,从设备输出)
   - MOSI(主设备输出,从设备输入)
   - SCK(时钟信号)
   - CS(片选信号)
   - DRDY(数据就绪信号,如果有)

3. 配置SPI接口:在ESP32上配置SPI接口,设置时钟速率、数据位宽等参数。

4. 使用Pulse Counter:ESP32的Pulse Counter模块可以用来检测外部信号的上升沿或下降沿。将DRDY信号连接到Pulse Counter的输入引脚。

5. 配置中断服务程序(ISR):为Pulse Counter配置一个中断服务程序,当检测到DRDY信号的下降沿时,触发ISR。

6. 在ISR中启动DMA传输:在ISR中,启动DMA传输,将外部AD转换器的数据读取到ESP32的内存中。这可以通过配置DMA控制器来实现,指定源地址(外部AD转换器的数据寄存器地址)、目标地址(ESP32内存地址)和传输长度。

7. 处理DMA传输完成:在DMA传输完成后,配置一个DMA中断服务程序,用于处理数据,例如存储到内存或进行进一步处理。

8. 优化电源管理:为了降低功耗,可以在不需要采集数据时关闭SPI和DMA模块,仅在DRDY信号触发时唤醒这些模块。

通过以上步骤,可以实现在ESP32上使用外部AD采集数据,尽量减少CPU的参与。需要注意的是,ESP32的DMA功能可能没有STM32那么强大,因此在实现过程中可能需要进行一些调整和优化。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分