DSP课程设计报告题目:交通灯的定时显示班级:11级电信二班姓名:xxxx学号:xxxxxxxxxxxxx指导老师:xxx目录1、设计目的……………………………………………………………………………………....错误!未定义书签。
2、设计分析 (3)2.1、设计任务 (3)2.2、设计要求 (3)3、TMS320F2812芯片介绍 (3)3.1 TMS320F2812芯片的简介 (3)3.2 关于TMS320F2812参数 (3)3.3管脚的定义和说明 (3)3.4 F2812结构图 (5)3.5、ICETEK-F2812-EDU实验箱原理图 (7)4、系统整体设计 (6)4.1、设计程序流程图 (6)4.2、实验效果图 (8)5、运行描述 (8)6、软件的使用:ccs介绍 (9)7、课程设计总结 (10)8、参考文献 (11)9.程序代码 (13)1、设计目的DSP课程设计是对课程所学理论知识的深化和提高。
目的是能综合应用所学知识,设计与制造出具有简单功能的小型键盘输入发声装置。
能够较全面地巩固和应用DSP课程中所学的基本理论和基本方法,初步掌握小型DSP系统设计的基本方法,并学会用C语言对DSP系统进行编程及DSP试验箱和相关软件的运用。
培养独立思考、独立收集资料、独立设计规定功能的单片机系统的能力;培养分析、总结及撰写技术报告的能力,本次课程设计目的在于:1、熟悉ICETEK-F2812-EDU实验箱上交通灯的控制方法;2、掌握F2812A的终端结构和对中断的处理流程;3、学习DSP的C语言定时和中断程序设计及运用中断程序控制程序流程;4、学习DSP程序的调试及编写,及运用观察变量的方法查看程序的运行情况。
2、设计分析2.1、设计任务本次设计名为LED和交通灯的定时显示,要求在ICETEK-F2812-EDU实验箱上实现指示灯和交通灯的同步定时闪烁。
2.2、设计要求硬件部分:在ICETEK-F2812-EDU实验箱上使指示灯和交通灯在定时器的定时中断中按照设计定时闪烁软件部分:搞清楚各个引脚功能。
2、熟悉ICETEK-F2812-EDU实验箱上交通灯的控制方法和控制流程。
3、TMS320F2812芯片介绍3.1 TMS320F2812芯片的简介TMS320F2812作为使用的DSP芯片。
它包含33个电源引脚(为使器件正常运行,所有电源引脚必须正确连接且不能悬空),时钟源模块,DSP有六种信号可以使DSP控制器复位。
所以在设计的初期,我把它分成了四个模块。
它们分别是:电平转换部分、晶振和复位部分、键盘部分和液晶显示。
其中复位采用电源复位的方式,由引脚PORESET引起。
为了可靠复位,其中高电平的有效时间至少6个CPU时钟周期。
3.2 关于TMS320F2812参数TMS320F2812的具体参数如下:1、主处理芯片:TMS320F2812,运行速度为150M。
2、工作速度可达150MIPS。
3、片上的RAM 18*16Bit。
4、片上扩展RAM 存储空间64K×16Bit。
5、自带的16路12bitA/D,最大采样速率12.5msps。
6、4路的DAC7617转换,100K/S,12Bit。
7、两路UART串行接口,符合RS232标准。
8、16路PWM输出。
9、1路CAN接口通讯。
10、片上128*16bit FLASH.自带128位加密位。
11、设计有用户可以自定义的开关和测试指示灯。
12、4组标准扩展连接器,为用户二次开发提供条件。
13、具有IEEE1149.1相兼容的逻辑扫描电路该电路仅用于测试和仿真。
14、4层板设计工艺,工作稳定可靠。
15、具有自启动功能设计,可以实现脱机工作。
16、可以选配多种应用接口板,包括语音板,网络板等。
3.3管脚的定义和说明P1接口主要是扩展评估板上空闲的DSP外设引脚,以便于定制用户的硬件环境。
注意:由于这组引脚是直接来自于F2812 DSP芯片,因此,这些引脚为TTL 3.3V标准,其输出最高电压为3.3V,如果要接入5V器件,外接时时要注意电平转换。
(在扩展板上使用3.3V-5V 兼容器件与扩展接口连接)。
3.4.1 ICETEK-F2812-A实物图左上脚为P1端口,右下角脚为P4端口。
3.4.2TMS320F2812引脚图图2 TMS320F2812引脚图3.5、ICETEK-F2812-EDU实验箱原理图3.5.1、S60x控制板结构图3.5.2、ICETEK-F2812-EDU实验箱原理图ICETEK-F2812-EDU实验箱原理图如图4所示:4、系统整体设计4.1、设计程序流程图4.2、实验效果图5、运行描述在运行时,首先应先在计算机上安装上CCS软件,然后把程序加载到Example中进行调试,如果调试出现错误,要进行修改。
若程序正常通过,则可将实验箱与计算机相连,然后安装实验箱的驱动,驱动安好后,打开开关,连接好后,即可将软件下载到DSP芯片中,运行,查看结果。
指示灯和交通灯在定时器的定时中断中按照设计定时闪烁。
6、软件的使用本次设计主要使用的是CCS软件,CCS是一种针对TMS320系列DSP的集成开发环境,在Windows操作系统下,采用图形接口界面,提供有环境配置、源文件编辑、程序调试、跟踪和分析等工具。
CCS有两种工作模式,即:软件仿真器模式:可以脱离DSP芯片,在PC机上模拟DSP 的指令集和工作机制,主要用于前期算法实现和调试。
硬件在线编程模式:可以实时运行在DSP芯片上,与硬件开发板相结合在线编程和调试应用程序。
CCS文件名介绍在使用CCS前,应该先了解以下软件的文件名约定(在编写程序时最好在某盘根目录下建立一个文件夹,将所有的用户文件放置该文件夹中,建议用字母作为所有文件的文件名,而不要用汉字或数字):project.pjt CCS定义的工程文件program.c c程序文件语言program.asm 汇编语言程序文件filename.lib 库文件project.cmd 连接命令文件program.obj 编译后的目标文件program.out 可在目标DSP上执行的文件,可在CCS监控下调试/执行project.wks 工作空间文件,可以记录你的工作环境设置。
programcfg.h54 头文件programcfg.s54 汇编原文件program.cdb CCS的设置数据库文件,是使用DSP/BIOS API必须的,其他没有使用DSP/BIOS API的程序也可以使用,当新建一个设置数据库时,会产生下面的文件。
7、课程设计总结本次课程设计,我选择的题目是LED和交通灯的定时显示,目的是在ICETEK-F2812-EDU 实验箱上实现指示灯和交通灯的同步定时闪烁。
虽然这是一个比较简单的任务,但是由于基础薄弱,好多东西都不甚明了,经过多次努力才勉强完成任务。
这次DSP课程设计历时两个星期,前面几天就是在寝室学习和熟悉CCS软件,学到了很多很多的东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
过程中也遇到了很多问题,不过及时的问同学解决问题,使我更加了解了DSP的原理。
通过这次设计,进一步加深了对DSP的了解,让我对它有了更加浓厚的兴趣。
特别是当每一步成功时,心里特别的开心。
这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,毕竟基础太差,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
总的来说,这次交通灯定时显示的设计还是比较成功的,在设计中遇到了很多问题,最后在老师的辛勤的指导和同学们的帮助下,终于克服重重困难完成任务,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,同时,对未来有了更多的信心。
最后,对给过我帮助的所有同学和指导老师再次表示忠心的感谢!8、参考文献ICETEK-F2812-A-USB-EDU教学实验系统软件实验指导9、软件设计9.1、程序代码#include "DSP281x_Device.h" // DSP281x Headerfile Include File#include "DSP281x_Examples.h" // DSP281x Examples Include File// ledunsigned int uLed[2][2]={ {0x10,0x48},{0,0x48}};// Prototype statements for functions found within this file.void Delay(unsigned int nTime);interrupt void cpu_timer0_isr(void);void Gpio_select(void);void Gpio_PortA(void);void Gpio_PortB(void);int i=0,nCount;unsigned int uLBD;#define LEDS *(int *)0xc0000#define T46uS 0x0d40#define CTRGR *(int *)0x108000#define CTRLCDCMDR *(int *)0x108001#define CTRKEY *(int *)0x108001#define CTRLCDCR *(int *)0x108002#define CTRCLKEY *(int *)0x108002#define CTRLCDLCR *(int *)0x108003#define CTRLCDRCR *(int *)0x108004#define CTRLA *(int *)0x108005#define CTRLR *(int *)0x108007Uint16 var1 = 0;Uint16 var2 = 0;Uint16 var3 = 0;Uint16 test_count = 0;Uint16 Test_flag = 0;Uint16 Test_var = 0;Uint16 Test_status[32];int jishu=0,uPort8000, nScanCode;int nCountLed,i;void main(void){ InitSysCtrl();//初始化cpuDINT;//关中断InitPieCtrl();//初始化pie寄存器IER = 0x0000;//禁止所有的中断IFR = 0x0000;InitPieVectTable();EALLOW; // This is needed to write to EALLOW protected registersPieVectTable.TINT0 = &cpu_timer0_isr;//指定中断服务子程序EDIS; // This is needed to disable write to EALLOW protected registers CpuTimer0.RegsAddr = &CpuTimer0Regs;// Initialize timer period to maximum:CpuTimer0Regs.PRD.all = 0x0FFF;// Initialize pre-scale counter to divide by 1 (SYSCLKOUT):CpuTimer0Regs.TPR.all = 0;CpuTimer0Regs.TIM.all = 0;CpuTimer0Regs.TPRH.all = 0;// Make sure timer is stopped:CpuTimer0Regs.TCR.bit.TSS = 1;CpuTimer0Regs.TCR.bit.SOFT = 1;CpuTimer0Regs.TCR.bit.FREE = 1;// Reload all counter register with period value:CpuTimer0Regs.TCR.bit.TRB = 1;CpuTimer0Regs.TCR.bit.TIE = 1;// Reset interrupt counters:CpuTimer0.InterruptCount = 0;StartCpuTimer0();//启动定时器0// Enable CPU INT1 which is connected to CPU-Timer 0:IER |= M_INT1;// Enable TINT0 in the PIE: Group 1 interrupt 7PieCtrlRegs.PIEIER1.bit.INTx7 = 1;Gpio_PortB();CTRGR=0; // 初始化ICETEK-CTRCTRGR=0x80;CTRGR=0;CTRLR=0; // 关闭东西方向的交通灯CTRLR=0x40; // 关闭南北方向的交通灯CTRGR=2;LEDS=0XFF;while(1){ GpioDataRegs.GPBDAT.bit.GPIOB5=1;LEDS=0X00;Delay(10);GpioDataRegs.GPBDAT.bit.GPIOB5=0;LEDS=0XFF;Delay(10);}}void Delay(unsigned int nDelay){int ii,jj,kk=0;for ( ii=0;ii<nDelay;ii++ ){for ( jj=0;jj<6400;jj++ ){kk++;}}}void Gpio_PortB(void){// GPIO Test #2:// Configure Upper 8 bits of Port as inputs and lower 8 bits as outputs// Loop back bits [7:0] to bits [15:8]// Don't set any input qualifiervar1= 0x0000; // sets GPIO Muxs as I/Osvar2= 0x00FF; // sets GPIO 15-8 DIR as inputs, 7-0 DIR as outputsvar3= 0x0000; // Don't set any input qualifierGpio_select();test_count = 0;Test_status[Test_var] = 0x0002;Test_var++;Test_status[Test_var] = 0xD0BE; // Set the default value of status// to "PASSED"GpioDataRegs.GPBCLEAR.all = 0x00FF; // Test Clearasm(" RPT #5 ||NOP");GpioDataRegs.GPBSET.bit.GPIOB5=1;}void Gpio_select(void){EALLOW;GpioMuxRegs.GPAMUX.all=var1; // Configure MUXs as digital I/Os or GpioMuxRegs.GPBMUX.all=var1; // peripheral I/OsGpioMuxRegs.GPDMUX.all=var1;GpioMuxRegs.GPFMUX.all=var1;GpioMuxRegs.GPEMUX.all=var1;GpioMuxRegs.GPGMUX.all=var1;GpioMuxRegs.GPADIR.all=var2; // GPIO PORTs as outputGpioMuxRegs.GPBDIR.all=var2; // GPIO DIR select GPIOs as output GpioMuxRegs.GPDDIR.all=var2;GpioMuxRegs.GPEDIR.all=var2;GpioMuxRegs.GPFDIR.all=var2;GpioMuxRegs.GPGDIR.all=var2;GpioMuxRegs.GPAQUAL.all=var3; // Set GPIO input qualifier valuesGpioMuxRegs.GPBQUAL.all=var3;GpioMuxRegs.GPDQUAL.all=var3;GpioMuxRegs.GPEQUAL.all=var3;EDIS;}interrupt void cpu_timer0_isr(void){//CpuTimer0.InterruptCount++;// Acknowledge this interrupt to receive more interrupts from group 1 PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;CpuTimer0Regs.TCR.bit.TIF = 1;CpuTimer0Regs.TCR.bit.TRB = 1;if ( nCount==0 ){LEDS=~LEDS;}nCount++; nCount%=194;}// No more.。