南邮大四课程设计_第1页
南邮大四课程设计_第2页
南邮大四课程设计_第3页
南邮大四课程设计_第4页
南邮大四课程设计_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一、emif 接口上的i/o接口扩展一实验原理1tms320vc5509dsp 的emif 接口:存储器扩展接口(emif)是dsp 扩展片外资源的主要接口,它提供了一组控制信号和地址、数据线,可以扩展各类存储器和寄存器映射的外设。-icetek-vc5509-a 评估板在emif 接口上除了扩展了片外sdram 外,还扩展了指示灯、dip 开关和d/a 设备。具体扩展地址如下:400800-400802h: d/a 转换控制寄存器400000-400000h: 板上dip 开关控制寄存器400001-400001h: 板上指示灯控制寄存器-与icetek-vc5509-a 评估板连接的ice

2、tek-ctr 显示控制模块也使用扩展空间控制主要设备:602800-602800h: 读-键盘扫描值,写-液晶控制寄存器600801-600801h: 液晶辅助控制寄存器602801h 、600802h: 液晶显示数据寄存器602802-602802h: 发光二极管显示阵列控制寄存器2指示灯扩展原理3实验程序流程图: 二实验步骤1实验准备:关闭实验箱上扩展模块和信号源电源开关。2设置code composer studio 2.21 在硬件仿真(emulator)方式下运行。3启动code composer studio 2.21:选择菜单debugreset cpu。4打开工程文件:工程文

3、件为:c:icetek-vc5509-edulablab0301-ledled.pjt。打开源程序led.c。5编译、下载程序。6运行程序,观察结果。7退出ccs:三部分程序代码/ 定义指示灯寄存器地址和寄存器类型#define lbds (*(unsigned int *)0x400001)/ 子程序接口void delay(unsigned int ndelay);/ 延时子程序int i;main()unsigned int uled4=1,2,4,8;/ 控制字,逐位置1: 0001b 0010b 0100b 1000bclk_init();/ 初始化dsp运行时钟sdram_init

4、();/ 初始化emif接口while ( 1 )for ( i=0;i<4;i+ )lbds=uledi;/ 正向顺序送控制字delay(256);/ 延时for ( i=3;i>=0;i- )lbds=uledi;/ 反向顺序送控制字delay(32);/ 延时 【延时256->32】四实验结果映射在扩展存储器空间地址上的指示灯寄存器在设置时是低4位有效的,数据的最低位对应指示灯d1,次低位对应d2,.依次类推。led指示灯由d1d2d3d4d3d2d1循环依次点亮。五实验体会了解icetek-vc5509-a 板在tms320vc5509dsp 外部扩展存储空间上的扩展

5、。了解icetek-vc5509-a 板上指示灯扩展原理。学习在c 语言中使用扩展的控制寄存器的方法。二、定时器的使用一实验原理1通用定时器介绍及其控制方法tms320vc5509a 内部有两个20 位通用定时器(gp):*每个通用定时器包括:-一个16 位的减计数的计数器tim;-一个16 位的定时器周期寄存器prd;-一个16 位的定时器控制寄存器tcr;-一个16 位的定时器预定标寄存器pscr;*pscr 寄存器说明:15 10 9 6 5 4 3 0reserved psc reserved tddrpsc: 4 位的预定标值,与tim 共同组成20 位的定时计数器.tddr: 预定

6、标周期寄存器(在需要时重装入psc 的值)tcr 寄存器说明2中断响应过程外设事件要引起cpu 中断,必须保证:ier 中相应使能位被使能,ifr 相应中断也被使能。在软件中,当设置好相应中断标志后,开中断,进入等待中断发生的状态;外设(如定时器)中断发生时,首先跳转到相应中断高级的服务程序中(如:定时器1 会引起tint 中断),程序在进行服务操作之后,应将本外设的中断标志位清除以便能继续中断,然后返回。3中断程序设计:-程序中应包含中断向量表,vc5509a 默认向量表从程序区0 地址开始存放,根据ipvd 和ipvh 的值确定向量表的实际地址。-注意观察程序中intr_init()函数的

