DSP实验报告 7.docx
《DSP实验报告 7.docx》由会员分享,可在线阅读,更多相关《DSP实验报告 7.docx(13页珍藏版)》请在冰豆网上搜索。
DSP实验报告7
汕头大学实验报告
学院:
工学院系:
电子系专业:
电子信息工程年级:
2008
姓名:
张虎学号:
08141078实验时间:
2011-4-20
实验四
(1)实验目的
1.熟悉CCS开发环境;
2.熟悉DSP54XEVM板的硬件环境;
3.了解步进电机原理;
4.掌握DSP54XI/O寻址方式;
5.掌握DSP54X中断原理;
通过改变I/O总线输出脉冲频率和相位顺序,控制步进电机调速和方向。
6.了解DSP54X同步串口(McBSP)原理;
7.了解音频编、解码芯片TLV320AIC23原理;(详见附录)
8.了解存储芯片NANDFLASH原理;(用于语音数据存储,详见附录)
(2)实验原理
1、步进电机控制实验
用行扫描法,读取键值;向步进电机I/O口地址循环写数据,控制步进电机的正转和反转;利用外部中断服务程序,控制电机停止转动,并能由LCD显示各任务状态。
2、语音录放实验
语音录放原理图
MicrophoneInput
LineInput
控制总线5
HeadphoneOutput
DSP5416
McBSP0
McBSP1
数据总线16
数据存储
NANDFLASH
语音编码、解码
AIC23
McBSP0设置为I2S模式
McBSP1设置为SPI模式CODEAIC23设置为主模式
DSP5416设置为从模式
采样率设置为8KHZ
NANDFLASH为32MB,可存储约半小
时的语音数据(16位)
录音播放不存储数据,用查询的方式读取数据;语音录放须存储数据,用2个buffer,大小各为8KB,录满后,再转存到nandflash(32MB),用中断方式读取数据。
(3)实验内容与基本要求
1、步进电机控制实验
(1)实验内容
1DSP初始化;
2中断控制寄存器初始化;
3中断向量表;
4外部中断1服务程序;
5键盘扫描程序;
6LCD显示程序;
7步进电机控制程序;
(2)基本要求
扫描键盘,读取不同的健值,根据不同的健值启动步进电机正转、反转、加速、减速,能由外部中断使步进电机停止转动。
并能由LCD显示各任务的状态。
2、语音录放实验
(1)实验内容
1.DSP初始化;
2.同步串口0(McBSP0)初始化为I2S模式;
3.同步串口1(McBSP1)初始化为SPI模式;
4.中断控制寄存器初始化(允许McBSP0发送、接收中断);
5.McBSP0发送中断服务程序;
6.McBSP0接收中断服务程序;
7.中断向量表;(详见附录B)
8.NANDFLASH驱动程序;
9.TLV320AIC23初始化为MICIN;
10.TLV320AIC23初始化为LINEIN;
(2)基本要求
通过McBSP1(SPI模式)设置AIC23工作模式,通过McBSP0(I2S模式)控制AIC23编、解码,语音信号可由MIC输入和LINEIN输入,采集的语音数据存储在NANDFLASH上,语音的回放方式可为BYPASS和LOOP_BACK。
(4)实验程序框图
1、步进电机控制实验
主程序
初始化程序
调初始化程序
DSP初始化
外部中断1初始化
读键值并延时(100ms)消抖
LCD初始化、设置LCD显示
是空键
?
Y
N
外部中断1使能
结束
由不同的键值调
不同的子程序
外部中断程序
步进电机程序
关闭外部中断1
设置步进电机转动的循环次数
设置LCD显示
调步进电机驱动库函数
Y
GPIO.0=1?
延时,调整输出脉冲频率
N
Y
N
GPIO.0=0?
循环次数=0?
N
Y
外部中断1使能
结束
结束
注:
GPIO.0与EXINT1管脚相连,用于按键消抖,第一次
按键时,进入中断服务程序,再按键时,须查询GPIO.0
状态.可退出中断服务程序.
2、语音录放实验
读键值并延时(100ms)消抖
是空键
?
Y
N
由不同的键值调
不同的子程序
调初始化程序
主程序
Mcbsp0初始化Mcbsp1初始化
CODEC初始化
LCD初始化、
设置LCD显示
初始化程序
DSP初始化
外部中断1使能
结束
MicIn录音程序
LineIn回放程序
Mcbsp0初始化Mcbsp1初始化
Mcbsp0初始化Mcbsp1初始化
CODEC初始化为MicIn
CODEC初始化为LineIn
接收中断、外部中断使能
调接收数据
库函数
变量初始化,启动CODEC
调发送数据
库函数
N
接收数据=8KB?
标志寄存器=0?
N
Y
:
存储语音数据到
NANDFLASF
Y
结束
容量=32MB?
EXIT1中断程序
清标志寄存器
标志寄存器=0?
设置LCD显示
N
Y
结束
关闭接收中断
结束
注:
1。
语音回放是不存储数据,用查询方式读取数据;
2。
语音录放须存储数据,用2个乒乓Buffer,大
小各为8KB,录满8KB后,再转存到
nandflash(32MB),用中断方式读取数据。
放音程序
接收中断程序
Mcbsp0初始化Mcbsp1初始化
从接收BufferDRR1读数据
读8KB数据到
乒乓Buffer
写数据到发送BufferDXR1
变量初始化,启动CODEC
存储数据到乒乓Buffer
调发送数据
库函数
结束
N
发送数据=8KB?
Y
读8KB数据到
乒乓Buffer
容量=32MB?
Y
N
N
标志寄存器=0?
Y
结束
(5)问题
实验七:
步进电机控制实验
1.简要叙述如何实现用外部中断的按键实现步进电机的停止?
答:
当步进电机进入speedup和speeddown这两种状态的子程序时,置flag=1;第一次按键中断时,由于GPIO.0与EXINT1管脚相连,进入中断服务程序,由于中断程序里用if(flag){···}语句,使得{···}内程序得以执行,再按键时须查询GPIO.0状态可退出中断服务程序,退出前,是flag=0,外部中断使能。
实验八:
语音录放实验
1.如何利用MCBSP构建I2S协议?
答:
voidInit_MCBSP0(void)
{
MCBSP0_SET(MCBSP_SPCR1_SUBADDR,
FIELD_VAL(RINTM,RINTM_SZ,INTM_RDY)|/*spcr1*/
FIELD_VAL(RJUST,RJUST_SZ,RXJUST_RJSE)|/*spcr1*/
FIELD_VAL(CLKSTP,CLKSTP_SZ,0)|
FIELD_VAL(RRST,1,1));//0x2001
MCBSP0_SET(MCBSP_SPCR2_SUBADDR,
FIELD_VAL(FREE,1,1)|/*spcr2-freerunningmodeisenabled*/
FIELD_VAL(SOFT,1,1)|/*spcr2-softmodeisenabled*/
FIELD_VAL(XINTM,XINTM_SZ,INTM_RDY)|/*spcr2*/
FIELD_VAL(XRST,1,1)|/*spcr2-transmittorisenabled*/
FIELD_VAL(GRST,1,1)|/*spcr2*/
FIELD_VAL(FRST,1,1));
MCBSP0_SET(MCBSP_RCR1_SUBADDR,
FIELD_VAL(RWDLEN1,RWDLEN1_SZ,WORD_LENGTH_16)|/*rcr1-N/A*/
FIELD_VAL(RFRLEN1,RFRLEN1_SZ,1));
MCBSP0_SET(MCBSP_RCR2_SUBADDR,
FIELD_VAL(RDATDLY,RDATDLY_SZ,DATA_DELAY0)|/*rcr2-N/A*/
FIELD_VAL(RFIG,1,FRAME_IGNORE)|/*rcr2-N/A*/
FIELD_VAL(RCOMPAND,RCOMPAND_SZ,NO_COMPAND_MSB_1ST)|/*rcr2-N/A*/
FIELD_VAL(RWDLEN2,RWDLEN2_SZ,WORD_LENGTH_32)|/*rcr2-N/A*/
FIELD_VAL(RFRLEN2,RFRLEN2_SZ,0)|/*rcr2-N/A*/
FIELD_VAL(RPHASE,1,SINGLE_PHASE));
MCBSP0_SET(MCBSP_XCR1_SUBADDR,
FIELD_VAL(XWDLEN1,XWDLEN1_SZ,WORD_LENGTH_16)|/*xcr1-16-bitwordsinthefirstphase*/
FIELD_VAL(XFRLEN1,XFRLEN1_SZ,1));
MCBSP0_SET(MCBSP_XCR2_SUBADDR,
FIELD_VAL(XDATDLY,XDATDLY_SZ,DATA_DELAY0)|/*xcr2-delaydataclocksfromframesync:
1forPCM1725,0forAKM4516*/
FIELD_VAL(XFIG,1,FRAME_IGNORE)|/*xcr2-ignoreextraneousframesyncs*/
FIELD_VAL(XCOMPAND,XCOMPAND_SZ,NO_COMPAND_MSB_1ST)|/*xcr2-MSBaligndata(nocompanding)*/
FIELD_VAL(XWDLEN2,XWDLEN2_SZ,WORD_LENGTH_32)|/*xcr2-N/A*/
FIELD_VAL(XFRLEN2,XFRLEN2_SZ,0)|/*xcr2-N/A*/
FIELD_VAL(XPHASE,1,SINGLE_PHASE));/*xcr2-singlephaseframe*/
MCBSP0_SET(MCBSP_SRGR1_SUBADDR,
FIELD_VAL(CLKGDV,CLKGDV_SZ,0xdb/*MMDRV_CLK32F_DIV-1*/)|/*srgr1-CLKGfrequencyisCLKSfrequencydividedbyMMDRV_CLK32F_DIV*/
FIELD_VAL(FWID,FWID_SZ,15));/*srgr1-framesyncpulseis16CLKGperiodslong*/
MCBSP0_SET(MCBSP_SRGR2_SUBADDR,
FIELD_VAL(FPER,FPER_SZ,31)|/*srgr2-frameperiodis32CLKGperiods*/
FIELD_VAL(FSGM,1,FSX_FSG)|/*srgr2-samplerategeneratordrivesFSX(FSG)*/
FIELD_VAL(CLKSM,1,CLK_MODE_CPU)|/*srgr2-CLKGderivedfromCPUclock(notCLKS)*/
FIELD_VAL(CLKSP,1,CLKS_POL_RISING)|/*srgr2-N/A*/
FIELD_VAL(GSYNC,1,GSYNC_OFF));/*srgr2-CLKGisfreerunning(notsynchronized)*/
MCBSP0_SET(MCBSP_MCR1_SUBADDR,
FIELD_VAL(RMCM,1,0));/*mcr1-all128RXchannelsareenabled*/
MCBSP0_SET(MCBSP_MCR2_SUBADDR,
FIELD_VAL(XMCM,XMCM_SZ,0));/*mcr2-all128TXchannelsareenabled*/
MCBSP0_SET(MCBSP_RCERA_SUBADDR,0);/*rcera-N/A*/
MCBSP0_SET(MCBSP_RCERB_SUBADDR,0);/*rcerb-N/A*/
MCBSP0_SET(MCBSP_XCERA_SUBADDR,0);/*xcera-N/A*/
MCBSP0_SET(MCBSP_XCERB_SUBADDR,0);/*xcerb-N/A*/
MCBSP0_SET(MCBSP_PCR_SUBADDR,
FIELD_VAL(CLKRP,1,CLKR_POL_RISING)|/*pcr-N/A*/
FIELD_VAL(CLKXP,1,CLKX_POL_FALLING)|/*pcr-transmitdatasampledonrisingedgeofCLKX*/
FIELD_VAL(FSRP,1,FSYNC_POL_HIGH)|/*pcr-N/A*/
FIELD_VAL(FSXP,1,FSYNC_POL_HIGH)|/*pcr-framesyncpulse(FSX)isactivehigh*/
FIELD_VAL(CLKRM,1,CLK_MODE_EXT)|/*pcr-CLKRisaninputpin*/
//FIELD_VAL(CLKXM,1,CLK_MODE_INT)|/*pcr-CLKXisanoutputpindrivenbyCLKG*/
//FIELD_VAL(FSRM,1,FSYNC_MODE_INT)|/*pcr-FSRisanOUTputpinLFYCODEC_AIC23*/
//FIELD_VAL(FSXM,1,FSYNC_MODE_INT));/*pcr-FSXisanoutputpindrivenbyFSG*/
FIELD_VAL(CLKXM,1,CLK_MODE_EXT)|/*pcr-CLKXisanoutputpindrivenbyCLKG*/
FIELD_VAL(FSRM,1,FSYNC_MODE_EXT)|/*pcr-FSRisanOUTputpinLFYCODEC_AIC23*/
FIELD_VAL(FSXM,1,FSYNC_MODE_EXT));
return;
}