AM57x 多核SoC开发板——GPMC的多通道AD采集综合案例手册(上)
本文档适用开发环境:
Windows开发环境:Windows 7 64bit、Windows 10 64bit
Linux Processor SDK:ti-processor-sdk-linux-rt-am57xx-evm-04.03.00.05
RTOS Processor SDK:ti-processor-sdk-rtos-am57xx-evm-04.03.00.05
CCS:CCS7.4
本案例主要是通过GPMC接口采集AD7606或ADS8568模块输入的AD信号,由DSP端对AD信号进行FFT处理,并由ARM端对AD信号进行Qt波形绘制、数据保存等,其中使用到的测试板卡为创龙科技的TL570x-EVM工业开发板。
创龙科技TL570x-EVM是一款基于TI Sitara系列AM5708 ARM Cortex-A15 + 浮点DSP C66x处理器设计的异构多核SoC评估板,由核心板和评估底板组成。典型应用在运动控制、工业PC、机器视觉、智能电力、视频监测等领域。
核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。开发板接口资源丰富,引出双路PRU百兆网口、千兆网口、USB 3.0、CAMERA、GPMC、HDMI、PCIe等接口,方便用户快速进行产品方案评估与技术预研。
案例功能
AM570x DSP端使用EDMA通过GPMC接口采集AD7606或ADS8568模块8通道的AD信号,同时由DSP端对其中6通道的AD信号进行FFT处理,最后将8通道时域数据和经FFT处理的6通道频域数据保存到DSP端L2SRAM中,可通过仿真器与CCS软件查看对应通道的时域波形和频域波形。
程序保存通道0的时域数据和经FFT处理的频域数据至CMEM(共享内存)空间,通过IPC组件通知ARM端读取该通道的时域数据和频域数据,使用Qt在LCD显示屏上进行波形绘制,最后将数据保存到文件中。
本案例默认配置AD7606模块采样周期为6us,即采样率约为167KHz;配置ADS8568模块采样周期分别为5us,即采样率为200KHz。程序工作流程图如下所示:
操作说明
硬件连接
将Tronlong的TL7606I(AD7606)模块或TL8568I(ADS8568)模块插入评估板GPMC扩展接口,并对模块进行独立供电。TL7606I模块使用5V电源供电,J1跳线帽连接到0,使用±5V量程。TL8568I模块使用12V电源供电,软件已配置为±12V量程。
将模块的待测输通道正确连接信号发生器,信号发生器输出频率为4KHz、峰峰值为2Vpp(即幅值为1V)的正弦波信号。待测信号电压请勿超过模块量程,否则可能会导致模块损坏。评估板接入LCD显示屏,并通过仿真器连接到PC机。硬件连接示意图如下:
- 案例测试
案例位于产品资料“4-软件资料\Demo\rtos-examples\tl-linux-ipc-examples\tl-gpmc-ad-fft\”目录下,案例目录说明如下。
表 1
bin目录 |
app_host |
ARM端可执行文件 |
load-firmware.sh |
DSP端可执行文件运行脚本 |
|
server_dsp1.xe66 |
DSP端可执行文件 |
|
lib目录 |
libqwt-6.1.3.tar.gz |
QWT库压缩包 |
src目录 |
dsp1目录 |
存放DSP端源码和配置文件等 |
host目录 |
存放ARM端源码和配置文件等 |
|
ludev目录 |
存放共享内存库源码和镜像文件等 |
|
shared目录 |
存放多核共用代码定义相关文件 |
|
makefile |
顶层Makefile文件,用于构建整个案例程序 |
|
products.mak |
顶层配置文件,用于配置编译环境 |
由于本案例需依赖QWT库文件,因此请将libqwt-6.1.3.tar.gz压缩包解压,并将解压目录中的lib目录下的libqwt.so、libqwt.so.6、libqwt.so.6.1、libqwt.so.6.1.3此四个QWT库文件拷贝到文件系统“/usr/lib/”目录下。同时将bin目录下的app_host、server_dsp1.xe66、load-firmware.sh此三个文件拷贝到评估板文件系统同一个目录下。
Linux内核预留0xa0000000~0xac000000(192MByte)内存作为CMEM共享内存,案例使用0xa0000000~0xa0008000(32KByte)内存进行测试,此32KByte内存划分为2个16KByte (0x4000,16384)池空间,分别用于存放模块通道0的时域数据和频域数据。
进入评估板文件系统执行如下命令。
备注:由于CMEM共享内存地址空间已超过512MByte,故如下测试仅支持DDR3不小于1GByte的评估板。
Target# /etc/init.d/matrix-gui-2.0 stop //关闭Matrix界面程序
Target# pkill ti-mctd //禁用ti-mctd服务,避免cmemk驱动卸载失败
Target# rmmod cmemk //卸载cmemk驱动
Target# modprobe cmemk phys_start=0xa0000000 phys_end=0xa0008000 pools=2x16384 //划分2个16KByte池空间
Target# cat /proc/cmem //查看CMEM配置
进入app_host、server_dsp1.xe66、load-firmware.sh文件所在目录并执行如下命令,运行DSP端程序。
Target# ./load-firmware.sh
执行如下命令可查看ARM端程序参数说明。
Target# ./app_host -h
执行如下命令,运行ARM端程序。
Target# ./app_host 0x01000000 6 10000 /home/root/ 7606
命令参数说明:
0x01000000:指定GPMC片选首地址,使用的GPMC片选为CS0。
6:指定信号采集周期(单位:us)。TL7606I模块设置为6,TL8568I模块设置为5。
10000:指定采集循环次数。
/home/root/:指定模块通道0的时域数据和频域数据的保存路径。时域数据保存文件为ad_raw_data.txt,频域数据保存文件为ad_fft_data.txt。
7606:指定模块型号。TL7606I模块设置为7606,TL8568I模块设置为8568。
程序运行后,即可在LCD显示屏上看到通道0的时域波形和频域波形。
- 使用CCS查看信号波形
在程序运行过程中可使用CCS软件查看存储在DSP端L2SRAM中的时域和频域波形。
加载Symbols信息表
进入app_host、server_dsp1.xe66、load-firmware.sh文件所在目录执行如下命令,运行DSP端程序。
Target# ./load-firmware.sh
驱动默认配置DSP端的电源控制模式为auto-suspend(自动休眠),当DSP端处于休眠状态时,CCS将无法连接DSP端。
请执行如下命令设置电源控制模式为on,禁用auto-suspend模式。
Target# echo "on" > /sys/bus/platform/devices/40800000.dsp/power/control
请执行如下命令禁用错误恢复功能,避免发生错误时系统自动重启DSP端,干扰调试。
Target# echo disabled > /sys/kernel/debug/remoteproc/remoteproc2/recovery
请执行如下命令,运行ARM端程序(以TL7606I模块为例)。
Target# ./app_host 0x01000000 6 10000 /home/root/ 7606
打开CCS,创建仿真配置文件后进入Debug界面,右键点击“Connect Target”连接DSP端,如下图所示。连接后DSP端程序将会暂停运行,请点击
按键恢复运行。
由于程序调试需用到镜像文件中的Symbols信息表,因此请点击“Run -> Load -> Load Symbols...”加载案例bin目录下的server_dsp1.xe66镜像文件导入Symbols信息表。
备注:请确保加载的server_dsp1.xe66文件与当前DSP端运行的是同一个镜像文件,否则可能导致符号地址不一致以及仿真运行错误。
图 18
查看时域波形
点击“View -> Memory Browser”,在弹出界面的搜索栏搜索ch_raw_buffer数组,该数组存放时域数据,搜索结果如下图所示。ch_raw_buffer数组包含8个地址,从左到右分别对应存放通道0至7时域数据的起始地址,例如0x00828EA0为存放通道0时域数据的起始地址。
点击“Tools -> Graph -> Single Time”,如下图所示。
在弹出界面中按照下图内容进行配置,然后点击OK,即可查看AD信号的时域波形。
表 2
Acquisition Buffer Size |
从Start Address开始读取的数据长度 |
Dsp Data Type |
读取的数据类型 |
Start Address |
从Start Addres开始读取数据 |
Display Data Size |
显示的数据长度(即将多少个采样点的数据进行显示,该数值不能大于Acquisition Buffer Size) |
程序已将8通道的时域数据保存到DSP端L2SRAM,如需查看其他通道波形,请按照上述方法打开对应通道地址查看即可。
本次使用TL7606I模块进行测试,在上图中可看到通道0的时域波形,波形的幅值约为6796。从CCS看到的波形值为AD芯片内部寄存器保存的数字量,从AD7606和ADS8568的芯片数据手册得到的换算公式均为:数字量=待测量/量程*32768,则AD信号实际幅值=数字量*量程/32768=6796*5V/32768=1.04V,与信号发生器的1V标称值接近。
查看频域波形
点击“View -> Memory Browser”,在弹出界面的搜索栏搜索ch_fft_buffer数组,该数组存放频域数据,搜索结果如下图所示。ch_fft_buffer数组包含8个地址,从左到右分别对应存放通道0至7频域数据的起始地址,例如0x008292A0为存放通道0频域数据的起始地址。
备注:由于受处理器的性能限制,程序默认只对通道0~5进行FFT处理,因此ch_fft_buffer数组未存放通道6和7频域数据。
点击“Tools -> Graph -> Single Time”,如下图所示。
在弹出界面中按照下图内容进行配置,然后点击OK,即可查看AD信号的频域波形。
表 3
Acquisition Buffer Size |
从Start Address开始读取的数据长度 |
Dsp Data Type |
读取的数据类型 |
Index Increment |
索引增量(即每个采样点数据序号的相差值,由于FFT数据以复数形式存储,只取复数中的实部进行显示,因此设置成2,隔点取值显示) |
Start Address |
从Start Addres开始读取数据 |
Display Data Size |
显示的数据长度(即将多少个采样点的数据进行显示,该数值不能大于Acquisition Buffer Size) |
点击菜单栏放大按钮进行放大查看,点击
打开游标工具,再点击X-Axis可查看到信号存在,如下图所示。
程序已将6通道的频域数据保存到DSP端L2SRAM,如需查看其他通道波形,请按照上述方法打开对应通道地址查看即可。
本次使用TL7606I模块进行测试,在上图中可看到通道0的频域波形在第12个点存在信号。程序命令已设置每6us触发一次TL7606I模块的CONVST/GPIO5[13]引脚进行AD信号采集。
在程序运行过程中使用示波器通过测量CONVST/GPIO5[13]引脚,测得信号实际采集周期为5.720us,即信号实际采样率为174.8KHz。
与设定的6us存在一定误差的原因主要有如下两点:
- 程序使用的GPTimer6定时器的精度存在误差,并受系统延时影响。
- GPIO引脚电平翻转存在约100ns的时延。如选择专用的定时器输出引脚作为触发信号,可降低时延。
根据采集频率计算公式,某点n所表示的采样频率为:Fn=n*(Fs/N)(n>=0),参数解析如下表。
表 4
Fn |
采样频率 |
n |
存在信号的点 |
Fs |
信号采样率 |
N |
信号采样长度 |
可得出实际的采样频率Fn=12*(174.8KHz/512)=4.0969KHz,与信号发生器的4KHz标称值接近。
到这里,案例功能和操作的基本说明,包括硬件连接与案例测试、如何使用CCS查看信号波形部分就介绍到这里,想要查看案例编译和ARM(Host)端、DSP(Slave)端的关键代码,请看下篇文章,感谢关注,欢迎点赞或评论区留言!
AM57x 多核SoC开发板——GPMC的多通道AD采集综合案例手册(上)的更多相关文章
- Mybatis高级:Mybatis注解开发单表操作,Mybatis注解开发多表操作,构建sql语句,综合案例学生管理系统使用接口注解方式优化
知识点梳理 课堂讲义 一.Mybatis注解开发单表操作 *** 1.1 MyBatis的常用注解 之前我们在Mapper映射文件中编写的sql语句已经各种配置,其实是比较麻烦的 而这几年来注解开发越 ...
- SoC开发板设置网口IP为固定IP
vi /etc/network/interfaces 编辑这个文件 #iface eth0 inet dhcp 找到修改这个,前面加# iface eth0 inet static 改为静态分配i ...
- MinnowBoard MAX 硬件开发板
Minnowboard MAX MinnowBoard MAX是一款紧凑型,经济实惠,而且功能强大的开发板为专业人士和制造商.开放式的硬件设计使无尽的定制和集成的潜力.它采用64位英特尔®凌动™E38 ...
- DE0-Nano-SoC开发板诡异的电源电路方案设计分析
这些日子一直在设计自己的Cyclone V SoC开发板,由于我们这种散兵游勇,是断然没有厂家和代理技术支持的,因此只能找各种现成方案参考.其实Cyclone V SoC芯片的外围电路设计不难,无非就 ...
- 基于飞思卡尔i.MX 6Quad Sabrelite开发板的触摸屏调试
1 概述 本次任务是在飞思卡尔i.MX 6Quqd Sabrelite开发板上调试触屏驱动,触屏芯片是Goodix的gt828芯片,触屏接口是I2C. 操作系统:android 4.0.4 ...
- 1-51单片机WIFI学习(开发板介绍)
源码链接都在后面 前面的都是介绍单独的WIFI,没有和单片机结合起来,因为做项目很少会只用WIFI模块.大多数都是WIFI模块作为中转数据的桥梁,单片机负责 数据采集,控制等等,所以自己准备出一套51 ...
- ARM开发板挂载虚拟机 nfs目录
ARM开发板做相关开发,为了调试方便,常把开发板mnt目录挂载到虚拟机nfs共享目录上,这样调试程序时候就不用把程序转到开发板上再运行,方便很多.要挂载nfs共享目录,需要安装必要的组件支持. 1.虚 ...
- 在 S5PV210 的 开发板上 使用 串口 收发信息
参考学习教程:周立功嵌入式Linux开发教程-(上册) 材料:首先 准备一个 安装好 Linux 的 开发板 使用 xshell 工具 连接 开发板 ,winscp 工具 连接 开发板 , 准 ...
- 在 S5PV210 的 开发板上 点亮 一个 LED 灯
参考学习教程:周立功嵌入式Linux开发教程-(上册) 材料:首先 准备一个 安装好 Linux 的 开发板 使用 xshell 工具 连接 开发板 ,winscp 工具 连接 开发板 , 准 ...
随机推荐
- 说出 JDK 1.7 中的三个新特性?
虽然 JDK 1.7 不像 JDK 5 和 8 一样的大版本,但是,还是有很多新的特性, 如 try-with-resource 语句,这样你在使用流或者资源的时候,就不需要手动关 闭,Java 会自 ...
- CSS揭秘之《多重边框》
1.box-shadow还接受第四个参数(称作"扩张半径"), 通过指定正值或负值, 可以让投影面积加大或者减小2.如果我们想要一道实线边框其实也是可以通过box-shadow来模 ...
- 【promise| async/await】代码的控制力
什么样的代码好控制? 结构 + 节奏 --- 什么鬼? 如何控制节奏? 具体例子看看怎么控制节奏?
- Eclipse的视窗和视图概述、Eclipse工作空间的基本配置
Eclipse的视窗和视图概述视窗 每一个基本的窗体被称为视窗 * PackageExplorer 显示项目结构,包,类,及资源 * Outline 显示类的结构,方便查找,识别,修改 * C ...
- web.xml的作用及基本配置
web工程中的web.xml文件有什么作用呢?它是每个web.xml工程都必须的吗? 一个web中完全可以没有web.xml文件,也就是说,web.xml文件并不是web工程必须的.那什么时候需要,什 ...
- 将PHPMailer整合到ThinkPHP 3.2 中实现SMTP发送邮件
本内容转载出处:http://my.oschina.net/BearCatYN/blog/299192 并对以下内容做了一处说明. ThinkPHP没有邮件发送的功能,于是,我就想了想,就将PHPMa ...
- vue构建项目步骤
1.node版本请更新到6.9.X版本以上,不然npm依赖会出问题 2.命令行里运行npm install --global vue-cli 3.npm install --global webpac ...
- python数据类型内置的方法
数据类型的内置方法 在日常生活中不同类型的数据具有不同的功能 eg:表格数据文件具有处理表格的各项功能(透视表 图形化 公式计算) 视频数据文件具有快进 加速等各项功能 ... 1.整型int # 方 ...
- msyql查看版本号、最大连接数、当前连接数等
1.查看版本号 select version(); 2.查看最大连接数 show variables like 'max_connections'; 3.查看当前连接数(如果是root帐号,你能看到所 ...
- 3道常见的vue面试题,你都会了吗?
最近流传各大厂纷纷裁员,导致很多人"被迫"毕业,显然很多人还是想留级,无奈出现在名单中,只能感叹命运不公,不过拿了N+1,也算是很欣慰. 又得去面试了,接下来一起来巩固下vue的3 ...