7、定义部分,其中ipvd 和ipvh 的值都为0x0d0;同时观察配置文件icetek-vc5509-a.cmd 中的vect 段描述中o=0x0d000。-向量表中每项为8 个字,存放一个跳转指令,跳转指令中的地址为相应服务程序入口地址。第一个向量表的首项为复位向量,即cpu 复位操作完成后自动进入执行的程序入口。-服务程序在服务操作完成后,清除相应中断标志,返回,完成一次中断服务。4实验程序流程图:二实验步骤1实验准备:连接实验设备:关闭实验箱上扩展模块和信号源电源开关。2设置code composer studio 2.21 在硬件仿真(emulator)方式下运行:3启动code com

8、poser studio 2.21:选择菜单debugreset cpu。4打开工程文件:打开菜单“project”的“open”项;选择c:icetek-vc5509-edulablab0303-timer 目录中的“timer.pjt”。在项目浏览器中,双击main.c,激活main.c 文件。打开icetek-vc5509-a.cmd,对照vector.asm 源程序学习中断向量表的写法。5编译、下载程序。6运行程序,观察结果。7改变timer_init()函数里*prd0 = 0x0ffff 为 “=0x0fff ”;重复步骤5,6 观察实验现象。8退出ccs三部分程序代码/ 定义指示

9、灯寄存器地址和寄存器类型#define lbds (*(unsigned int *)0x400001)void intr_init( void );void timer_init(void);unsigned int uled4=1,2,4,8;int i=0;int ncount;main()ncount=0;clk_init();sdram_init();lbds=0;intr_init();timer_init();while ( 1 )void interrupt timer()ncount+; ncount%=256;if ( ncount=0 )lbds=uled(i+)%4;v

10、oid intr_init( void )ivpd=0xd0;ivph=0xd0;ier0=0x10;dbier0 =0x10;ifr0=0xffff;asm(" bclr intm");void timer_init(void) ioport unsigned int *tim0; ioport unsigned int *prd0; ioport unsigned int *tcr0; ioport unsigned int *prsc0; tim0 = (unsigned int *)0x1000;prd0 = (unsigned int *)0x1001;tcr0

11、= (unsigned int *)0x1002;prsc0 = (unsigned int *)0x1003; *tcr0 = 0x04f0; *tim0 = 0; *prd0 = 0x0ffff;/从0x0fff改为0x0ffff,现象:循环变慢 *prsc0 = 2; *tcr0 = 0x00e0;四实验结果led指示灯d1在定时器的定时中断中按照设计定时闪烁。五实验体会通过实验熟悉vc5509a 的定时器;掌握vc5509a 定时器的控制方法;掌握vc5509a 的中断结构和对中断的处理流程;学会c 语言中断程序设计,以及运用中断程序控制程序流程。三、中断的使用一实验原理1中断及中断处

12、理过程:中断简介:中断是一种由硬件或软件驱动的信号,dsp 在接到此信号时,将当前程序悬挂起来,转去执行另外一个任务,这个任务我们称为中断服务程序(isr)。tms320c55x (c55x) dsp可支持32 个isr,可由硬件或软件触发。所有的c55x 中断,可以分成可屏蔽中断和不可屏蔽中断两种,软件中断是不可屏蔽的。dsp 处理中断的步骤:接收中断请求。请求由软件或硬件发出。响应中断请求。对于可屏蔽中断,需要满足若干条件,才发生响应;而对于不可屏蔽中断,则立即响应。准备执行中断服务程序。-完成当前正在执行的指令;将进入流水线但还未解码的指令清除。-自动保存若干寄存器的值到数据堆栈和系统堆

13、栈。-取得用户定义的中断向量表中当前中断向量,中断向量指向中断服务程序入口。执行中断服务程序。中断服务程序包含中断返回指令,这样返回时可以出栈以前保存的关键寄存器数据,从而恢复中断服务程序执行前的现场。中断向量表:中断向量表的地址可以由用户指定。外中断:tms320c5509 可以响应int0-int4 五个外中断。2icetek-ctr 板的键盘接口:显示/控制模块icetek-ctr 通过接口p8 连接小键盘,接收小键盘传送的扫描码,并在每个扫描码结束后保存,同时向dsp 的int2 发送中断信号;当dsp 读键盘时将扫描码送到数据总线上。小键盘上每次按下一个键将产生2 个扫描码、2 次中

