dsp实验基于ccs报告.docx
- 文档编号:3049264
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:37
- 大小:27.38KB
dsp实验基于ccs报告.docx
《dsp实验基于ccs报告.docx》由会员分享,可在线阅读,更多相关《dsp实验基于ccs报告.docx(37页珍藏版)》请在冰豆网上搜索。
dsp实验基于ccs报告
《DSP与嵌入式系统》实验报告
目录2
实验一IO端口实验3
实验二定时器实验4
实验三AD实验5
实验四DA实验6
实验五信号过滤波器实验7
实验一IO端口实验
一、实验目的
1.1了解ICETEK-VC5416-A板在TMS320VC5416DSP在IO空间上的扩展。
1.2了解ICETEK-VC5416-A板上指示灯扩展原理。
1.3学习在C语言中使用扩展的控制寄存器的方法。
二、实验原理
2.1I/O空间的扩展及使用:
C54xDSP的I/O空间被保留用于外部扩展。
由于在程序中访问I/O空间的语句只有in和out指令,所以在扩展时一般将带有控制能的寄存器或分离地址访问的存储单元的地址映射到I/O空间,访问这部分的单元又称I/O端口访问。
例如:
可将控制指示灯组的寄存器或锁存器映射到一个I/O端口地址上;A/D、D/A等专用芯片控制端和状态寄存器也常映射到I/O端口上。
总之,在I/O空间中扩展的设备一般重点用于控制,而使用大片连续存储空间的存储器单元一般映射到数据空间。
ICETEK-VC5416-A板将指示灯、DIP开关、A/D、D/A、异步串行通信接口和WatchDog的控制端等映射在I/O空间。
0001-0001h:
WatchDog控制寄存器
3006-3006h:
A/D转换控制寄存器
1000-1001h:
D/A转换控制寄存器
2000-2007h:
异步串口通信控制寄存器
3002-3002h:
板上指示灯控制寄存器
3003-3003h:
板上DIP拨动开关控制寄存器
ICETEK-VC5416-A实验箱上控制模块也使用I/O端口控制大部分设备:
8001-8001h:
读-键盘扫描值,写-液晶控制寄存器
8002-8002h:
液晶控制寄存器
8003-8004h:
液晶显示数据寄存器
8005-8005h:
发光二极管显示阵列控制寄存器
8006-8006h:
保留
8007-8007h:
发光二极管显示阵列控制寄存器
8008-9FFFh:
保留
在程序中,访问I/O端口的语句较为简单。
对于汇编语言程序,可用PORTR和PORTW指令,例如,从端口0008h读入一个字到变量x的指令为portr8,x,而向端口000Ch输出x变量的值的指令为portw#0Ch,x;在C语言中访问I/O端口则必须首先声明I/O端口的类型,然后才能访问,以下语句仍完成上面汇编语言所完成的功能:
ioportunsignedintport0008;
ioportunsignedintport000C;
x=port0008;
1.2指示灯扩展原理
详见上图,其中7个指示灯是D3-D9;D10在硬件上没做控制扩展。
1.3实验程序流程图
三、实验代码
///////////////////////////////////////////////////
//ExampleForICETEK-VC5416-EDU//
//CTRVersion:
V4//
//Filename:
LED.c//
//Project:
LED.pjt//
//Version:
2.00//
//Writeby:
DanielHawk//
//Company:
RealtimedspCo.Ltd//
////
//AllRightsopened&noOnus2005.06//
//////////////////////////////////////////////////
ioportunsignedintport3002;
#defineLBDSport3002
voidDelay(intnDelay);
voidShiftToLeftAndRight(unsignedintnInit);
main()
{
unsignedintuLED[4]={1,2,4,8};
inti;
for(;;)
{
for(i=0;i<4;i++)
{
LBDS=~uLED[i];
Delay(64);
}
for(i=3;i>=0;i--)
{
LBDS=~uLED[i];
Delay(64);
}
}
}
voidDelay(intnDelay)
{
inti,j,k;
k=0;
for(i=0;i for(j=0;j<1024;j++) k++; } 四、代码分析 //为LED声明IO端口 ioportunsignedintport3002; //LED宏定义 #defineLBDSport3002 //延时和移位子函数声明 voidDelay(intnDelay);//延时调用函数申明 voidShiftToLeftAndRight(unsignedintnInit);//移位主函数申明 main() { unsignedintuLED[4]={1,2,4,8};//控制字,逐位置1: 0001B0010B0100B1000B,分别表示第1,2,3,4盏灯点亮 inti; //3位流水灯循环移位 for(;;) { for(i=0;i<4;i++)//4盏灯正向流水作业点亮 { LBDS=~uLED[i];//正向顺序送控制字 Delay(64);//调用延时函数,每次灯闪后延时的时间长度 } for(i=3;i>=0;i--)//4盏灯反向流水作业点亮 { LBDS=~uLED[i];//反向顺序送控制字 Delay(64);//调用延时函数,每次灯闪后延时的时间长度 } } } //这里nDelay=64,延时总长=64*1024*T(T指系统单脉冲周期) voidDelay(intnDelay) { inti,j,k; k=0; for(i=0;i for(j=0;j<1024;j++) k++; } 五、实验结果 可以看到D3-D6这4盏指示灯循环移位闪烁。 通过实验可知: 映射在IO空间地址上的指示灯寄存器在设置时是低有效的,数据的最低位(0001B)对应指示灯D3,次低位(0010B)对应D4,...依次类推。 实验二定时器实验 一、实验目的 1.1.通过实验熟悉VC5416A的定时器; 1.2.掌握VC5416A定时器的控制方法; 1.3.掌握VC5416A的中断结构和对中断的处理流程; 1.4.学会C语言中断程序设计,以及运用中断程序控制程序流程。 二、实验原理 2.1.通用定时器介绍及其控制方法 片内定时器是一个软件可编程定时器,可以用来产生周期的中断信号。 定时器主要由3个寄存器所组成: 定时器寄存器(TIM)、定时器周期寄存器(PRD)和定时器控制寄存器(TCR)。 这3个寄存器都有映象寄存器,它们在数据存储器中的地址分别为24H、25H和26H。 TIM是一个递减计数器;PRD中存放计数值;TCR中有定时器的控制位和状态位: 15—12保留 11--10softfree 9—6PSC定时器预定标计数器 5TRB定时器重新加载位,用来复位片内定时器 4TSS定时器停止状态位,用于停止或启动定时器 3—0TDDR定时器分频系数 在正常工作情况下,当TIM减到0后,PRD中的时间常数自动地加载到TIM。 复位后,定时器控制寄存器(TCR)的停止状态位TSS=0,定时器启动工作,时钟信号CLKOUT加到预定标计数器PSC。 PSC也是一个递减计数器,每当复位或其减到0后,自动地将定时器分频系数TDDR加载到PSC。 PSC在CLKOUT作用下,作减1计数。 当PSC减到0,产生一个借位信号,令TIM作减1计数。 TIM减到0后,产生定时器中断信号TINT,传送到CPU和定时器输出引TOUT。 定时器中断的周期为: CLKOUT×(TDDR+1)×(PRD+1) 其中,CLKOUT位时钟周期,TDDR和PRD分别为定时器的分频系数和时间常数。 对定时器初始化的步骤如下: ⑴先将TCR中的TSS位置1,关闭定时器。 ⑵加载PRD。 ⑶重新加载TCR(使TDDR初始化;令TSS位=0,以接通CLKOUT;TRB位值1,以使TIM减到0后重新加载定时器时间常数),启动定时器。 -对中断的处理: ⑴设置INTM=1 ⑵将IFR中的TINT位置1,清除尚未处理完的定时器中断。 ⑶将IMR中的TINT位置1,开放定时器中断。 ⑷将ST1中的INTM位请0,开放所有可屏蔽中断。 2.2.TMS320VC5416中断结构 以下是5416的IMR和IFR寄存器的结构,其中包含了可响应的中断: 2.3.中断响应过程 外设事件要引起CPU中断,必须保证: IMR相应位被使能(置1),ST1寄存器中的INTM使能(置0)。 当CPU响应中断时,PC指针指向中断向量表中对应中断的地址,进入中断服务子程序。 中断向量表是DSP存放中断服务程序的一段内存区域,大小为80H。 在中断向量表中,每一个中断占用4个字的空间,一般情况是将一条跳转或延时跳转指令存放于此。 中断向量表的位置是可以改变的,修改PMST寄存器中的中断向量表基地址可以实现这一点。 2.4.中断程序设计 程序中应包含中断向量表,5416默认向量表从程序区FF80地址开始存放。 向量表中每项为4个字,存放一个跳转指令,跳转指令中的地址为相应服务程序入口地址;第一个向量表的首项为复位向量,即CPU复位操作完成后自动进入执行的程序入口;程序中包含相应的中断服务程序,应将其入口地址加入相应中断向量表中。 2.5.实验程序分析 本实验设计的程序是在上一个实验基础上修改得来,由于上一实验控制指示灯闪烁的延时控制是用循环计算方法得到的,延时不精确也不均匀,采用中断方式可以实现指示灯的定时闪烁,时间更加准确。 对于定时器的周期寄存器为计数f423H,分频系数定为15,即1,000,000个CPU时钟计数一次,由于DSP工作在8MHz主频(ICETEK-VC5416-A板上DIP开关U2的CLKMD1-3均为OFF时),正好是125ms中断一次,所以在中断服务程序中计算中断4次时改变指示灯状态,实现指示灯亮0.5秒再灭0.5秒,即每秒闪烁1次。 实验程序的工程中包含了两种源代码,主程序采用C语言编制利于控制,中断向量表在vector.asm汇编语言文件中,利于直观地控制存储区分配。 在工程中只需将它们添加进来即可,编译系统会自动识别分别处理完成整合工作。 实验程序的C语言主程序中包含了内嵌汇编语句,提供一种在需要更直接控制DSP状态的 方法,同样的方法也能提高C语言部分程序的计算效率。 2.6.程序流程图 主程序流程图中断服务程序流程图如下: 3、实验代码 //////////////////////////////////////////////
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- dsp 实验 基于 ccs 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)