dsp数字信号处理课程设计报告.docx
- 文档编号:9421586
- 上传时间:2023-05-19
- 格式:DOCX
- 页数:14
- 大小:52.71KB
dsp数字信号处理课程设计报告.docx
《dsp数字信号处理课程设计报告.docx》由会员分享,可在线阅读,更多相关《dsp数字信号处理课程设计报告.docx(14页珍藏版)》请在冰点文库上搜索。
dsp数字信号处理课程设计报告
淮阴工学院
《DSP技术与应用》课程设计报告
选题名称:
µC/OS-Ⅱ移植实验
系(院):
计算机工程学院
专业:
计算机科学与技术(嵌入式系统软件设计)
班级:
计算机1073
姓名:
冯绍诚学号:
1071306109
指导教师:
马岱常波
学年学期:
2009~2010学年第2学期
2010年6月12日
设计任务书
课题
名称
Ucos-的移植实验
设计
目的
1.了解嵌入式操作系统的一些基本概念
2.了解汇编相关知识
3.学习并了解µC/OS-Ⅱ在DPS处理器上的移植过程
4.由CCS软件将µC/OS-Ⅱ操作系统移植到DPS试验箱上并实现部分功能
实验
环境
1.Windows2000以上操作系统;
2.CCS环境;
任务
要求
1.利用课余时间去图书馆或上网查阅课题相关资料,深入理解课题含义及设计要求,注意材料收集与整理;
2.在第14周末之前完成预设计,并请指导教师审查。
通过后方可进行下一步工作;
3.按指导书要求设计软件,实现设计的功能,并显示正确的结果;
4.要求形成稳定的程序软件,可以运行,方可申请参加答辩;
工作进度计划
序号
起止日期
工作内容
1
2010.6.12~2010.6.13
在预设计的基础上,进一步查阅资料,完成硬件电路设计和焊接。
2
2010.6.13~2010.6.14
编写软件代码,调试与完善。
3
2010.6.15~2010.6.17
测试程序,优化代码,增强功能,撰写课程设计报告。
4
2010.6.17~2010.6.18
提交软件代码、硬件电路成果和设计报告,参加答辩。
指导教师(签章):
年月日
摘要:
这次实验是将µC/OS-Ⅱ移植到DSP处理器上。
µC/OS-Ⅱ系统其主要特点有公开源代码,代码结构清晰、明了,注释详尽,组织有条理,可移植性好,可裁剪,可固化。
内核属于抢占式,最多可以管理60个任务。
所谓移植,就是使一个实时内核能在某个微处理器或微控制器上运行。
为了方便移植,大部分的µC/OS-Ⅱ代码是用C语言写的;但仍需要用C和汇编语言写一些与处理器相关的代码,这是因为µC/OS-Ⅱ在读写处理器寄存器时只能通过汇编语言来实现。
由于µC/OS-Ⅱ在设计时就已经充分考虑了可移植性,所以µC/OS-Ⅱ的移植相对来说是比较容易的。
而我们的工作就是把在一直过程中遇到的程序和问题都了解并试着处理以实现实验目的。
关键词:
µC/OS-Ⅱ操作系统;DSP仿真;CCS软件应用;汇编应用
目录
1.µC/OS-Ⅱ操作系统与DSP芯片简介1
1.1µC/OS-Ⅱ简介1
1.2µC/OS-Ⅱ工作原理1
1.3DSP芯片简介2
2.任务分配说明2
3OS-CPU.H的移植4
3.1定义数据类型4
3.2DSP相关宏定义4
3.3堆栈增长方向和任务切换函数4
4OS-CPU.c的移植4
4.1OS-CPU.c移植简介5
4.2堆栈初始化的汇编代码6
5.OS-CPU-ASM的移植6
5.1OSStartHighRdy()7
5.2OSCtxSw()7
5.3OSIntCtxSw()7
5.4OSTickISR()8
6程序调试结果和分析8
总结9
参考文献10
1.µC/OS-Ⅱ操作系统与DSP芯片简介
1.1µC/OS-Ⅱ简介
uC/OS是一种公开源代码、结构小巧、具有可剥夺实时内核的实时操作系统,商业应用需要付费。
μC/OS-II是专门为计算机的嵌入式应用设计的,绝大部分代码是用C语言编写的。
CPU硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU上。
用户只要有标准的ANSI的C交叉编译器,有汇编器、连接器等软件工具,就可以将μC/OS-II嵌人到开发的产品中。
μC/OS-II具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,最小内核可编译至2KB。
μC/OS-II已经移植到了几乎所有知名的CPU上。
1.2µC/OS-Ⅱ工作原理
uC/OS-II是一种基于优先级的可抢先的硬实时内核。
要实现多任务机制,那么目标CPU必须具备一种在运行期更改PC的途径,否则无法做到切换。
不幸的使,直接设置PC指针,目前还没有哪个CPU支持这样的指令。
但是一般CPU都允许通过类似JMP,CALL这样的指令来间接的修改PC。
我们的多任务机制的实现也正是基于这个出发点。
事实上,我们使用CALL指令或者软中断指令来修改PC,主要是软中断。
但在一些CPU上,并不存在软中断这样的概念,所以,我们在那些CPU上,使用几条PUSH指令加上一条CALL指令来模拟一次软中断的发生。
在uC/OS-II里,每个任务都有一个任务控制块(TaskControlBlock),这是一个比较复杂的数据结构。
在任务控制快的偏移为0的地方,存储着一个指针,它记录了所属任务的专用堆栈地址。
事实上,再uC/OS-II内,每个任务都有自己的专用堆栈,彼此之间不能侵犯。
这点要求程序员再他们的程序中保证。
一般的做法是把他们申明成静态数组。
而且要申明成OS_STK类型。
当任务有了自己的堆栈,那么就可以将每一个任务堆栈再那里记录到前面谈到的任务控制快偏移为0的地方。
以后每当发生任务切换,系统必然会先进入一个中断,这一般是通过软中断或者时钟中断实现。
然后系统会先把当前任务的堆栈地址保存起来,仅接着恢复要切换的任务的堆栈地址。
由于哪个任务的堆栈里一定也存的是地址(还记得我们前面说过的,每当发生任务切换,系统必然会先进入一个中断,而一旦中断CPU就会把地址压入堆栈),这样,就达到了修改PC为下一个任务的地址的目的。
1.3DSP芯片简介
DSP芯片,也称数字信号处理器,是一种特别适合于进行数字信号处理的微处理器,它强调运算处理的实时性,因此DSP芯片除了具备普通微处理器所强调的高速运算和控制功能外,针对实时数字信号处理,在处理器结构、指令系统、数据流程上做了大的改动,其特点有:
(a)DSP芯片普遍采用了数据总线和程序总线分离的哈佛结构及改进的哈佛结构。
(b)DSP芯片大多采用流水技术。
(c)片内有多条总线可以同时进行取指令和多个数据存取操作,并且有辅助寄存器用于寻址。
(d)DSP芯片大多带有DMA通道控制器以及串行通信口等使数据块传送速度大大提高。
(e)配有中断处理器和定时控制器,可以方便地构成一个小规模系统。
(f)具有软、硬件等待功能,能与各种存取速度的存储器接口。
(g)针对滤波、相关、矩阵运算等需要大量乘法累加运算的特点,DSP芯片大都配有独立的乘法器和加法器,使得同一时钟周期内可以完成乘、累加两个运算。
(h)低功耗,一般为0.5∼4W,采用低功耗技术的DSP芯片只有0.1W,可用电池供电。
正是DSP芯片的以上特点决定了其运算速度比通用微处理器(MPU)要高,面对DSP的巨大市场和广阔发展前景。
2.任务分配说明
μC/OS-II可以大致分成核心、任务处理、时间处理、任务同步与通信,CPU的移植等5个部分。
我在队伍中负责的是μC/OS-II中CPU的移植部分。
所谓CPU的移植就是与CPU的接口部分是指μC/OS-II针对所使用的CPU的移植部分。
由于μC/OS-II是一个通用性的操作系统,所以对于关键问题上的实现,还是需要根据具体CPU的具体内容和要求作相应的移植。
这部分内容由于牵涉到SP等系统指针,所以通常用汇编语言编写。
主要包括中断级任务切换的底层实现、任务级任务切换的底层实现、时钟节拍的产生和处理、中断的相关处理部分等内容。
作为移植µC/OS-Ⅱ的前提工作包括以下几个内容:
l用#define设置一个常量的值(OS_CPU.H)
l声明10个数据类型(OS_CPU.H)
l用#define声明三个宏(OS_CPU.H)
l用C语言编写六个简单的函数(OS_CPU_C.C)
l编写四个汇编语言函数(OS_CPU_A.ASM)
根据处理器的不同,一个移植实例可能需要编写或改写50至300行的代码,需要的时间从几个小时到一星期不等。
各个微处理器或微控制器的移植源代码必须在以下两个或三个文件中找到:
OS_CPU.H,OS_CPU_C.C,OS_CPU_A.ASM。
汇编语言文件OS_CPU_A.ASM是可选择的,因为某些C编译器允许用户在C语言中插入汇编语言,所以用户可以将所需的汇编语言代码直接放到OS_CPU_C.C中。
放置移植实例的目录决定于用户所用的处理器,例如在下面的表中所示的放置不同移植实例的目录结构。
注意,各个目录虽然针对完全不同的目标处理器,但都包括了相同的文件名。
Intel/AMD80186\SOFTWARE\uCOS-II\Ix86S
\OS_CPU.H
\OS_CPU_A.ASM
\OS_CPU_C.C
\SOFTWARE\uCOS-II\Ix86L
\OS_CPU.H
\OS_CPU_A.ASM
\OS_CPU_C.C
Motorola68HC11\SOFTWARE\uCOS-II\68HC11
\OS_CPU.H
\OS_CPU_A.ASM
\OS_CPU_C.C
OS_CPU.H包括了用#defines定义的与处理器相关的常量,宏和类型定义。
3OS-CPU.H的移植
3.1定义数据类型
typedefunsignedcharBOOLEAN;
typedefunsignedcharINT8U;/*无符号8位整数*/
typedefsignedcharINT8S;/*有符号8位整数*/
typedefunsignedintINT16U;/*无符号16位整数*/
typedefsignedintINT16S;/*有符号16位整数*/
typedefunsignedlongINT32U;/*无符号32位整数*/
typedefsignedlongINT32S;/*有符号32位整数*/
typedeffloatFP32;/*单精度浮点数*/
typedefdoubleFP64;/*双精度浮点数*/
typedefunsignedintOS_STK;/*堆栈入口宽度为16位*/
3.2DSP相关宏定义
#defineOS_ENTER_CRITICAL()/禁止中断/
#defineOS_EXIT_CRITICAL()/允许中断/
3.3堆栈增长方向和任务切换函数
#defineOS_STK_GROWTH1/定义堆栈的增长方向:
1=向下,0=向上/
#defineOS_TASK_SW()
4OS-CPU.c的移植
4.1OS-CPU.c移植简介
µC/OS-Ⅱ的移植实例要求编写6个简单的C函数:
OSTaskStkInit()
OSTaskCreatHook()
OSTaskDelHook()
OSTaskSwHook()
OSTaskStartHook()
OSTaskTickHook()
唯一必要的函数是OSTaskStkInit(),其他5个函数必须得到申明但没必要包涵代码,OSTaskCreatHook()和OSTaskCreatExt()通过调用OSTaskStkInit()来初始化任务堆栈结构,因此,堆栈看起来像刚发生过中断并将所有的寄存器保存到堆栈中的情形,图显示了OSTaskStkInit()放到整呗建立的任务堆栈中的东西。
注意,下图显示堆栈是从下而上的,至上而下同样适用。
用户建立任务时,用户会传递任务的地址,padata指针,任务的堆栈栈顶和任务的优先级给OSTaskCreat()和OSTaskCreatExt()。
图4-1堆栈初始化过程
4.2堆栈初始化的汇编代码
OSTaskStkInit:
LDMSP,B;
STLMA,T;
LD*SP
(1),A;
NOP;
NOP;
SFTL,A,8,A;
ADD,A,8,B;
LD*SP
(2),A;
NOP;
NOP;
STLMA,SP;
LDMT,A;
NOP;
NOP
PSHMAL;
SFTLB,-16,A;
NOP;
NOP;
NOP;
RET;
5.OS-CPU-ASM的移植
µC/OS-Ⅱ的移植实例要求用户编写四个简单的汇编语言函数:
OSStartHighRdy()
OSCtxSw()
OSIntCtxSw()
OSTickISR()
此模块主要由我的搭档卲占用负责,我在此简要介绍
5.1OSStartHighRdy()
使就绪状态的任务开始运行的函数叫做OSStart()。
在用户调用OSStart()之前,用户必须至少已经建立了自己的一个任务(参看OSTaskCreate()和OSTaskCteateExt())。
OSStartHighRdy()假设OSTCBHighRdy指向的是优先级最高的任务的任务控制块。
voidOSStartHighRdy(void)
{
CalluserdefinableOSTaskSwHook();
Getthestackpointerofthetasktoresume:
Stackpointer=OSTCBHighRdy->OSTCBStkPtr;
OSRunning=TRUE;
Restoreallprocessorregistersfromthenewtask'sstack;
Executeareturnfrominterruptinstruction;
}
5.2OSCtxSw()
如前面所述,任务级的切换问题是通过发软中断命令或依靠处理器执行陷阱指令来完成的。
中断服务例程,陷阱或异常处理例程的向量地址必须指向OSCtxSw()。
如果当前任务调用µC/OS-Ⅱ提供的系统服务,并使得更高优先级任务处于就绪状态,µC/OS-Ⅱ就会借助上面提到的向量地址找到OSCtxSw()。
在系统服务调用的最后,µC/OS-Ⅱ会调用OSSched(),并由此来推断当前任务不再是要运行的最重要的任务了。
5.3OSIntCtxSw()
OSIntExit()通过调用OSIntCtxSw()来从ISR中执行切换功能。
因为OSIntCtxSw()是在ISR中被调用的,所以可以断定所有的处理器寄存器都被正确地保存到了被中断的任务的堆栈之中。
实际上除了我们需要的东西外,堆栈结构中还有其它的一些东西。
OSIntCtxSw()必须要清理堆栈,这样被中断的任务的堆栈结构内容才能满足我们的需要。
5.4OSTickISR()
µC/OS-Ⅱ要求用户提供一个时钟资源来实现时间的延时和期满功能。
时钟节拍应该每秒钟发生10-100次。
为了完成该任务,可以使用硬件时钟,也可以从交流电中获得50/60Hz的时钟频率。
用户必须在开始多任务调度后(即调用OSStart()后)允许时钟节拍中断。
换句话说,就是用户应该在OSStart()运行后,µC/OS-Ⅱ启动运行的第一个任务中初始化节拍中断。
通常所犯的错误是在调用OSInit()和OSStart()之间允许时钟节拍中断(如程序清单L8.4所示)。
6程序调试结果和分析
在完成前面对CPU.H以及CPU.C的移植后,我的同伴卲占用也完成了4个汇编程序的移植。
接下来在CSS环境中对所有的源文件进行编译和连接,生成处理器中可执行的.out文件,通过仿真器直接连接到DSP的实验箱运行。
经过CCS提供了强大的调试功能,用户能够很清楚地了解μC/OS--II在处理器内的运行情况,可见数码管上数据按顺序的有效的移位操作,发光二极管也顺序的轮闪。
这实验结果也表明了我们实验是成功的。
这无疑也源于μC/OS-Ⅱ对DSPC54X处理器提供了强大的移植支持。
总结
DSP是一门理论和技术发展十分迅速、应用非常广泛的前沿性学科,它的理论性和实践性都很强。
通过这次漫长的程序设计中,首先我们通过用μC/OS-II的CPU移植过程了解了这个操作系统,再经过任务之间的通讯和同步部分现实验结果的过程,加深了对课堂抽象概念的理解,巩固了课堂上所学的理论知识,并很好地了解与认识了μC/OS-II操作系统和CCS软件的使用方法。
而对于这次课程设计的题目“关于μC/OS-II的移植”,在收集资料以及编程过程中,不光让我巩固所学的知识,加强理论和实际结合的能力,细致的了解了DSP的工作原理,还培养了我们的综合设计能力与实际工作能力。
真可谓获益匪浅啊。
虽然最后离我的实验结果还有少许偏差让我有点不甘心,但这次独立制作芯片的过程还是让我感触良多的。
而且在这次课程设计的撰写过程中,我得到了许多人的帮助。
本论文从立题到论文撰写整个过程都是在马老师和常老师的悉心指导下完成的。
老师们在传授我知识的同时,更注重培养我解决问题的思路和方法及创新能力,为我今后学习和工作打下了坚实的基础并开阔了我的视野,渊博的知识、严谨的治学态度、忘我的工作精神以及对新知识不懈追求的精神,令我们佩服,使我们受益匪浅.我将最诚挚的谢意奉献给我的导师们。
另外,我要感谢我的同班同学,他们给予我很多的关心和帮助,并在程序上给了我很多启示,而且他们中间不少人给我学习和生活上带来了很多的快乐。
没有他们我的程序不可能做的如此顺利。
参考文献
1.乔瑞平编TMS320C54Xdsp原理及应用西安电子科技大学出版社,2005
2.汪安民编著TMS320C54xxDSP实用技术(第二版),2006
3.汪安民编DSP应用开发实用子程序人民邮电出版社,2005
4.徐科军编定点DSP的原理开发与应用北京清华大学出版社,2002
5.李玉柏编DPS技术成都电子科技大学出版社1997
指导教师评语
学号
1071306109
姓名
冯绍诚
班级
计算机1073
选题
名称
UCOS-的移植实验
序号
评价内容
权重(%)
得分
1
考勤记录、学习态度、工作作风与表现。
5
2
自学情况:
上网检索机时数、文献阅读情况(笔记)。
10
3
论文选题是否先进,是否具有前沿性或前瞻性。
5
4
成果验收:
是否完成设计任务;能否运行、可操作性如何等。
20
5
报告的格式规范程度、是否图文并茂、语言规范及流畅程度;主题是否鲜明、重心是否突出、论述是否充分、结论是否正确;是否提出了自己的独到见解。
30
6
文献引用是否合理、充分、真实。
5
7
答辩情况:
自我陈述、回答问题的正确性、用语准确性、逻辑思维、是否具有独到见解等。
25
合计
指导教师(签章):
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- dsp 数字信号 处理 课程设计 报告