14、断。3程序编制:由一个不含中断处理程序的工程通过改写加入中断处理程序部分大致需要如下操作(假设使用int2):编制中断服务程序:可以用c 语言程序实现,编写单独的一个函数xint,此函数使用interrupt 修饰,没有参数和返回值。构造中断向量表:可以用汇编语言构造,编写一个汇编语言模块程序vector.asm,在程序头上声明段名为“.vectors”;定义外部标号_xint,由于汇编语言要使用c 语言程序中定义的标号xint,需要在这个标号前加底线;在中断向量表该中断对应位置(int2)写汇编语言语句跳转语句。修改连接命令文件:在memory 小节中开辟单独的地址段用以存放中断向量表;在s

15、ections 小节中指定.vectors 段到前步开设的内存段中。主程序中进行初始化设置:定位中断向量表,使能中断,清中断等。4实验程序流程图:二实验步骤1实验准备:1. 连接实验设备:连接实验箱附带的键盘的ps2 插头到icetek-ctr 的“键盘接口”p8。将icetek-ctr 板的供电电源开关拨动到“开”的位置。开关位置请参见第二部分、第一章、五、“扩展模块电源开关及其指示灯”。2设置code composer studio 2.21 在硬件仿真(emulator)方式下运行:3启动code composer studio 2.21:选择菜单debugreset cpu。4打开工程

16、文件:工程目录:c:icetek-vc5509-edulablab0304-xintxint.pjt。开始初始化:dsp 时钟、emif、icetek-ctr、gpio、初始化中断控制寄存器等待中断产生改变指示灯状态中断服务开始中断服务结束浏览main.c 文件的内容,理解各语句作用。打开icetek-vc5509-a.cmd。5编译、下载程序。6运行程序,观察结果:运行程序,按一下小键盘上任意一个键,注意观察icetek-ctr 板上指示灯闪烁的情况。7观察中断函数的执行:选择“debug”菜单中“halt”暂停运行程序,在xint 程序中的语句上加软件断点,重新运行程序(选择“debug”

17、菜单中“run”),观察何时程序停留在断点上。8退出ccs。三部分程序代码void initmcbsp();void intr_init( void );void time_init(void);int ncount;main()ncount=0;clk_init();sdram_init();intr_init();initctr();initmcbsp();ctrgr=2;/ 使能iowhile ( 1 )void initmcbsp()/ iopin: mcbsp1.fsx s15 /spcr2.xrst_=0,pcr.xioen=1,pcr.fsxm=1,pcr.fsxp=0/1spc

18、r2_1&=0x0fffe;pcr1|=0x2800;void interrupt xint()ncount+; ncount%=2;if ( ncount=0 )pcr1=8;void intr_init( void )ivpd=0x80;ivph=0x80;ier0=8;dbier0=8;ifr0=0xffff;asm(" bclr intm");四实验结果通过实验可以发现,每次按下键盘均会发生两次中断,当按下键不放时会产生连续的中断;只有在外中断发生时,xint 函数才会被执行。五实验体会1通过实验熟悉vc5509a 的中断响应过程。2学会c 语言中断程序设计

19、,以及运用中断程序控制程序流程。四、步进电机控制一实验原理1emif 接口:tms320c5509dsp 的扩展存储器接口(emif)用来与大多数外围设备进行连接,典型应用如连接片外扩展存储器等。这一接口提供地址连线、数据连线和一组控制线。icetek-vc5509-a将这些扩展线引到了板上的扩展插座上供扩展使用。2步进电机是由dsp 通用i/o 管脚输出直接控制。步进电机的起动频率大于500pps(拍每秒),空载运行频率大于900pps。5509a 的通用i/o 口s22 控制电机的转动频率,s14 控制转动方向。3控制的方法是使用dsp 通用定时器设置s22 以一定的频率改变高低状态,输出

20、方波,设置s14 为高电平则顺时针转动,低电平为逆时针转动。4实验程序流程图: 二实验步骤1实验准备:连接实验设备。连接实验箱附带的键盘的ps2 插头到icetek-ctr 的“键盘接口”p8。将icetek-ctr 板的供电电源开关拨动到“开”的位置。2设置code composer studio 2.21 在硬件仿真(emulator)方式下运行:3启动code composer studio 2.21:选择菜单debugreset cpu。4打开工程文件:工程目录:c:icetek-vc5509-edulablab0407-samotorsamotor.pjt。5编译并下载程序。6运行程

