《南邮课程设计ccs音乐产生》由会员分享,可在线阅读,更多相关《南邮课程设计ccs音乐产生(14页珍藏版)》请在金锄头文库上搜索。
1、通信与信息工程学院20 14 /20 15 学年 第 1 学期课程设计 实验报告模 块 名 称 CCS 专 业 通信工程 学 生 班 级 学 生 学 号 学 生 姓 名 指 导 教 师 设计题目音乐产生任务要求参照实验Lab0405,利用ICETEK-VC5509-EDU 实验箱提供的外围设备,产生 一段音乐并输出,定时器使用Timer2 。实验设备及软件计算机, ICETEK-VC5509-EDU 实验箱 (ICETEK-VC5509-A 系统板+相关连线及电源),同组人员学号及姓名参考文献数字信号处理 DSP 课程设计报告内容报告内容一实验目的一实验目的1、通过实验学习使用 5509DSP
2、 的扩展端口控制外围设备信息的方法 2、掌握使用5509DSP 通用计时器的控制原理及中断服务程序的编程方法 3、了解蜂鸣器发声原理和音乐发生方法 二实验原理二实验原理1 1EMIFEMIF 接口接口 TMS320C5509DSP 的扩展存储器接口(EMIF)用来与大多数外围设备进行接, 典型应用如连接片外扩展存储器等。这一接口提供地址连线、数据连线和一组 控制线ICETEK-VC5509-A将这些扩展线引到了板上的扩展插座上供扩展使用。2 2蜂鸣器蜂鸣器 蜂鸣器由DSP 通用I/O 管脚输出控制,可将此管脚上的频率输出转换成声 音输出。5509A的通用I/O 口S13 控制蜂鸣器的输出频率。
3、 控制的方法是使用DSP 通用定时器设置S13 以一定的频率改变高低状态, 输出方波。对于通用定时器周期寄存器的设置,计数值为所需频率计数值的二 分之一。 音乐的频率(C 调): C D E F G A B C 1 2 3 4 5 6 7 1 C: 264,297,330,352,396,440,495,5283 3蜂鸣器的连接蜂鸣器的连接 由于选用的蜂鸣器所需电流较小,所以采用将DSP 通用I/O 引脚直接驱动 的方式。4 4定时器原理定时器原理 1.通用定时器介绍及其控制方法: TMS320VC5509A 内部有两个20 位通用定时器(GP):*每个通用定时器包括: -一个16 位的减计数
4、的计数器TIM; -一个16 位的定时器周期寄存器PRD; -一个16 位的定时器控制寄存器TCR; -一个16 位的定时器预定标寄存器PSCR; *PSCR 寄存器说明:PSC: 4 位的预定标值,与TIM 共同组成20 位的定时计数器. TDDR: 预定标周期寄存器(在需要时重装入PSC 的值) TCR 寄存器说明 1)计数寄存器(TIMERxTIM)(其中,x=0,1,2,下同) 32 位计数寄存器(TIMH:TIM)中,TIM 为计数寄存器低16 位,TIMH 为计数寄 存器高16 位。每一个定时器时钟周期(TDDRH:TDDR+1)/ SYSCLKOUT,TIM 减 1,其中,(TD
5、DRH:TDDR)是定时器预定标分频值。当(TIMH:TIM)减到0 时, (TIMH:TIM)重装定时器周期值(PRDH: PRD),同时产生定时器中断TINT。 2)周期寄存器(TIMERxPRD) 32 位周期寄存器(PRDH:PRD)中,PRD 为周期寄存器低16 位,PRDH 为周期寄 存器高16 位。当(TIMH:TIM)减到0 时,在下一个定时器输入时钟周期开始时, (TIMH:TIM)将重装(PRDH:PRD)的周期值;或者当定时器控制寄存器(TCR) 的TRB 置位时,(PRDH:PRD)的周期值也装入(TIMH:TIM)。 3)定时器分频寄存器(TDDRH:TDDR) 16
6、 位分频寄存器(TDDRH:TDDR)中,TDDR 为分频寄存器低8 位,TDDRH 为分 频寄存器高8 位。每过一个定时器时钟周期,定时器计数器寄存器 (TIMH:TIM)减2.当预定标器计数器(PSCH:PSC)减到0,一个系统时钟周期后, (TDDRH:TDDR)的值重装(PSCH:PSC),同时(TIMH:TIM)减1。无论何时,用 软件置定时器重装位(TRB)为1,(TDDRH:TDDR)重装(PSCH:PSC)。 4)预定标计数器低位及高位寄存器(TIMERxTPR,TIMERxTPRH) 定时器预定标计数器低位及高位寄存器结构及位域定义见图2.3 及图2.4,它由 16位分频寄存
7、器(TDDRH:TDDR)和16 位预定标器计数器(PSCH:PSC) 组合而 成。 5)控制寄存器(TIMERxTCR) TCR 是一个16 位的寄存器。 6)定时器预定标计数器(PSCH:PSC) 16 位预定标计数器(PSCH:PSC)中,PSC 为预定标计数器低8 位,PSCH 为预 定标计数器高8 位。对每一个系统时钟周期,(PSCH:PSC)减1,(PSCH:PSC) 从分频值减到0 为一个定时器时钟周期,减到0 时(TDDRH:TDDR)装入 (PSCH:PSC),且(TIMH:TIM)减1。无论何时,用软件置定时器重装位 (TRB)为1,也重装(PSCH:PSC)。 该计数器可
8、读,但不可直接设置,复位 值为 3.定时器5.5. 中断及中断处理过程中断及中断处理过程 中断简介: 中断是一种由硬件或软件驱动的信号,DSP 在接到此信号时,将当前程序 悬挂起来,转去执行另外一个任务,这个任务我们称为中断服务程序(ISR)。 TMS320C55x (C55x) DSP可支持32 个ISR,可由硬件或软件触发。所有的C55x 中断,可以分成可屏蔽中断和不可屏蔽中断两种,软件中断是不可屏蔽的。 DSP 处理中断的步骤: 接收中断请求。请求由软件或硬件发出。 响应中断请求。对于可屏蔽中断,需要满足若干条件,才发生响应;而对于 不可屏蔽中断,则立即响应。 准备执行中断服务程序。 -
9、完成当前正在执行的指令;将进入流水线但还未解码的指令清除。 -自动保存若干寄存器的值到数据堆栈和系统堆栈。 -取得用户定义的中断向量表中当前中断向量,中断向量指向中断服务程序入口。执行中断服务程序。中断服务程序包含中断返回指令,这样返回时可以出栈 以前保存的关键寄存器数据,从而恢复中断服务程序执行前的现场。 中断向量表: 中断向量表的构成请参见TI 的文档sprs295d.pdf 之3.11。 中断向量表的地址可以由用户指定。5实验程序流程图实验程序流程图:中断流程图主程序流程图中断服务程序开 始利用定时器计数并根据预定的数据切换音符改变S13 引脚的状态(通过不同的 定时器周期设置产生不同频
10、率)中断服务程序结束开始初始化:DSP 时钟、EMIF、ICETEK- CTR选通蜂鸣器四实验步骤:四实验步骤:1实验准备: 连接实验设备:请参看本书第三部分、第一章、二。 连接实验箱附带的键盘的PS2 插头到ICETEK-CTR 的“键盘接口”P8。 将ICETEK-CTR 板的供电电源开关拨动到“开”的位置。开关位置请参见第二 部分、第一章、五、“扩展模块电源开关及其指示灯”。 2设置Code Composer Studio 2.21 在硬件仿真(Emulator)方式下运行:请参 看本书第三部分、第一章、四、2。 3启动Code Composer Studio 2.21:请参看本书第三部
11、分、第一章、五、2。 选择菜单DebugReset CPU。 4打开工程文件:工程目录:C:ICETEK-VC5509-EDULabLab0405- Speakerspeaker.pjt。浏览main.c 文件的内容,理解各语句作用。 5编译并下载程序。 6运行程序观察结果。 7将语句“Delay(musicnMusicCount1);”改为 “Delay(musicnMusicCount1/2);”,重复步骤5-6,体会音乐的节奏快了 一倍。 8结束程序运行,退出CCS。按小键盘上“Enter”键,停止程序。退出,请参 看本书第三部分、第一章、六 五、程序五、程序1 1、主程序、主程序 #i
12、nclude “myapp.h“ #include “ICETEK-VC5509-EDU.h“ #include “scancode.h“ / :- Define Timer 0 s Registers -/ioport unsigned int *tim0;/ 16 位的减计数的计数器TIM ioport unsigned int *prd0;/ 16 位的定时器周期寄存器PRDioport unsigned int *tcr0;/ 16 位的定时器控制寄存器TCRioport unsigned int *prsc0;/16 位的定时器预定标寄存器PSCR 设置 McBSP 控制寄存器(S1
13、3 输出)初始化中断向量和定时器初始化音长,音高等参数键盘输入控制/ :- End of Define -/ int nMusicCount; int nCount; unsigned char dbScanCode; void InitMcBSP(); main() int nWork;CLK_init();产生频率为9MHZ的脉冲 SDRAM_init(); InitCTR(); InitMcBSP();CTRGR=8;/ BUZZE=1 打开蜂鸣器, 见ICETEK-CTR的全局控制寄存器描述 / 设置合适的音长和音高for ( nWork=0;nWorknMusicNumber;nWo
14、rk+ )musicnWork0*=10;musicnWork1*=3;musicnWork1/=12; / 设置DX0管脚为通用输出管脚以驱动蜂鸣器 / SPCR0/ /XRST=0 / PCR0|=0x2000;/ RIOEN=1InitInterrupt(); TIME_init();nMusicCount=0;nCount=0;while ( 1 )dbScanCode=GetKey();if ( dbScanCode=SCANCODE_Enter ) break; CloseCTR();/关闭ICETEK-CTR上各设备exit(0); void InitInterrupt(void
15、) / 设置中断控制寄存器 IVPD=0x80; IVPH=0x80; IER0=0x10; DBIER0 =0x10; IFR0=0xffff; asm(“ BCLR INTM“); void interrupt Timer()/中断响应函数 if ( nCount=0 )nMusicCount+; nMusicCount%=nMusicNumber; if ( musicnMusicCount0=0 ) *tcr0/ 静音 else *prd0=musicnMusicCount0;/ 切换音符 *tcr0=0xe0; nCount+; nCount%=musicnMusicCount1*3;PCR0=0x20; /输出位 void InitMcBSP()/定义多通道缓冲串口程序 / IOPin: McBSP1.FSX S15 /SPCR2.XRST_=0,PCR.XIOEN=1,PCR.FSXM=1,PCR.FSXP=0/1 SPCR2_1 PCR1|=0x2800; void TIME_init(void) /初始化定时器 tim0 = (unsigned int *)0