1、 基于TI5416芯片的键盘控制程序的实现 摘 要 本课程设计的主要目的是熟悉CCS集成开发环境以及DSP试验系统箱的使用。设计平台为CCS软件,实现平台为DSP试验系统箱。在CCS环境下基于TMS320VC5416开发的小键盘输入数字并在DSP试验系统箱LED显示器上显示出来。首先通过CCS开发环境进行键盘控制程序源文件编辑、程序调试、跟踪和分析。经过软件的仿真后,接入DSP硬件设备,在经过硬件的调试,最终实现键盘输入数字在DSP试验箱上的LED显示器上相应地显示出来。本次课程设计中,实现了键盘输入数字并在LED显示器上显示出来,达到了设计目的,设计圆满成功。关键词 课程设计;CCS;DSP
2、;TMS320VC5416;LED;键盘 Abstract: The purpose of this curriculum project is familiar with CCS integrated development environment and the use of DSP test system box. The design platform is CCS software,the realize platform is DSP experimental system box. You can inputing datas on the small keyboard whic
3、h is developed based on TMS320VC5416 in the CCS environment, and displaying the result on the DSP test system boxs LED screen. At first,the source file of the keyboard control program must be edited,the program should be debugged, tracked and analyzed. After the simulation by soft, it should access
4、DSP hardware device, through hardware debugging, finally realizing the phenomenon that the datas inputted on the keyboard display on the DSP test system boxs LED screen.In this curriculum project, realized the phenomenon that datas inputted on the keyboard display on the DSP test system boxs LED scr
5、een,and it achieved the purpose of this design, the design was realized successfully.Key words: curriculum project; CCS; DSP; TMS320VC5416; LED; keyboard 1 引 言键盘控制是现今大家都会使用的,它为我们的日常上班生活提供了很大的帮助,输入什么就会在屏幕上显示相应的东西。然而,我们只知道它的外部,却对其内部的工作原理以及软硬件的设计了解很少,因此要通过这个课程设计进一步探讨键盘控制内部结构。本次课程设计需要借助DSP系统及其芯片,DSP芯片是一
6、种具有特殊结构的微处理器,其芯片内部采用程序和数据分开的哈佛结构,具有专门的硬件乘法器,广泛采用流水线操作,提供特殊的DSP指令,可以用来快速地实现各种数字信号处理算法。本设计最重要的是学习DSP系统的组成与原理,并运用到键盘控制的设计当中去。当然,这些过程的实现都是在CCS软件和DSP实验系统箱上进行的,CCS软件和DSP实验系统箱在数字信号处理上发挥了相当大的优势1。1.1 课程设计目的在CCS环境下基于TMS320VC5416开发的小键盘输入数字并在LED显示器上显示出来。通过这次课程设计,加深对CCS集成开发环境的以及DSP试验系统箱的使用。锻炼逻辑思维能力、动手能力以及独立解决问题的
7、能力,对以后更深入地学习和应用数字信号处理及相关知识作准备。1.2 课程设计的要求1)了解DSP开发工具及其安装过程2)熟悉DSP开发软件CCS使用3)熟悉工程文件的建立方法、汇编程序开发调试过程4)熟悉常用C5416系列指令的用法5)在老师的指导下,独立完成课程设计的全部内容,并按要求编写课程设计论文,能正确阐述和分析设计和实验结果。1.3 设计平台CCS(Code Composer Studio)称为代码调试器,或者是代码设计套件,它包含一整套用于开发和调试嵌入式应用的工具,它包含适用于每个 TI 器件系列的编译器、源码编辑器、项目构建环境、调试器、描述器、仿真器以及多种其它功能。CCS
8、IDE 提供了单个用户界面,可帮助您完成应用开发流程的每个步骤。借助于精密的高效工具,用户能够利用熟悉的工具和界面快速上手并将功能添加至他们的应用。CCS是TI公司推出的用于开发DSP芯片的集成开发环境,它采用Windows风格界面,集编辑、编译、链接、软件仿真、硬件调试以及实时跟踪等功能于一体,极大地方便了DSP芯片的开发与设计,是目前使用最为广泛的DSP开发软件之一2。2 设计原理2.1 TMS320VC5416的基本原理TMS320VC5416是一款性能优越的定点数字信号处理芯片,同其他TI公司的DSP定点数字信号处理器一样,为典型的增强型哈佛结构。TMS320VC5416芯片的主要特点
9、:1)操作速度高达160MI/S;2)整合维特比操作;3)备有三个掉电模式;4)整合随机存储器及只读存储器配置;5)自动缓冲串口;6)主端口接口;7)超薄包装(144脚TQFP及144脚BGA包装);8)3.3VI/O电压及1.6V/1.5V内核电压;9)40bit算术逻辑部件连双16bit配置性能,用于双重单周期操作;10)17bit*17bit乘法器,允许16bit带符号或不带符号的乘法;11)4个内部总线及双地址生成器,进行多重操作数运算,并降低存储器瓶颈现象;12)单周期及正规化及指数译码;13)8个辅助寄存器及一个软件栈,允许使用定点DSP C语言译器;14)掉电模式,宜于电池供电应
10、用。2.2 DSP实验系统下图2.1为DSP实验箱的硬件框图。二片TMS320VC5416定点DSP芯片和一些外围接口芯片,使用交流220V电源,通过开关电源转换成+5V、+12V、-12V三种电源,通过JTAG接口与计算机相连,可以在计算机屏幕上显示程序运行时寄存器的状态 3 。JTAG接口单脉冲输出分频输出8个LED输出8个按键输入同步串口TMS320C54X DSP可编程CPLD异步串口程序存储器数据存储器2路可调幅调频信号源(TRI,SQ,SIN)D/A转换A/D转换用户存储器EPROM语音放大电路语音输入电路 图2.1 主板电路框图实验系统电路组成:1程序存储器模块主要由高速RAM构
11、成,模块标记“PROM-SRAM”,该两片RAM的所有信号已连好,芯片型号24257。2数据存储器模块主要由高速RAM构成,模块标记“PROM-SRAM”,该两片RAM的所有信号以连好,芯片型号24257。3BOOT ROM引导模块主要由一片EPROM构成,该芯片型号为27C256412位D/A实验模块主要由一片AD767芯片构成,该芯片的数字信号均以连好,片选地址为0001H,模拟量输出测试孔为VOUT。R8、R9两个可调电位器分别调整D/A转换结果的零偏和满偏。512位A/D实验模块主要由一片AD1674芯片构成,该芯片的数字信号均以连好,片选地址为0000H,模拟量输入插孔分别为20V输
12、入插孔、10V输入插孔。6I/O输出模块主要由一片74F273芯片构成,片选信号OCS,输出信号P00P07,由用户连接。7I/O输入模块主要由一片74F244芯片构成,该芯片的数据总线一连好,片选信号ICS,输入信号I1I8插孔,由用户连接。8CPU地址译码电路主要由一片XC9536芯片构成,该芯片主要完成数据、程序、I/O口等地址译码。INTNT:中断脉冲输出PIACS:I/O输入译码0002HPIBCS:I/O输入译码0003HPOACS:I/O输出译码0004HPOBCS:I/O输出译码0005HPOCCS:I/O输出译码0006H9模拟量输入电路由一个电位器构成,电位器可变抽头输出为
13、AN0,电位器标识为“VR2”。10开关量输入模块11单脉冲发生按钮:K8、K912开关量输出显示模块由8个LED灯构成,P1-8,输入为“0”,LED灯亮;输入为“1”,LED灯灭。13异步串行实验模块由一片MAX232组成,“DB9”9针的插件用于与其他设备连接,P21的TX、RX插孔分别是232串行口的发送和接受端,短接可进行单机的异步通讯实验。14音频输入音频输入直接由麦克风输入经过功率放大和模拟滤波处理后,输入到AD转换电路,AD转换采用双极性。15音频输出音频输出采用LM386-4(供电电压518V,本电路采用12V供电)。本电路设计功率为0.3W,放大倍数为20200倍(在引脚1
14、和8间加入10uF的电容),并在输出引脚5上连接0.047uF的电容和10的电阻,防止高频振荡。负载电阻为8。16频率可调双路三角波、方波和正弦波产生电路频率可调双路三角波、方波和正弦波产生电路采用两片8038信号发生器,频率可通过可调电阻PR3调节,输出频率范围2020KHz。产生的双路不同频率的正弦信号经过加法器混频,接至AD变换(采用双极性)。采集的信号经过低通或高通数字滤波算法,然后经过DA变换输出。观察滤波效果4。在电路板上要适当增加测试点,便于学生实验过程中应用示波器观察关心的信号或引脚的输出值或状态量。1710针CPLD下载电缆接口,可直接进行CPLD下载。3设计步骤3.1设计流
15、程CCS软件的安装配置 建立新工程文件编写键盘控制程序 调试程序以及做软件仿真接入硬件设备继续调试与预期结果对照 做出结论。3.2 CCS软件的安装配置采用标准配置文件进行系统配置的步骤:步骤1:启动CCS配置程序。双击桌面上的Setup CCS快捷图标,弹出对话框如图3.13。可供使用的配置系统配置栏目加入配置按钮清除配置按钮图3.1 CCS设置界面图步骤2:清除以前定义的配置。步骤3:选择与目标系统相匹配的配置文件。步骤4:将所选中的配置文件加入到系统配置中。步骤5:安装驱动程序。点击“Intall a Device Driver”,弹出选择器件驱动程序对话框如图3.2。系统配置窗口安装驱
16、动程序图3.2 选择器件驱动程序对话框界面图步骤6:保存系统配置。打开“File”菜单,单击“Save”按钮,将系统配置保存在系统寄存器中,完成CCS的系统配置。3.3创建工程文件及编写程序1利用CCS创建一个新工程,然后向该工程中添加源代码文件和库文件。1) CCS的安装目录为c:ti,首先在文件夹c:timyprojects下建立一个新的文件夹,命名为volume1。2) 将c:titutorialtarget(sim54xx)volume1文件夹中的内容拷贝到该新建的文件夹中。3) 启动CCS。如果需要的话,对CCS进行配置,使其工作在C54x simulator模式下。4) 从CCS的
17、Project菜单下选择子菜单New。将出现Project Creation对话框。在对话框中“Project Name”处输入volume1,“Location”处用浏览方式选入在第一步中所建立的文件夹volume1的位置,在“Project Type”处选择Executable(.out)类型,在“Target”中选择CCS所配置的目标DSP类型,最后单击“完成”结束。如下图3.3所示。图3.3 新建工程界面图5) 通过上述步骤Code Composer Studio就建立了一个工程文件,名为volume1.pjt,该工程文件用于存储工程配置以及在工程中所用到的若干文件。可在“工程项目观察
18、窗口(Project view)”处看到。2. 向工程中添加文件。一个工程项目包括源程序、库文件、链接命令文件和头文件等。6) 在CCS中选择菜单ProjectAdd Files to Project,然后选文件volume.c,并单击Open。(也可在工程图标处单击鼠标右键在快捷菜单中选Add Files to Project,或将文件拖入工程视图窗口的文件夹中。)7) 在CCS中选择菜单ProjectAdd Files to Project,并在文件类型选框中选汇编源文件(*.a*, *.s*),然后选vectors.asm 和 load.asm 这两个文件并单击“打开”,如下图3.4所示
19、。这些文件中包含了设置复位RESET中断到程序的C入口c_int00的一些汇编指令。(对于更加复杂的程序,可在vectors.asm 文件中定义更多的中断向量。也可利用DSP/BIOS来自动定义所有的中断向量。)图3.4 添加汇编源文件界面图8) 在CCS中选择菜单ProjectAdd Files to Project,并在文件类型选框中选择链接命令文件(*.cmd),然后选volume.cmd并单击“打开”,该命令文件将汇编程序的段映射到DSP的存储空间中。9) 在CCS中选择菜单ProjectAdd Files to Project,进入编译库文件夹(c:tic5400cgtoolslib
20、),在文件类型选框中选择目标文件类型和库文件类型(*.o*, *.lib),为所配置的目标DSP选rts.lib文件并单击“打开”,如下图3.5所示。该库文件为目标DSP提供了运行时间(runtime)支持。(对于一些目标DSP,运行时间库可以是一个更特殊的文件名,如rts_ext.lib 。)图3.5 添加库文件界面图10) 在工程视图窗口,用鼠标右键单击工程文件volume1.pjt 并在快捷菜单中选择 Scan All Dependencies。这时volume.h应出现于工程视图窗口中的Include文件夹中。11) 单击Project左边的小加号,将展开工程列表:volume1.pj
21、t,Libraries,以及 Source。该列表即为工程视图,如图3.6所示。图3.6 工程窗口视图12) 无需手工向工程中加入include文件,因为CCS将会在编译过程中自动找到这些文件。编译之后在工程视图中将出现这些include文件。如果要从工程中移出一个文件,只要在相应文件处单击鼠标右键在弹出的快捷菜单中选Remove from project 即可。编译时CCS在以下路径依次查找工程文件:包含有源文件的文件夹;在compiler 或 assembler 选项中从左到右依次列出的文件夹。3. 查看源代码在工程视图中volume.c上双击,就可在CCS右边窗口中察看源代码,如下图3.
22、7所示。图3.7 源代码窗口图请注意该程序中的以下部分:i. 在进入main函数后打印出一条消息,并进入死循环。循环体中程序调用了dataIO以及其他一些过程函数。ii. 在过程函数中,将输入缓冲区(input buffer)中的每一个数值乘以增益(gain),并将结果放入输出缓冲区(output buffer)。程序也将调用汇编载入例程,该例程按照传递给它的processingLoad取值来消耗指令周期。iii. 本例中dataIO函数除了返回之外不做其他任何动作。我们在这里不使用C代码来完成I/O,而是利用CCS中的一个探针Probe Point 来从主机的文件中读入数据并放入inp_bu
23、ffer区域。4. 编译并运行程序编译并运行程序的步骤:a) 选ProjectRebuild All 或单击工具按钮 (Rebuild All)。CCS重新编译,并链接工程中的全部文件。编译过程信息显示在CCS下部的窗口中。b) 在默认情况下,将当前工程目录下的debug子目录中生成.out文件。通过CCS工具条可改变生成文件的存放位置。c) 选FileLoad Program,并在对话框中选刚刚编译生成的文件volume1.out,单击Open打开。(默认在目录c:timyprojectsvolume1Debug 文件夹下)这样CCS就将程序载入目标DSP,并打开一个反汇编窗口,显示出相应的
24、反汇编指令。CCS也将在窗口底部自动打开一个标签区域来显示程序送往stdout的输出。d) 选ViewMixed Source/ASM,将同时看到c源代码和汇编结果代码。e) 在混合模式窗口中单击一条汇编伪指令本身,并按F1键,CCS将搜索该条指令的帮助。f) 选DebugGo Main开始从main 函数处执行程序。程序暂停在main处,并用黄色的箭头标识。g) 选DebugRun或单击工具按钮 (Run)来运行程序。h) 选DebugHalt来暂停程序执行。i) 从菜单View中选Mixed Source/ASM。将看到不带相应汇编的c代码。从而可以方便地进行下一个任务:修改程序选项,修正
25、语法错误。5. 修改并运行程序在前面的介绍中,预处理命令(ifdef and endif)包围的程序部分不会被执行,因为没有定义FILEIO。在这一部分将在CCS中设置一个预处理选项。a) 选ProjectBuild Options。b) 在Build Options窗口的Compiler标签下,从列表栏选择Processor, 在Define Symbols域键入FILEIO,然后按Tab键,如下图3.8所示。(注:窗口上部的编译命令中含有了选项-d。再次编译时程序中的ifdef FILEIO之后的语句将被包含。根据所使用的DSP板的不同其他选项也将发生变化。)图3.8 Define Sym
26、bols域修改图c) 单击“确定”保存新的选项设置。d) 选ProjectRebuild All 或单击工具按钮 (Rebuild All)。只要改变了工程选项,就必须重新编译所有的文件。e) 选FileLoad Program并选择文件volume1.out。(也可以在编译之后自动装入,选择OptionCustomize,并单击Program Load Options标签,然后选中Load Program After Build Option)f) 选DebugGo Main开始从main 函数处执行程序。程序暂停在main处,并用黄色的箭头标识。g) 选DebugRun或单击工具按钮 (R
27、un)来运行程序。h) 选DebugHalt来暂停程序执行。通过以上步骤,在运行projectRebuilt All后得出下图3.9结果:图3.9 程序执行结果图如上所示表明程序编写正确,接入硬件DSP设备实验系统箱后,通过输入数字在LED显示器上得到相应的结果,当在小键盘按键上输入数字键时,对应的显示器显示相应的数字。3.4结果分析经过以上键盘控制程序的编写、调试、仿真以及接入硬件设备DSP试验箱后,再次运行程序后,在DSP试验箱上的小键盘上输入相应的数字,结果在LED显示器上显示出来。结果表明试验成功!由于本人知识有限,只能显示部分东西。但总算可以基本实现本次课程设计的需要,心里还是有些许
28、安慰。4出现的问题和解决方法在本次课程设计的过程中,主要遇到的问题有这样一些方面:1) 没有找到合适的CCS软件进行安装,安装过程中经常的出错。2) 对CCS软件里面的各个按钮不熟悉。3) 编写程序过程中遇到很多问题,例如:函数的调用等。4) 程序编写后调试过程不知道问题的所在,并且运行后,多出出现错误。5) 对DSP实验箱不熟悉,特别是芯片的功能。6) 最后调试成功后出来的结果不能很好的认识。对于以上出现的问题经过认真的学习思考得出如下解决方法:1) 找到合适版本的CCS软件,并进行了正确的安装,并且没有出错。2) 通过看书自己学习,以及老师的讲解,对软件的面板的一些基本按钮有了认识。并且可
29、以连贯的使用。问题得到解决。3) 在认真的看书以及老师的检查后,基本的编程水平得到提升,问题基本解决。4) 按照书本介绍的办法,点击问题的所在行后,认真检查发现许多字母打错。改正后问题得到解决。5) 通过老师的认真讲解以及自己的思考基本懂了DSP实验系统的作用,以及相应芯片的功能。6) 联系老师的解释以及自己对整个课设的理解,最终能够很好的分析所得结果。通过出现问题到解决问题这一过程,我觉得学习的过程是相互讨论共同进步的,多多讨论课题中遇到的问题,可以巩固我们的知识掌握能力,增加熟练运用度。5结束语本次课程设计的时间共有四个星期,课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问
30、题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。随着科学技术发展的日新月异,时代对于学生的综合素质要求将会越来越高,进行课程设计,将有利于提高学生们综合素质的提高。从本次课程设计的中心来看,课题是希望通过键盘控制而将相应的结果显示出来,这里就是指对键盘控制程序的编写,调试等。在这里我们只要编写正确的程序,经过调试,仿真硬件调试就可以对其进行处理了。在完成这次课程设计过程中我学到了许多东西,用到了处理数字信号的强有力工具CCS软件以及DSP实验系统箱。在课程设计过程中,我学会了如何正确的安装CCS软件,以及如何配置相应的程序。对DSP实验系统箱有了全面的了解,最重要的是对D
31、SP实验系统箱上的芯片的分类,用处等有了全面的了解,充分的认识了DSP的作用,与此同时我还学会了使用CCS一些基本函数,增加了进一步学习CCS软件的兴趣。同时,通过本次课程设计,锻炼了我的动手能力,和提高了我分析问题,解决问题的能力。经过这次课程设计,我还明白了一个道理,学习在请教他人之外,更重要的是自己能够独立思考,同时学习的过程是相互讨论共同进步的,多多讨论课题中遇到的问题,可以巩固我们的知识掌握能力,增加熟练运用度。最后,我要对此次课程设计过程中给予我帮助的老师和同学们表示衷心的感谢!这次课程设计终于顺利完成了,在设计中遇到了许多原理问题,在*老师的悉心指导下,终于迎刃而解。同时,我也在
32、老师的身上学到了许多有用的知识,使我受益匪浅,在此,我表示衷心地感谢!参考文献1 周霖.DSP系统设计与实现M.北京:电子工业出版社,2005.2 苏涛. DSP实用技术M.西安:西安电子科技大学出版社,2005.3 彭启宗.TMS320C54xx实用教程M.成都:科技大学出版社,2004.4 刘益成.DSP程序设计与开发M.北京:航天大学出版社,2001.5 赵红怡.DSP技术与应用实例M.北京:电子工业出版社,2010.附录I:键盘控制程序的源程序% 程序名称:键盘控制程序的实现 % 程序功能:在CCS环境下基于TMS320C5416开发的小键盘输入数字并在DSP试验系统箱LED显示器上显
33、示出来。 % 程序作者:彭威城% 最后修改日期:2010-12-10#include scancode1.h#define REGISTERCLKMD (*(unsigned int *)0x58)ioport unsigned int port8000;ioport unsigned int port8001;ioport unsigned int port8002;ioport unsigned int port8005;ioport unsigned int port8007;void Delay(unsigned int nTime);/ 延时子程序void RefreshLEDArr
34、ay();/ 刷新显示void SetLEDArray(int nNumber);/ 修改显示内容char ConvertScanToChar(unsigned char cScanCode);/ 将键盘扫描码转换为字符unsigned int nScreenBuffer1024;unsigned char ledbuf8,ledx8;unsigned char ledkey108=0x00,0x00,0x7C,0x82,0x82,0x82,0x7C,0x00,0x00,0x00,0x00,0x84,0xFE,0x80,0x00,0x00,/10x00,0x00,0x84,0xC2,0xA2,
35、0x92,0x8C,0x00,/20x00,0x00,0x44,0x92,0x92,0x92,0x6C,0x00,0x00,0x00,0x30,0x28,0x24,0xFE,0x20,0x00,0x00,0x00,0x4E,0x92,0x92,0x92,0x62,0x00,0x00,0x00,0x7C,0x92,0x92,0x92,0x64,0x00,0x00,0x00,0x02,0xC2,0x32,0x0A,0x06,0x00,0x00,0x00,0x6C,0x92,0x92,0x92,0x6C,0x00,0x00,0x00,0x4C,0x92,0x92,0x92,0x7C,0x00;uns
36、igned int uPort8000;main()int nCount,nCursorCount;unsigned int nScanCode,nKeyCode;unsigned char cKey;REGISTERCLKMD=0;port8000=0;/ 初始化ICETEK-CTRport8000=0x80;port8000=0;port8007=0;/ 关闭东西方向的交通灯port8007=0x40;/ 关闭南北方向的交通灯 port8007=0xc1; /打开发光二级管uPort8000=port8002;/ 清键盘缓冲区for ( nCount=0;nCount8;nCount+ )
37、ledbufnCount=0x0ff;/ 显示为空白ledxnCount=(nCount4);/ 生成显示列控制字RefreshLEDArray();nCount=nCursorCount=0;for (;)nScanCode=port8001;nScanCode&=0x0ff;uPort8000=port8002;if ( nScanCode!=0 & nScanCode!=0x0ff )if ( nScanCode=SCANCODE_Enter )break;elsecKey=ConvertScanToChar(nScanCode);if ( cKey!=0 )nKeyCode=cKey-
38、0;SetLEDArray(nKeyCode);Delay(16);nCursorCount+; nCursorCount%=4;if ( nCursorCount=0 )ledbuf7=0x80;for ( nCount=0;nCount8;nCount+ )ledbufnCount=0x0ff;/ 显示为空白ledxnCount=(nCount4);/ 生成显示列控制字RefreshLEDArray();exit(0);void Delay(unsigned int nDelay)int ii,jj,kk=0;for ( ii=0;iinDelay;ii+ )for ( jj=0;jj64
39、;jj+ )RefreshLEDArray();kk+;void RefreshLEDArray()int i;for ( i=0;i8;i+ )port8000=ledxi;port8005=ledbufi;void SetLEDArray(int nNumber)int i;for ( i=0;i8;i+ )ledbufi=ledkeynNumber7-i;char ConvertScanToChar(unsigned char cScanCode)char cReturn;cReturn=0;switch ( cScanCode )case SCANCODE_0: cReturn=0;
40、break;case SCANCODE_1: cReturn=1; break;case SCANCODE_2: cReturn=2; break;case SCANCODE_3: cReturn=3; break;case SCANCODE_4: cReturn=4; break;case SCANCODE_5: cReturn=5; break;case SCANCODE_6: cReturn=6; break;case SCANCODE_7: cReturn=7; break;case SCANCODE_8: cReturn=8; break;case SCANCODE_9: cReturn=9; break;return cReturn;本文是通过网络收集的资料,如有侵权请告知,我会第一时间处理。 .