21、序,观察结果。电机转动时按下icetek-ctr 板上连接的小键盘中“4”和“6” 键,控制电机转动方向。用“+”和“-”键可微调速度。7停止程序运行并退出。8退出ccs。三部分程序代码void intr_init( void );void time_init(void);int ncount,nstep,naddstep;unsigned int utimprd0;unsigned int pwm28= 0x86,0x87,0x83,0x8b,0x89,0x8d,0x8c,0x8e ;main()int send;unsigned char dbscancode,tkey;ncount=0;

22、 nstep=1;send=1,naddstep=1;utimprd0=0x1002;clk_init();sdram_init();initctr();ctrlr=0x0c2;time_init();intr_init();doif ( ncount>16 )ncount=0;dbscancode=getkey();/ scan for keyboard inputtkey=ctrclkey;/ clear keyboard scan bufferif ( dbscancode!=0 && dbscancode!=0x0ff )switch(dbscancode)cas

23、e scancode_enter: / exit programsend=0;break;case scancode_4: / motor turn forwardnaddstep=1;break;case scancode_6: / motor turn backwardnaddstep=-1;break;case scancode_minus: / motor speed downutimprd0+=0x800;if(utimprd0>=0x8000)utimprd0=0x8002;asm( " bset intm");time_init();asm("

24、 bclr intm");break;case scancode_plus: / motor speed uputimprd0-=0x800;if(utimprd0<=0x1000)utimprd0=0x1002;asm( " bset intm");time_init();asm(" bclr intm");break;while(send);exit(0);void interrupt timer()ctrlr=pwmnstep;nstep+=naddstep;if ( nstep<0 )nstep=7;else if ( ns

25、tep>7 )nstep=0;ncount+; void intr_init( void )ivpd=0x80;ivph=0x80;ier0=0x10;dbier0 =0x10;ifr0=0xffff;asm(" bclr intm");void time_init(void) tim0 = (unsigned int *)0x1000; prd0 = (unsigned int *)0x1001; tcr0 = (unsigned int *)0x1002; prsc0 = (unsigned int *)0x1003; *tcr0 = 0x04f0; *tim0

26、= 0x0; *prd0 = utimprd0; *prsc0 = 2; *tcr0 = 0x00e0;四实验结果可以看到显示/控制模块上的电机指针在转动,使用“4”和“6”键可控制其转动方向;使用“+”和“-”键可以控制其转动速度。五实验体会通过实验学习使用 5509dsp 的扩展i/o 端口控制外围设备信息的方法,掌握使用5509dsp通用计时器的控制原理及中断服务程序的编程方法;了解步进电机的控制方法。五、多路信号混频一实验原理1模数转换工作过程:-模数转换模块接到启动转换信号后,按照设置进行相应通道的数据采样转换。-经过一个采样时间的延迟后,将采样结果放入ad 数据寄存器中保存。-等待

27、下一个启动信号。2模数转换的程序控制:模数转换相对于计算机来说是一个较为缓慢的过程。一般采用中断方式启动转换或保存结果,这样在cpu 忙于其他工作时可以少占用处理时间。设计转换程序应首先考虑处理过程如何与模数转换的时间相匹配,根据实际需要选择适当的触发转换的手段,也要能及时地保存结果。由于tms320vc5509dsp 片内的a/d 转换精度是10 位的,转换结果(16 位)的最高位(第15位)表示转换值是否有效(0 有效),第14-12 位表示转换的通道号,低10 位为转换数值,所以在保留时应注意取出结果的低10 位,再根据高4 位进行相应保存。4混频波形产生:将接收到的两路ad 采集信号进

28、行相加,并对结果的幅度进行限制,从而产生混合后的输出波形。实验中采用了同相位混频方法,也可修改程序完成异相混频法。5源程序及注释:本实验程序在主循环中对ad 进行连续采样,每次采样首先设置ad 转换控制寄存器(adcctl),发送转换通道号和启动命令,然后循环等待转换结果,最后将结果保存。由于需要进行实时混频,所以交替转换通道0 和通道1(icetek-vc5509-edu 实验箱上adcin2 和adcin3)。二实验步骤1实验准备:连接实验设备。准备信号源进行ad 输入。取出2 根实验箱附带的信号线。用1 根信号线连接实验箱底板上信号源i 模块的“波形输出”和“a/d 输入”模块的“adc

