[0023] 下面结合附图和实施例对本发明做进一步说明。
[0024] 一种基于ARM的多通道声音信号采集系统,需要实现的基本功能是:
[0025] 1)利用AD模块将4路声音信号进行采集并转换成数字信号,并通过SPI协议,将转换得到的数字信号输入到ARM平台;
[0026] 2)在ARM平台上,利用自带的EDMA功能,实现ping-pong缓存,将来自AD模块的数据存入ping-pong缓存;
[0027] 3)在ARM平台上,将ping-pong缓存中的数据存入SD卡模块,或直接对数据进行处理,实现对声音信号的边采集边处理;
[0028] 4)系统预留出串口接口、以太网接口等通信接口,方便系统与外部的信息交互。
[0029] 本发明硬件功能和软件功能的具体划分如下:
[0030] 硬件功能具体如下:
[0031] 1)声音信号传感器模块将外界的4路声音信号转化成电信号,并输入到前端调理电路,此过程的信号为模拟信号;
[0032] 2)前端调理电路完成对模拟信号的调理,并将调理后的信号输入到AD模块,此过程的信号仍是模拟信号;
[0033] 3)AD模块完成对前端调理电路输出的模拟信号的采集并将其转换成数字信号,输入到ARM平台,此过程的信号为数字信号。
[0034] 4)留出串口接口、以太网接口等硬件接口,方便系统与外界通信。
[0035] 软件功能具体如下:
[0036] 1)在ARM平台上,对McSPI模块进行配置。使用SPI通信协议,读取AD模块传来的数字信号至SPI1的FIFO中;
[0037] 2)在ARM平台上,对EDMA模块进行配置。利用EDMA功能,实现ping-pong缓存,将SPI1的FIFO中的数据存入ping-pong缓存;
[0038] 3)在ARM平台上,ping-pong缓存中的数据存入SD卡模块,或对ping-pong缓存中的数据进行实时处理;
[0039] 4)ARM平台移植有嵌入式Linux操作系统,完成系统资源和任务的统一分配管理。
[0040] 本发明硬件的具体实施方式如下:
[0041] 本发明的系统硬件架构图如图1所示,为了使整个结构看起来清晰简洁,图中表示出了系统的核心硬件架构,一些结构细节并未在图中表示出来。本发明硬件架构核心部分包括ARM平台、AD模块、声音信号传感器模块,另外包括前端调理电路、SDRAM模块、NandFlash模块、SD卡模块、以太网接口、串口接口。声音信号传感器模块包含4个声音传感器探头,产生4路声音信号,此时的信号为模拟信号。前端调理电路位于声音信号传感器和AD模块之间,主要功能是将传感器输出的4路模拟信号进行调理,并将调理后的模拟信号输入到AD模块的4个输入通道。AD模块分别将4路模拟信号进行AD转换得到对应的数字信号,并将4路数字信号按照特定的顺序通过SPI总线传输至ARM平台。ARM平台负责接收AD模块传输过来的数据,将这些数据存储至SD卡模块或直接进行处理。SD卡模块可用于存储系统采集到的声音信号数据。串口接口和以太网接口为系统与外界进行通信的接口,系统可通过串口或以太网来跟外界进行信息交互。例如通过串口,系统可以将声音信号处理的结果输出至外界。NandFlash模块和SDRAM模块分别用于程序数据的存储和程序的运行。本发明的AD模块采用TI公司的ADS1278芯片。本发明的ARM平台使用TI公司的AM335x系列处理器,具体型号推荐使用AM3354。
[0042] 本发明需对AD模块进行配置,主要设置ADS1278的相关引脚。本发明用到了ADS1278的前四组模拟量输入引脚AIN[4:1],需将它们与前端调理电路输出端相连;将ADS1278的MODE0接低电平,MODE1引脚接高电平,使之处于Low-Power工作模式;本发明将FORMAT[2:0]三个引脚接低电平,选择SPI协议输出数据,数据格式为TDM格式;本发明将PWDN[8:5]四个引脚接低电平,PWDN[4:1]四个引脚接高电平,只使用前4个通道;本发明用外接10MHz的晶振作为ADS1278的时钟源,CLKDIV引脚接高电平,此时采样频率为19531Hz;本发明将ADS1278的SCLK引脚、DOUT1引脚和DRDY/FSYNC引脚分别与AM335x的SPI1_CLK引脚、SPI1_MISO引脚和SPI1_CS0引脚相连。另需注意的是,由于DRDY/FSYNC引脚的下降沿表示数据可读,而AM335x的SPI1_CS0引脚是上升沿触发EDMA传输,故在DRDY/FSYNC引脚和AM335x的SPI1_CS0引脚间需接一个反相器。
[0043] 本发明软件功能的具体实施方式如下:
[0044] 本发明的系统功能流程图如图2所示。本发明的AD模块通过SPI协议,将AD转换得到的声音信号数据传输给ARM平台SPI1的FIFO中。ARM平台通过EDMA将SPI1的FIFO的数据传输至ping-pong缓存,并将ping-pong缓存中的数据存储至SD卡或进行实时处理。本发明软件的核心部分是AM335x的SPI1模块和EDMA模块的配置,以及利用EDMA模块实现ping-pong缓存,使之配合AD模块进行数据采集。在本发明中,数字信号的传输使用SPI协议,AM335x作为SPI通信的主机,AD模块作为从机。故配置AM335x的相关寄存器使之工作在主机只接收模式(Master Receive-Only mode),将SPI时钟配置为5MHz,此时时钟信号由AM335x提供。本发明需配置相关寄存器使能SPI1的通道0作为数据传输通道,配置POL=0和PHA=0,使SPI工作在模式0。由于本发明的AD模块的精度是24位,故配置SPI字长为24位,且使用SPI1自带的长度为64Byte的FIFO作为数据接收缓存。
[0045] 本发明需要通过配置AM335x的相关寄存器来设置EDMA模块。配置相关寄存器,设置EDMA数据传输为AB同步模式,使能EDMA的通道20作为数据传输通道,并设置触发方式为外部事件触发,将通道20与SPI1_CS0引脚的上升沿信号触发事件绑定。本发明利用EDMA的参数项的链接机制,使用EDMA的两个参数项来实现ping-pong缓存。具体做法是,在内存中申请一块ping缓存和一块相同大小的pong缓存(分配的内存类型为int型,即每个存储单位为32位),申请两个参数项(假定为参数项A和参数项B)。参数项A、B的数据源地址相同,均设置为SPI1的FIFO地址,参数项A、B的目的地址分别为ping缓存地址和pong缓存地址,参数项A的LINK字段设为参数项B的地址,参数项B的LINK字段设为参数项A的地址,两参数项其它内容相同。本发明需对EDMA的三维数据传输中的相关参数进行设置,设置ACNT=3,BCNT=4,即每个通道的数据位一组(Array),每次采样的数据为一帧(Frame)。至于CCNT的设置,则可以依据实际希望CPU每此处理多少数据以及实际的采样频率(FS)而定,例如希望每次采集K秒的数据给CPU处理,则CCNT=FS×K。若ACNT、BCNT、CCNT确定了,则待申请的ping/pong缓存的大小也随之确定,其大小等于ACNT×BCNT×CCNT个字节。以K=0.2为例,且已知FS=
19531Hz,则CCNT=19531×0.2≈3906。此时申请的ping-pong缓存大小等于3×4×3906=
46872字节。以上配置涉及的寄存器,均可查询TI公司官方的AM335x芯片手册,限于篇幅,本说明书对此部分内容不再赘述。
[0046] 本发明软件功能的具体实施有以下4点需注意:
[0047] 1)本发明建议将数据采集相关的程序专门写成内核驱动模块,将数据存入SD卡模块和将数据进行实时处理这两部分相关的程序写成应用程序,这样系统软件结构层次会更清晰明朗;
[0048] 2)上述将EDMA的通道20和SPI1_CS0引脚的上升沿信号绑定,作为EDMA的触发信号,需要配置AM335x中与EDMA模块的Crossbar相关的寄存器;
[0049] 3)由于SPI字长设置为24位(3字节),因此存入ping-pong缓存的每个AD值长度为3字节。而AM335x的字长为32位(4字节),又申请的ping-pong缓存的最小存储单元是4字节。所以每个AD值存储在了ping-pong缓存存储单元中的低3字节,高字节内容未知。
[0050] 故需要根据每个AD值的符号位,先将ping-pong缓存中的数据进行处理,将存储在低3字节的数据转换成32位格式数据,然后才能使用ping-pong缓存中的数据;
[0051] 4)上述将ping-pong缓存的数据存储至SD卡或者进行实时处理,具体涉及到的程序需根据实际情况而定。如可以将ping-pong缓存的数据以wav文件格式存储至SD卡,或者直接对ping-pong缓存的数据进行滤波处理。