DSP的C语言实验指导书下.docx
- 文档编号:2362807
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:30
- 大小:909.94KB
DSP的C语言实验指导书下.docx
《DSP的C语言实验指导书下.docx》由会员分享,可在线阅读,更多相关《DSP的C语言实验指导书下.docx(30页珍藏版)》请在冰豆网上搜索。
DSP的C语言实验指导书下
实验七DSP/BIOS实验
一试验目的
1.熟悉DSP的DSP/BIOS平台
2.学习如何将实验四的定时器实验在DSP/BIOS中加以实现
3.体会DSP的DSP/BIOS开发平台的便利性
二实验设备
1.具有USB接口的PC机一台
2.USB仿真器一台
3.ARM/DSP/FPGA实验箱一台
三实验原理
本实验是在学生已经掌握GPIO基本用法、定时器基本用法、McBSP基本以及中断的基本实现过程之后,进一步学习如何利用CCS自带的DSP/BIOS开发平台来开发自己的应用程序,让学生体会使用DSP/BIOS开发平台,并与前面的实验开发相比较,体会DSP/BIOS带来的便利性,
DSP/BIOS是TI公司基于软件开发面临的新的要求,退出的一种新型的实时操作系统,运行于该系统之上的应用程序在开发时间、软件维护以及升级等方面都有了极大的提高,而且该系统是免费的嵌在CCS软件中供用户使用的。
DSP/BIOS是TI的众多工程师基于多年的DSP研发经验,为开发者量身定制的一个优秀的软件平台,这为众多的中小用户使用DSP打开了方便之门。
DSP/BIOS实际上是一个可调用的系统模块API集合,主要包含以下几个模块:
●LOG:
在开发的时候通常要使用printf()来打印某些特定的信息,但是printf()在运行的时候非常耗时,更不用谈什么实时性。
因为DSP需要对显示的数据进行分析,整理成合适的显示格式,并调用输出显示模块,所以在一个实时性要求很高的应用中,对printf()的调用可能会使系统根本无法满足是是要求。
在DSP/BIOS中引入了一个相应的函数——LOG_printf(),该函数是LOG对象的一个方法(或调用函数)。
LOG对象本质上是一个32bit的整形数,它用高低个16bit分别代表要显示的两个数据。
它的出现,有效的缩短了printf()打印信息的时间,这使得系统的实时性得到很大的提高。
●STS:
对于一个软件进行优化时,通常会用到profile的功能,但是在实时运行的DSP环境中使用profile等效于加入了多个程序断点。
由于现在的DSP通常具有很深的流水线结构来保证DSP的高运算能力,程序断点的加入却会该流水线结构,因此也就破坏了真正的实时运行环境。
同时profile还必须调用输出模块向主机传递时间信息,因此profile的情况下真正的实时运行环境是没有办法得到保护的。
DSP/BIOS针对这种情况引入了一个统计模块STS。
STS对象只有4个数据Previous、Count、Total和Max。
调用的方法也只有4个,即STS_add()、STS_set()、STS_delta()以及STS_reset()。
如果要对某段程序进行分析时,只需在其前后调用STS_set()和STS_delta()就可以了。
●任务调度(HWI/SWI/TSK):
一个操作系统的核心永远都是任务的调度。
在DSP/BIOS中任务的调度是通过HWI/SWI和TSK三个模块来实现的。
这三个模块分别对英语不同的调度方法。
HWI即硬件中断。
在DSP/BIOS中硬件中断主要负责从外部设备中读写数据。
由于硬件中断直接与硬件打交道,所以对应的中断服务程序ISR应该尽可能的短小精悍。
需要注意的时HWI并不引起任务调度,因此在ISR的入口和出口成对的调用_HWI_enter()和_HWI_exit()这两个宏是必须的。
HWI在处理完数据的输入和输出后调用SWI_post()来调度相应的软件中断,SWI来完成数据处理工作。
SWI任务是抢断式的,即高优先级的任务可以抢断低优先级的任务。
但是SWI任务是不可阻塞的。
●同步(SEM/ATM/QUE/MBX):
多人物系统中多个任务之间的协调同步工作可以通过多种方法来实现。
常用的方法有信号量、原子量、队列和邮箱等。
在DSP/BIOS中对这种方法的支持分别通过SEM、ATM、QUE和MBX来实现。
由于这些方法的使用与一般的操作系统完全一样,这里就不再赘述了。
●通讯(PIP/SIO/HST):
一个系统如何从外部设备中取得数据,向外部设备输出数据,如何在两个任务之间进行数据正常交换是多样灵活的。
但是这种多样性也给软件的维护升级以及模块化工作带来了许多不理因素。
因此在保持多样性的同时,保持接口的一致性对于一个软件来说是非常有帮助的。
考虑到DSP大多数是通过某种类型的串行接口如中继线E1、IIS、SPI、同步串口等外部设备进行数据交换的,所以在DSP/BIOS中提供了两种非常有用的PIP和SIO。
●RTDX:
RTDX是实时数据交换(RealTimeDataExchange)的缩写。
它是DSP/BIOS提供的一个全新的功能。
在很多应用中要求DSP不能停下来,而需要从主机中实时德读取数据或向主机实时地输出数据。
例如C5000和C6000系列的DSP都可以通过JTAG接口来实现这个功能。
RTDX在主机端可以与任何符合OLE接口的应用程序交换数据。
综上所述,DSP/BIOS针对DSP的应用环境,通过一系列的对象模块向开发者提供了一个优秀的实时操作系统。
它可以帮助用户提高软件的模块化、并行性和维护性等,有利于降低系统成本并缩短开发周期。
在本实验中,主要是为了让学生初步的学习DSP/BIOS的基本是用,为了让学生体会到DSP/BIOS给我们带来的便利性,本实验将重复实验四的定时器实验,从该实验可以看出,只需要在DSP/BIOS中对定时器做简单的配置,在C语言中写简单的几行代码,即可完成实验四的所有功能。
四实验步骤
1.硬盘上创建一个文件夹Exp7。
2.将DSP的USB仿真器连接到实验系统的DSP模块上的JTAG接口。
3.系统上电后,将USB仿真器的USB连接线插入到计算器的USB接口。
4.打开CCS软件,并创建一个名位DSP_BIOS的工程,保存到刚刚建立的Exp7文件夹下面。
5.把实验光盘DSP实验下面的Exp7文件夹中的main.c、fpga.h、c54xx.h拷贝到刚刚建立的Exp7文件夹下面。
6.点击CCS软件的File\New\DSP/BIOSConfiguration…,会弹出如图4.7.1所示的选择DSP类型对话框。
图4.7.1DSP/BIOS中选择DSP类型
7.选择C5410.cdb,点击【OK】,会出现图4.7.2所示的config对话框。
图4.7.2新建的DSP/BIOS
8.点击保存,重新命名为DSP_BIOS.cdb,如图4.7.3所示,点击【保存】。
图4.7.3重命名DSP/BIOS
9.点击DSP_BIOS.cdb窗口中System,将MEM-MemorySectionManager展开,可以看到下面的各个段分配的情况,如图4.7.4所示。
将EDATA、EPROG、EPROG1这些段全部删掉。
图4.7.4DSP/BIOS中分配的段
10.右键点击IPROG,选择Properties,会弹出修改本段在内存中起始地址和长度的窗口,将len的值修改为0x3f80后,点击【确定】。
如图4.7.5所示。
图4.7.5修改IPROG(内部程序段)的长度
11.同样,修改VECT段的起始地址为0x7f80后,点击【确定】,如图4.7.6所示。
图4.7.6修改VECT(中断向量表)段的起始地址
12.本实验是利用DSP/BIOS来完成定时器的实验,而DSP内部只有1个16位的定时器,该定时器默认情况下在DSP/BIOS中作为系统时钟,负责任务调度等基本工作。
由于本实验中没有建立多任务,不需要系统的任务调度,所以可以将定时器独立出来使用。
首先将DSP_BIOS.CDB窗口中的Scheduling下面的CLK-ClockManager展开,如图4.7.7所示。
13.右键点击PRD-PeriodicFunctionManager,选择Properties,将“UseCLKManagertodrivePRD”左侧的勾去掉,如图4.7.8所示。
点击【确定】。
这是可以看到图4.7.7中的CLK-ClockManager下面的PRD_clock消失了。
14.右键点击CLK-ClockManager,选择Properties,将“EnableCLKManager”左侧的勾去掉,这是可以看到整个窗口中的选项编程了灰色。
如图4.7.9所示。
设置结束后,点击【确定】即可。
图4.7.7展开系统任务调度管理
图4.7.8修改PRD管理器属性
15.到此为止,已经把DSP/BIOS操作系统中的系统时钟取消了,这是系统中的定时器就可以独立出来使用了,下面需要做的事情就是添加定时器属性、打开定时器、初始化定时器以及设置定时器中断等工作。
首先将DSP/BIOS窗口中
图4.7.9修改时钟管理器属性
的ChipSupportLibrary下面的TIMER-TimerDevice展开,用右键点击TimerConfigurationManager,点击InserttimerCfg,会出现一个定时器初始化文件,如图4.7.10所示。
图4.7.10添加定时器初始化文件
16.右键单击刚刚新建的timerCfg0,选择Properties,在弹出的对话框中选择CounterControl标签,将预分频器修改为15,将周期修改为60000,其它标签按默认值接口,如图4.7.11所示。
修改好后,点击【确定】即可。
图4.7.11修改新建的定时器配置属性
17.将TimerResourceManager资源展开,右键点击其下的Timer0,选择Properties,在弹出的对话框中将OpenHandletoTimer左侧的勾选中,将Enablepre-initialization左侧的勾选中,然后在下拉框中选择timerCfg0即可,如图4.7.12所示。
该步骤所作的工作就是打开定时器0句柄,供程序中使用,并且与初始化定时器,这样以来就不需要在程序中再对其进行初始化了。
图4.7.12打开定时器并对其进行预初始化
18.到此为止定时器已经初始化完毕,下面就该安排定时器的中断服务程序了。
首先将Scheduling下面的HWI-HardwareInterruptSeiviceRoutineManager展开,可以看到DSP/BIOS已经把所有的中断资源全部罗列了出来。
在罗列出来的中断资源中选中HWI_TINT,用右键点击并选择Properties,在General标签中,将Functon修改为_Timer_ISR,在Dispatcher标签中将“UseDispatcher”左侧的勾选中,并在Arg中填写0x00000013,这个号就是定时器的中断号。
修改好的属性窗口如图4.7.13所示。
19.定时器修改结束后,点击DSP_BIOS.cdb窗口的System下面的GlobalSettings,右键单击并选择Properties,将BSCR寄存器的值修改为0xF000,如图
图4.7.13定时器中断属性
4.7.14所示。
图4.7.14修改System下的BSCR寄存器
20.全部修改好后,保存DSP_BIOS.cbd文件。
到此位置,DSP/BIOS中所作的工作已经全部完成,下面只需要在工程中加入文件即可。
把DSP_BIOS.cdb、DSP_BIOS.c以及DSP_BIOScfg.cmd文件加入到工程即可。
如图4.7.15所示。
图4.7.15添加文件到工程
20.打开DSP_BIOS.c,可以看到在包含头文件的时候比平时多添加了一个“dsp_bioscfg.h”,并且在main函数中多了以下几个函数:
●C54_enableIMR(0x0008):
使能定时器中断
●HWI_enable(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 语言 实验 指导书
![提示](https://static.bdocx.com/images/bang_tan.gif)