29、in2”插座。这样,信号源i 的输出波形即可送到icetek-vc5509-a板的ad 输入通道0。用1 根信号线连接实验箱底板上信号源ii 模块的“波形输出”和“a/d 输入”模块的“adcin3”插座。这样,信号源ii 的输出波形即可送到icetek-vc5509-a 板的ad 输入通道1。设置信号源i:-调整拨动开关“频率选择”拨到“100hz1khz”档。-将“频率微调”顺时针调到头(最大)。-调整拨动开关“波形选择”拨到“正弦波”档。-将“幅值微调”顺时针调到头(最大)。设置信号源ii:-调整拨动开关“频率选择”拨到“10hz100hz”档。-将“频率微调”顺时针调到头(最大)。-调

30、整拨动开关“波形选择”拨到“正弦波”档。-将“幅值微调”顺时针调到头(最大)。将两个信号源的电源开关拨到“开”的位置。2设置code composer studio 2.21 在硬件仿真(emulator)方式下运行:3启动code composer studio 2.21:选择菜单debugreset cpu。4打开工程文件:工程文件为:c:icetek-vc5509-edulablab0603-mixerad.pjt。5编译、下载程序,选择菜单debug->go main,使程序运行到main 函数入口位置。6设置软件断点和观察窗口:-打开源程序main.c,在有注释“在此加软件断点

31、”的行上加软件断点。-选择菜单view->graph->time/frequency进行如下设置:-选择菜单view->graph->time/frequency进行如下设置:-选择菜单view->graph->time/frequency进行如下设置:7运行程序观察结果:按“f5”键运行到断点,注意观察窗口“ad0”和“ad1”中的输入波形,同时分析“nmixing”窗口中混频合成的波形与输入波形的关系。8观察动态效果:选择菜单debug->animate,运行程序,同时改变信号源输入的波形、频率参数,观察动态效果。三部分程序代码void inita

32、dc();void wait( unsigned int cycles );void enableapll( );unsigned int nadc0256,nadc1256,nmixing256;main()int i;unsigned int uwork; enableapll();sdram_init();initctr();initadc(); pll_init(144);while ( 1 )for ( i=0;i<256;i+ )adcctl=0x8000;/ 启动ad转换,通道0douwork=adcdata; while ( uwork&0x8000 );nadc

33、0i=uwork&0x0fff;adcctl=0x9000;/ 启动ad转换,通道1douwork=adcdata; while ( uwork&0x8000 );nadc1i=uwork&0x0fff;uwork=(nadc0i+nadc1i);/ 混频uwork>>=1;/ 限幅,混频后仍然产生12位数据/uwork=(nadc0i+nadc1i*3);/uwork>>=2;nmixingi=uwork;/ 在此加软件断点void initadc()adcclkctl=0x23; / 4mhz adclkadcclkdiv=0x4f00;vo

34、id wait( unsigned int cycles ) int i; for ( i = 0 ; i < cycles ; i+ ) 四实验结果五实验体会掌握a/d 转换的基本过程和程序处理过程;学习通过对采样值进行计算产生混频波形。六、异步串口通信一. 实验原理1icetek-vc5509-a 板异步串口设计。在板上加上16c550、max232 和驱动电路部分即可。驱动电路主要完成将输出的0-3.3v 电平转换成异步串口的工作电平,转换电平的工作由max232 芯片完成,但由于它是5v 器件所以它同dsp 间的信号线必须有电平转换,此板采用的是74lvc245。2串行通信接口设

35、置。内部生成的串行时钟由系统时钟sysclk 频率和波特率选择寄存器决定。串行通信接口使用16 位波特率选择寄存器,数据传输的速度可以被编程为65000 多种不同的方式。不同通信模式下的串行通信接口异步波特率由下列方法决定:-brr=165535 时的串行通信接口异步波特率:串行通信接口异步波特率=sysclk/( brr+1)*8。其中,brr=sysclk/(sci 异步波特率*8)-1;-brr=0 时的串行通信接口异步波特率:串行通信接口异步波特率=sysclk/16。这里brr 等于波特率选择寄存器的16 位值。3实验程序流程图:二. 实验步骤1实验准备:连接实验设备。连接串口接线:

