DSP实习报告数字和声处理.docx
《DSP实习报告数字和声处理.docx》由会员分享,可在线阅读,更多相关《DSP实习报告数字和声处理.docx(19页珍藏版)》请在冰豆网上搜索。
DSP实习报告数字和声处理
DSP实习报告
——数字和声处理
目录
一实习题目2
二实习目的与任务2
三实习内容2
3.1设计总体框图2
3.2工作方式3
3.3程序流程3
四设计原理4
4.1综述4
4.2硬件连接4
4.3模块原理5
4.4程序设计11
五调试过程及报告12
六实习心得12
七程序清单12
八参考文献13
一实习题目
语音信号采集处理与系统设计-数字和声处理
二实习目的与任务
掌握CCS3.3的使用步骤,熟悉的编写DSP程序。
能够针对相关硬件配置,调试程序,并且能够发现问题,并解决问题。
了解和声算法,掌握TLV320AIC23B的应用,掌握TLV320AIC23B与DSP之间的配置。
三实习内容
基于TMS320C5502DSP语音信号采集处理与系统设计
3.1设计总体框图
图3-1总体框图
如图3-1所示总体框图如下。
数字和声处理主要分为两个部分①TMS320VC5502,该部分为核心模块,作为DSP芯片,它能够进行数据处理。
②TLV320AIC23,该部分为音频处理模块,并进行A/DD/A转换。
3.2工作方式
当MIC输入模拟音频信号时,要经过AD转换,将数字信号数据传至输入缓冲区RAM再传至CPU,输出数字信号数据传至输出缓冲区RAM,经DA转换,功率放大,将将模拟信号还原输出。
3.3程序流程
首先对DSP初始化,再对AIC23,然后判断Testcomm=0xAA07音频和声,Testcomm=0xAA0A试听,对音频信息进行采集和合成。
如图3-2所示。
图3-2程序流程
四设计原理
4.1综述
C55x系列DSP片级支持库提供了用于配置片上外设的C语言函数。
设计数字和声处理需要用到EMIF,I2C,MCBSP模块。
EMIF用于连接同步动态SDRAM接口,I2C模块用于控制端口,MCBSP是双向数据传输端口用于发送接收帧同步数据。
首先AIC23将模拟输入信号A/D转换,将该数据送至MCBSP进行数据处理,然后MCBSP将数据回传给AIC23.。
最后AIC23将数据D/A转换输出,用耳机即可听到输出信号。
4.2硬件连接
图4-1emif与sdram接口
图4-1MCBSP,I2C和AIC23接口(a)
图4-1DSP和AIC23接口(b)
4.3模块原理
(1)EMIF:
EMIF控制DSP和外部存储器之间的所有数据传输,为存储器提供无缝接口,在实习中用到的是32bitSDRAM接口。
EMIF与SDRRAM的接口
图4-2EMIF模块与使用32-bit内存芯片的64-MbitSDRRAM的接口
寄存器配置见表4-1
SDRAM容量
及排列方式
使用芯片
数量
配置位
占用CE
空间数
边界/行地址
列地址
SDACCSDSIZESDWID
SDRAM
EMIF
SDRAM
EMIF
64M位
2Mx32位
1
1 0 1
2
BA[1:
0和[10:
0]
A[14:
13]
SDA10和A[11:
2]
A[7:
0]
A[9:
2]
表4-1SDRAM的引脚映射和寄存器配置表
SDRAM接口信号功能描述见表4-2
Emif信号
SDRAM信号
SDRAM功能描述
/SDCAS
/CAS
列地址选通输入指令
/SDWE
/WE
写选通和输入指令
/BEx
DQMx
数据输出模式
/CEx
nCs
芯片选择和使能指令
SDCKE
CKE
CKE时钟使能
ECLKOUT1
CLK
SDRAM输入时钟
表4-2SDRAM接口信号的功能描述
SDRAM接口专用信号包括SDRAM行选通信号SDRAS、列选通信号SDCAS和写使能信号SDWE,SDA10信号在ACTV命令时作为行地址信号,在读写操作时作为预加电使能信号,在DCAB命令下为高,保持模式下为高阻态。
SDRAM操作时需要一系列命令来支持其运行,下面给出命令列表4-3
命令
说明
DCAB
关闭所有边界
ACTV
打开所选择边界和所选择行
READ
输入起始列地址开始读操作
WRT
输入起始列地址开始写操作
MRS
配置SDRAM模式寄存器
REFR
自动循环刷新地址
NOP
不进行操作
表4-3
(2)MCBSP:
多通道缓冲串口,提供传输数据的双缓冲和接收数据的三缓冲,允许不间断的同步串行数据的数据流传输。
MCBSP来接AIC23b的数据传输口,有三种模式,选择DSP模式,可以无缝连接,TMS320C5509作为从机,AIC23b作为主机。
图4-3MCBSP内部框图
CPU和DMA控制器通过外设总线与MCBSP进行通信。
当发送数据时,CPU和DMA将数据写入数据发送寄存器(DXR1,DXR2),接着复制到发送移位寄存器(XSR1,XSR2),通过发送移位寄存器输出至DX引脚。
同样,当接收数据时,DR引脚上接收到的数据先移位到接收移位寄存器(RSR1,RSR2),接着复制到接收缓冲寄存器(RBR1,RBR2)中,RBR再将数据复制到数据接收寄存器(DRR1,DRR2)中,由CPU或DMA读取数据。
这样就可以同时进行内部和外部的数据采集。
引脚描述:
见表4-3MCBSP引脚
引脚
状态
使用方式
CLKR
I/O/Z
接收时钟/输入时钟采样率发生器/通用I/O口
CLKX
I/O/Z
发送时钟/输入时钟采样率发生器/通用I/O口
CLKS
I
输入时钟采样率发生器/通用输入口
DR
I
接收串口数据/通用输入口
DX
O/Z
发送串口数据/通用输出口
FSR
I/O/Z
接收帧同步信号/控制采样率发生器同步(GSYNC=1)
FSX
I/O/Z
发送帧同步信号/通用I/O口
表4-3MCBSP引脚
单数据相,接受数据长度为16位,每相2个数据,没有压缩数据MSB优先。
主要用到的寄存器
名称
SPCR1
串口控制寄存器1
SPCR2
串口控制寄存器2
RCR1
收控制寄存器1
RCR2
收控制寄存器2
XCR1
发控制寄存器1
XCR2
发控制寄存器2
PCR
引脚控制寄存器
表4-4主要用到的寄存器
(3)I2C:
I2C总线串口可工作在100-400Kbps波特率之间,7位地址模式,该芯片包含主发送/接收和副发送/接收模式。
I2C总线只包含SDA数据线和SCL时钟线,I2C总线作为主设备,AIC23作为从设备。
I2C模块作为一个外设模块受到外设时钟控制寄存器PCLKR0管理,I2C模块时钟频率可按如下公式计算:
I2C模块时钟频率=SYSCLKOUT/I2CPSC+1。
I2C模块分频器配置必须在I2C模块处于复位状态时进行即CMDR寄存器中IRS位置0。
I2C总线上被配置为主设备,它始终控制SCL始终总线。
I2C总线之信号要遵循下面的规定
①SDA线上的数据位,数据流向控制位,地址位,应答位必须在时钟的高电平持续周期时,SCL时钟总线低电平时进行数据线电平改变。
②地址和数据都是从高位到低位发送字节。
SCL时钟总线处于高电平时SDA数据总线将产生一个下降沿,表示开始;若产生一个上升沿表示停止。
图4-4SCL高低电平时钟控制逻辑
TMS320VC55X系列DSP开始及停止条件的产生方法可以归纳如下:
①总线处于空闲状态,若CMDR寄存器之MST位以及STT位皆为1。
开始条件产生于设置为主机模式之后。
②总线处于忙状态,判断CSTR寄存器之BB位,若1,则MST位及STP同时为1时将会产生一个停止条件。
若主机处于非重复模式时CMDR寄存器之RM位等于0时CCNT计数器将产生一个停止条件。
若主机处于重复模式时CMDR寄存器之RM位等于1,满足以上停止条件时,将会在下一个应答位后产生一个停止条件。
I2C总线定义为两种地址格式:
7位地址与10位地址,CMDR寄存器中XA位为0时则7位地址模式,若为1时则为10位地址。
(4)AIC23:
声音通过MIC,或者Linein方式进入AIC23的模拟通道,打开AD转换,设置好采样速率,将数据通过AIC23的数字通道送到5502的MCBSP0,CPU可以对数据进行处理,再将其转存到SDARAM的输出缓存中,会将其送到MCBSP0的发送端口,传输到AIC23的数字通道,通过DA转换将数据输出到扬声器中。
AIC23原理图如图4-5。
图4-5
(1)AIC23引脚介绍
LINEIN/RKLINEIN:
左/右声道LINEIN输入。
MICINE:
麦克风输入接口。
MIBIAS:
提供麦克风偏置电压3/4AVDD。
DIN:
数字音频接口DAC方向数据输入。
DOUT:
数字音频接口ADC方向数据输入。
BCLK:
数字音频接口(bit时钟),当AIC23为从设备时此时钟是由DSP产生的,当AIC23为主设备时此时钟是由AIC23产生的。
LRCIN:
数字音频接口DAC方向的桢信号。
LRCOUT:
数字音频接口ADCDAC方向的桢信号。
SDIN:
配置数据输入
SCLK:
配置时钟
MCLK-芯片时钟输入(12.288M、11.2896M、18.432M、16.9344M)
VMID-半压输入,通常由一个10U和一个0.1U电容并联接地
MODE-芯片工作模式选择,Master或者Slave
CS-片选信号(配置时有效)
CLKOUT-时钟输出,可以为MCLK或者MCLK/2
(2)DSP与AIC23的连接
DSP与AIC23数字音频口的连接
AIC23的数字音频接口支持I2S模式(一种通用的音频格式),也支持DSPMode模式
(专为与TI的DSP连接模式)。
本次实习用到的是DSPMode。
DSP模式时序如图4-6所示。
图4-6
在DSP模式下,DSP的McBSP帧信号的宽度可以为一个位长。
采样率为48k,MCBSP串口时钟=48*32=1536K。
音频采样率设置:
采样率为48k,基过采样率为250Fs,CLKIN=CLKOUT=MCLK,时钟模式设为普通模式。
AIC23模拟音频的控制:
关掉侧音。
DAC使能,ADC输入选择为音频输入。
AIC23数字音频通路的控制:
使能ADC高通滤波。
AIC23耳机/左右通路音频调节。
4.4程序设计
(1)首先初始化CSL库,判断TESTCOMMAND的状态是试听还是和声。
(2)初始化锁相环得到CPU输出频率。
通过调用PLL_setFreq()来完成。
(3)初始化EMIF:
先对所有CE空间发送DCAB指令配置为SDRAM。
发送8位REFR刷新指令。
再对所有空间发送指令MRS配置为SDRAM。
SDRAM不需与外设共享,所有外部接口共享+SDRAM接口+同步存储器时钟。
(4)打开MCBSP端口1,得到句柄值。
通过使用先前定义的结构体配置MCBSP端口1。
对MCBSP配置即设置串口控制寄存器,设置接收帧格式(单数据相,接受数据长度为16位,每相2个数据),设置发送帧格式,设置引脚控制寄存器。
(5)I2C初始化:
设置7位地址,自地址为0,时钟输出频率为60MHz,8位接收和初始化,数字所相块关闭,配置I2C设置函数。
(6)AIC23初始化:
配置其控制寄存器,写初始化函数。
(7)在主函数中通过用switch()函数,来选择工作状态,即试听,和声。
(8)关于chorus()和声函数:
首先确定缓冲区大小,最大长度*380+360;在缓冲区里写初始化位置,初始化缓冲区时数据缓冲置0。
从话筒里采样数据;判断MCBSPrrdy接收寄存器句柄是否为1,为1即从MCBSP0里读数据,读两次数据是因为要给两路音频数据和声,把输入数据给数据缓冲区。
判断写数据的位置是否小于8ms延时,小于则继续读地址,否则读地址减延时,把数据缓冲区里的数据赋值给输出,输出为多次输入数据的累加。
然后控制输出的溢出。
再判断
xrdy寄存器句柄是否为1,为1向MCBSP里写数据,写两次数据是因为要给两路音频数据和声,判断写地址数据是否大于缓冲区大小,若大于则置0。
五调试过程及报告
1、了解实验箱电路原理图,然后再安好跳线帽,以及仿真器。
2、学会使用CCS3.3软件进行编译,将程序下载到实验箱中。
3、播放电脑中音频文件,并将音频线输出至排针J7,耳机线接至J5。
4、分析音频效果是否达到预期设计目标,和声效果。
六实习心得
时间飞逝,实习不知不觉过去了。
在两周实习中感触很深,刚开始的时候,对CCS3.3平台不是很熟悉,有些操作也不太正确,还有对DSP编写程序的方法不太了解。
通过向老师、同学询问相关知识,对此有一些深刻的理解。
在实习中通过动手练习,使我对SEED5502实验箱的使用更加熟练。
对于本次实习,虽然对DSP方面有了一些初步的了解,但是对于编程方面的应用,还是要进一步的学习,尤其是算法方面的编程。
在实习中还有很多知识没有理解透彻,我还要再仔细地学习那些还没有掌握的知识,多思考,勤动手。
对硬件方面还是得多实践,多看书。
对软件编程方面,多查手册,了解各寄存器每一位的作用。
还有要对C语言编程方面加强练习,以及对电路基础知识的复习,对软硬件都要很熟悉。
此次实习,我深刻体验到DSP技术的独特之处。
经过两周的实习,我感觉关于DSP方面还有很多要学习的方面,比如DMA,I2C,HPI等,今后要更加努力的学习DSP技术,不断地向老师和同学学习。
最后再次感谢老师辛勤的指导。
七程序清单
//Dec5502_code.c
1.#include
2.#include
3.#include
4.#include
5.#include
6.#include
7.#include
8.#include
9.#include"5502_FLASH.h"
10.#include"E2PROM_Function.h"
11.#include"CODEC.h"
12.#include"extaddr.h"
13.#include"type.h"
14.#undefCODEC_ADDR
15.#defineCODEC_ADDR0x1A
16.#defineAUDIOTRY0xAA0A
17.#defineAUDIOCOPY0xAA07
18.#defineTESTCOMMAND2
19.Uint16TestCommand=0;
20.#pragmaDATA_SECTION(DataBuffer,".Audio_data");
21.shortDataBuffer[9320]={0};
22.Uint16DataTempLeft=0;
23.Uint16DataTempRight=0;
24.shortdepth=8000;
25.shortdelay=2000;
26.shortfreq=31;
27.shortdecay=31;
28.shortwriteposition;
29.shortreadposition;
30.unsignedinti;
31.floatfreque[]={
32.0.2,0.3,0.4,0.5,
33.0.6,0.7,0.8,0.9,
34.1.0,1.1,1.2,1.3,
35.1.4,1.5,1.6,1.7,
36.1.8,2.0,2.2,2.4,
37.2.6,2.8,3.0,3.2,
38.3.4,3.6,3.8,4.0,
39.4.2,4.4,4.6,25};
40.
41.intccbuffer[]={
42.1,2,3,4,5,6,7,8,
43.9,10,11,12,13,14,
44.15,16,17,18,19,20,
45.21,22,23,24,25,26,
46.27,28,29,30,31,32};
47.MCBSP_HandlehMcbsp;
48.voidchorus(int,int);
49.voidmain(void)
50.{
51.CSL_init();
52.#ifTESTCOMMAND==2
53.TestCommand=AUDIOCOPY;//和声0xAA07
54.#endif
55.#ifTESTCOMMAND==1
56.TestCommand=AUDIOTRY;//试听0xAA0A
57.#endif
58.PLL_setFreq(1,0xC,0,1,3,3,0);
59.Emif_Config();
60.hMcbsp=MCBSP_open(MCBSP_PORT1,MCBSP_OPEN_RESET);
61.Mcbsp_Config(hMcbsp);
62.I2C_cofig();
63.inti_AIC();
64.while
(1)
65.{switch(TestCommand)
66.{
67.caseAUDIOCOPY:
68.chorus(31,31);
69.break;
70.caseAUDIOTRY:
71.while(!
MCBSP_rrdy(hMcbsp)){};
72.DataTempLeft=MCBSP_read16(hMcbsp);
73.while(!
MCBSP_rrdy(hMcbsp)){};
74.DataTempRight=MCBSP_read16(hMcbsp);
75.while(!
MCBSP_xrdy(hMcbsp)){};
76.MCBSP_write16(hMcbsp,DataTempLeft);
77.while(!
MCBSP_xrdy(hMcbsp)){};
78.MCBSP_write16(hMcbsp,DataTempRight);
79.break;
80.default:
81.break;
82.}
83.}
84.}
85.voidchorus(intfreq,intdecay)
86.{
87.shortinput;
88.shortoutput;
89.intBufferSize=ccbuffer[decay]*380+360;
90.BufferSize-=1;
91.writeposition=BufferSize;
92.for(i=0;i93.DataBuffer[i]=0;
94.}
95.while
(1){
96.while(!
MCBSP_rrdy(hMcbsp)){};
97.input=MCBSP_read16(hMcbsp);
98.while(!
MCBSP_rrdy(hMcbsp)){};
99.input=MCBSP_read16(hMcbsp);
100.DataBuffer[writeposition]=input;
101.if(writeposition102.readposition++;
103.else
104.readposition=(writeposition-delay);
105.output=DataBuffer[readposition];
106.output+=input;
107.if(output<=-32767){
108.output=-32767;
109.}
110.if(output>=32767){
111.output=32767;
112.}
113.while(!
MCBSP_xrdy(hMcbsp)){};
114.MCBSP_write16(hMcbsp,output);
115.while(!
MCBSP_xrdy(hMcbsp)){};
116.MCBSP_write16(hMcbsp,output);
117.writeposition++;
118.if(writeposition>=BufferSize)
119.writeposition=0;
120.}
121.}
其他模块程序见文件夹software。
八参考文献
[1]董胜,刘柏生《DSP技术及应用》北京大学出版社,2013.3
[2]TI.TMS320C55xChipSupportLibraryAPIReferenceGuide.20004