打印
[资料分享]

TI DSP+ARM处理器典型用法-AD采集处理综合案例

[复制链接]
802|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
火星国务卿|  楼主 | 2020-10-22 18:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

1.案例功能

TIAM5708的DSP端使用EDMA通过GPMC接口采集AD7606或ADS8568模块8通道的AD信号,同时由DSP端对其中6通道的AD信号进行FFT处理,最后将8通道时域数据和经FFT处理的6通道频域数据保存到DSP端L2SRAM中,可通过仿真器与CCS软件查看对应通道的时域波形和频域波形。

程序保存通道0的时域数据和经FFT处理的频域数据至CMEM(共享内存)空间,通过IPC组件通知ARM端读取该通道的时域数据和频域数据,使用Qt在LCD显示屏上进行波形绘制,最后将数据保存到文件中。

2.案例框图

3.案例演示

3.1硬件连接

案例基于创龙科技的TL570x-EVM(AM5708)评估板、TL7606I(AD7606)模块、TL8568I(ADS8568)模块进行测试

TL570x-EVM评估板简介

(AM5708,C66xDSP+Cortex-A15ARM)

TL7606I模块硬件连接示意图

TL8568I模块硬件连接示意图

3.2案例测试

按照用户手册操作步骤进行程序的加载,程序运行后,即可在LCD显示屏上看到通道0的时域波形和频域波形。

亦可使用CCS软件查看存储在DSP端L2SRAM中的时域和频域波形。

点击菜单栏放大按钮进行放大查看,点击打开游标工具,再点击X-Axis可查看到信号存在,如下图所示。

程序已将6通道的频域数据保存到DSP端L2SRAM,如需查看其他通道波形,请按照上述方法打开对应通道地址查看即可。

4.关键代码

4.1ARM(Host)端关键代码

Qt程序框架

(1)解析命令行参数,并显示Qt主窗口。

host/main.cpp

(2)申请CMEM共享内存空间,并转换为实际物理地址。在共享内存空间中申请两个Buffer空间,分别用于存放AD信号时域数据和经FFT处理的频域数据。申请的两个Buffer空间的内存地址将会发送至DSP端,DSP端将一个通道的AD信号时域数据和经FFT处理的频域数据存放在Buffer空间。

host/app.c

(3)发送App_CMD_SETUP消息类型至DSP端,该消息携带申请好的Buffer空间物理地址等信息,并等待DSP端返回消息。

(4)发送App_CMD_TEST消息类型至DSP端,该消息主要通知DSP端进行AD信号采集。DSP端每次采集512个点,并保存AD信号时域数据和经FFT处理的频域数据。该消息还携带loop_TImes参数,已设置为8。DSP端每循环8次,即采集并处理8x512=4096个点后返回消息至ARM端。

当运行“。/app_host0x01000000610000/home/root7606”命令时,程序循环次数设置为10000,则总采样点个数为:4096*10000=40960000。

host/app.c

(5)发送App_CMD_SHUTDOWN信息类型至DSP端,通知DSP端结束程序的运行,并等待DSP端返回消息。

host/app.c

(6)QtApp线程接收到DSP端的通知后,通过信号槽通知主线程绘制波形。

host/app_thread.cpp

(7)分别绘制时域波形和频域波形。

host/plot.cpp

(8)将时域和频域数据写入文件。

host/file.cpp

4.2DSP(Slave)端关键代码

(1)监听slaveQue消息队列,等待ARM端发送消息。

根据消息携带的“msg-》cmd”参数来判断不同的消息类型,从而进入相应的处理函数。处理结束后,返回消息至ARM端。

dsp1/Server.c

(2)响应ARM端发送的App_CMD_SETUP消息类型,调用ad_init和ad_test_init初始化函数。

dsp1/Server.c

ad_init()主要实现TImer、GPIO、GPMC等和AD芯片硬件相关的程序初始化。

ad_test_init()主要用于程序运行环境的准备,如信号量、内存申请、EDMA3初始化、FFT初始化等。

dsp1/ad_test.c

(3)程序通过EDMAGPIOevent方式采集AD信号。

定时器创建后,将以固定的时间间隔进入定时器中断服务函数。在中断服务函数中通过CONVST引脚触发AD信号采集来控制采样频率。每次采集转换完成后,AD芯片的Busy引脚将触发GPIO2的下降沿中断,从而触发EDMA传输。

dsp1/ad_test.c

(4)EDMA传输完成后,将进入EDMA中断服务函数。

在中断服务函数中统计采样点个数,当采样点个数达到ADC_SAMPLING_FFT_NUM(512)个后,将置位信号量,通知任务进行数据处理。

dsp1/ad_test.c

(5)DSP端响应ARM端发送的App_CMD_SETUP消息类型,调用ad_test()进行数据处理。

①使能定时器,使定时器按固定周期触发AD信号采集。

②阻塞等待信号量置位,信号量置位后,对数据进行保存、FFT运算等操作。

5.应用场合

6.源码、资料下载

案例源码、产品资料(用户手册、核心板硬件资料、产品规格书)可点击下方链接获取。


使用特权

评论回复

相关帖子

沙发
xiaoqizi| | 2020-11-9 17:24 | 只看该作者
案例通俗易懂啊

使用特权

评论回复
板凳
木木guainv| | 2020-11-9 17:25 | 只看该作者
功能真的好强大啊

使用特权

评论回复
地板
aoyi| | 2020-11-9 17:28 | 只看该作者
步骤清晰  非常浅显易懂

使用特权

评论回复
5
drer| | 2020-11-9 17:29 | 只看该作者
非常感谢楼主的分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

681

主题

1534

帖子

7

粉丝