36、注意连接前需要将实验箱和计算机的电源关闭。用随实验箱附带的串口线(两端均为9 孔“d”形插头)连接计算机com1 或com2 插座和icetek-vc5509-a 板上标准rs-232 插座。2设置code composer studio 2.21 在硬件仿真(emulator)方式下运行:3启动code composer studio 2.21:选择菜单debugreset cpu。4打开工程文件:工程目录: c:icetek-vc5509-edulablab0308-uart5编译、下载程序。6打开串口调试助手:c:icetek-vc5509-edulablab0308-uart 目录中的

37、程序“串口调试助手v2.0b.exe”;设置“串口调试助手”的串行端口为实际连接的计算机com 端口,设置波特率为9600,设置传输方式为8 位、无校验、1 个停止位。7运行程序观察结果:运行程序后,切换窗口到“串口调试助手”;在“串口调试助手”的接收窗口中可看到dsp通过sci 发送来的“hello pc!,over|”字样;在“发送的字符/数据”栏中输入一些要发送到dsp 的字符串,以“.”字符结尾;然后单击“手动发送”按钮;dsp 在接收到pc 机的信息后会自动进行回答。8结束程序运行,退出ccs。三部分程序代码void tmcr_reset( void );void clk_init(

38、 void );void emif_init(void);void wait(int nwait);char cstring17= "hello pc!,over|" ,creceive,cbuffer17,canswer16="oh,you say"int breceive,nlen;main()unsigned int uwork;int i,k;breceive=0; tmcr_reset(); clk_init(); emif_init(); lcr = 0x80; dll = 0x18; dlm = 0x00; lcr = 0x03; fcr

39、= 0x01;mcr = 0x20;ier = 0x00; for(;) if ( breceive=0 )for ( i=0;i<16;i+ )do uwork=lsr; while ( uwork&0x040 != 0x040 );thr=cstringi;wait(128);elsefor ( i=0;i<10;i+ )do uwork=lsr; while ( uwork&0x040 != 0x040 );thr=cansweri;wait(128);do uwork=lsr; while ( uwork&0x040 != 0x040 );thr=&

40、#39;"'for ( i=0;i<nlen;i+ )do uwork=lsr; while ( uwork&0x040 != 0x040 );thr=cbufferi;wait(128);do uwork=lsr; while ( uwork&0x040 != 0x040 );thr='"'wait(128);for ( i=9;i<16;i+ )do uwork=lsr; while ( uwork&0x040 != 0x040 );thr=cstringi;wait(128);k=0; breceive=0;

41、while ( 1 )douwork=lsr; while ( (uwork&1)=0 );creceive=rbr;cbufferk=creceive&0x0ff; if ( creceive='.' )cbufferk+1='0'nlen=k+1;breceive=1;break;k+; k%=16; void emif_init(void) ioport unsigned int *ce21 =(unsigned int *)0x809; *ce21 = 0x1fff;void clk_init( void ) ioport unsigne

42、d int *clkmd; clkmd=(unsigned int *)0x1c00; *clkmd = 0x21f3;void tmcr_reset( void ) ioport unsigned int *tmcr_mgs3=(unsigned int *)0x07fe; ioport unsigned int *tmcr_mm =(unsigned int *)0x07ff; *tmcr_mgs3 =0x510; *tmcr_mm =0x000;void wait(int nwait)int i,j,k=0;for ( i=0;i<nwait;i+ )for ( j=0;j<

43、64;j+ )k+;四. 实验结果通过 dsp 传送到pc 机上的信息,可以看出:串口正确工作。五. 实验体会了解icetek-vc5509-a 评估板上扩展标准rs-232 串行通信接口的原理和方法。学会对串行通信芯片的配置编程。学习设计异步通信程序。七. 综合设计1音乐产生一.实验要求概述 通过实验学习使用 5509dsp 的扩展端口控制外围设备信息的方法,掌握使用5509dsp 通用计时器的控制原理及中断服务程序的编程方法;了解蜂鸣器发声原理和音乐发生方法。二实验原理1emif 接口:tms320c5509dsp 的扩展存储器接口(emif)用来与大多数外围设备进行连接,典型应用如连接片

44、外扩展存储器等。这一接口提供地址连线、数据连线和一组控制线。icetek-vc5509-a将这些扩展线引到了板上的扩展插座上供扩展使用。2蜂鸣器由dsp 通用i/o 管脚输出控制,可将此管脚上的频率输出转换成声音输出。5509a的通用i/o 口s13 控制蜂鸣器的输出频率。控制的方法是使用dsp 通用定时器设置s13 以一定的频率改变高低状态,输出方波。对于通用定时器周期寄存器的设置,计数值为所需频率计数值的二分之一。音乐的频率(c 调):c d e f g a b c1 2 3 4 5 6 7 1c: 264, 297, 330,352, 396, 440,495, 5283蜂鸣器的连接:由

45、于选用的蜂鸣器所需电流较小,所以采用将dsp 通用i/o 引脚直接驱动的方式。4实验程序流程图:三. 部分程序代码#include "myapp.h"#include "icetek-vc5509-edu.h"#include "scancode.h"/ :- define timer 0 's registers -/ ioport unsigned int *tim0; ioport unsigned int *prd0; ioport unsigned int *tcr0; ioport unsigned int *pr

46、sc0; / :- end of define -/ :- define timer 1 's registers -/ ioport unsigned int *tim1; ioport unsigned int *prd1; ioport unsigned int *tcr1; ioport unsigned int *prsc1; / :- end of define -/声明timer1相关的寄存器void initmcbsp();main()int nmusiccount;unsigned char dbscancode;int nwork; clk_init();sdram

47、_init();initctr();initmcbsp(); ctrgr=8;/ buzze=1 打开蜂鸣器, 见icetek-ctr的全局控制寄存器描述 / 设置合适的音长和音高 for ( nwork=0;nwork<nmusicnumber;nwork+ ) musicnwork0*=10; musicnwork1*=3; musicnwork1/=12; / 设置dx0管脚为通用输出管脚以驱动蜂鸣器/ spcr0&=0x0fffeffff;/ /xrst=0/ pcr0|=0x2000;/ rioen=1 initinterrupt();time_init(); nmus

48、iccount=0; while ( 1 ) nmusiccount+;nmusiccount%=nmusicnumber;if ( musicnmusiccount0=0 )/*tcr0&=0x0fffffcff;/ 静音*tcr1&=0x0fffffcff;/ 静音else/*prd0=musicnmusiccount0;/ 切换音符/*tcr0=0xe0;*prd1=musicnmusiccount0;/ 切换音符*tcr1=0xe0;dbscancode=getkey();if ( dbscancode=scancode_enter )break;四实验体会通过实验学习

49、使用 5509dsp 的扩展端口控制外围设备信息的方法,掌握使用5509dsp 通用计时器的控制原理及中断服务程序的编程方法;了解了运用发光二极管阵列显示字母的程序。实验的主要问题集中在通过用计时器中断中取得延时,改变显示内容。这主要考验了我们对定时器的灵活运用和对不同程序的调和,叠加,配合的使用上。这次实验为期3个星期,虽然在这之间给我们带来了很多没有遇到过的困难,但是幸运的是在老师的精心指导和我们自己的不懈努力下还是完成了实验任务。同时,也巩固了我们对dsp器件的使用,提高了我们的设计,运用和动手能力,使我们受益匪浅。八. 综合设计2发光二级管阵列显示姓名一.实验要求概述 通过实验学习使用

50、 5509a dsp 的扩展端口控制外围设备的方法,了解发光二极管阵列的控制编程方法。利用发光二极管阵列显示姓名的汉语拼音。为了控制时间间隔的准确性,要求采用定时器中断的方式进行调控。二实验原理1emif 接口:tms320c5509dsp 的扩展存储器接口(emif)用来与大多数外围设备进行连接,典型应用如连接片外扩展存储器等。这一接口提供地址连线、数据连线和一组控制线。icetek-vc5509-a将这些扩展线引到了板上的扩展插座上供扩展使用。2发光二极管显示阵列的显示是由扩展端口控制,扩展在emif 接口的两个寄存器提供具体控制。原理图如下:3显示原理:dsp 须将显示的图形按列的顺序存储起来(8×8 点阵,8 个字节,高位在下方,低位在上方),然后定时刷新控制显示。具体方法是,将以下控制字按先后顺序、每两个为一组发送到端口0x602802,发送完毕后,隔不太长的时间(以人眼观察不闪烁的时间间隔)再发送一遍。由于位值为“0”时点亮,所以需要将显示的数据取反。0x01,第8 列数据取反,0x02,第7 列数据取反,0x04,第6 列数据取反,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论