完整word版DSP课程设计 交通灯的定时显示要点.docx
《完整word版DSP课程设计 交通灯的定时显示要点.docx》由会员分享,可在线阅读,更多相关《完整word版DSP课程设计 交通灯的定时显示要点.docx(18页珍藏版)》请在冰豆网上搜索。
完整word版DSP课程设计交通灯的定时显示要点
DSP课程设计报告
题目:
交通灯的定时显示
班级:
11级电信二班
姓名:
xxxx
学号:
xxxxxxxxxxxxx
指导老师:
xxx
3.5、ICETEK-F2812-EDU实验箱原理图…………………………………………………..7
6、软件的使用:
ccs介绍………………………………………………………………………….9
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.1TMS320F2812芯片的简介
TMS320F2812作为使用的DSP芯片。
它包含33个电源引脚(为使器件正常运行,所有电源引脚必须正确连接且不能悬空),时钟源模块,DSP有六种信号可以使DSP控制器复位。
所以在设计的初期,我把它分成了四个模块。
它们分别是:
电平转换部分、晶振和复位部分、键盘部分和液晶显示。
其中复位采用电源复位的方式,由引脚PORESET引起。
为了可靠复位,其中高电平的有效时间至少6个CPU时钟周期。
3.2关于TMS320F2812参数
TMS320F2812的具体参数如下:
1、主处理芯片:
TMS320F2812,运行速度为150M。
2、工作速度可达150MIPS。
3、片上的RAM18*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*16bitFLASH.自带128位加密位。
11、设计有用户可以自定义的开关和测试指示灯。
12、4组标准扩展连接器,为用户二次开发提供条件。
13、具有IEEE1149.1相兼容的逻辑扫描电路该电路仅用于测试和仿真。
14、4层板设计工艺,工作稳定可靠。
15、具有自启动功能设计,可以实现脱机工作。
16、可以选配多种应用接口板,包括语音板,网络板等。
3.3管脚的定义和说明
P1接口主要是扩展评估板上空闲的DSP外设引脚,以便于定制用户的硬件环境。
注意:
由于这组引脚是直接来自于F2812DSP芯片,因此,这些引脚为TTL3.3V标准,其输出最高电压为3.3V,如果要接入5V器件,外接时时要注意电平转换。
(在扩展板上使用3.3V-5V兼容器件与扩展接口连接)。
表1管脚的定义及管脚的说明
管脚号
管脚名
说明
1
+5v电源
有POWER提供+5V电源
2
+5v电源
有POWER提供+5V电源
3
PWM1
PWM1输出引脚
4
PWM2
PWM2输出引脚
5
PWM3
PWM3输出引脚
6
PWM4
PWM4输出引脚
7
PWM5
PWM5输出引脚
8
PWM6
PWM6输出引脚
9
PWM7
PWM7输出引脚
10
PWM8
PWM8输出引脚
11
PWM9
PWM9输出引脚
12
T1PWM
T1输出引脚
13
T2PWM
T2输出引脚
14
T3PWM
T3输出引脚
15
T4PWM
T4输出引脚
16
T1CTRP
定时器1比较输出
17
GND
地线
18
GND
地线
19
T2CTRP
定时器2比较输出
20T
T3CTRP
定时器3比较输出
21
T4CTRP
定时器4比较输出
22
C1CTRIP
比较器1比较输出
23
C2CTRP
比较器2比较输出
24
C3CTRP
比较器3比较输出
25
TDIRA
定时器计数方向选择信号A
26
TCKINA
定时器时钟输入A
27
SCITXB
异步串口TX端B
28
SCIRXB
异步串口RX端B
29
SPSIMA
SPI从收主发端
30
SPSOMA
SPI主发从收端
31
SPICLKA
SPI时钟
32
SPISTEA
SPISlave设备发送始能
33
GND
地线
34
GND
地线
3.4F2812结构图
3.4.1ICETEK-F2812-A实物图
左上脚为P1端口,右下角脚为P4端口。
3.4.2TMS320F2812引脚图
图2TMS320F2812引脚图
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"//DSP281xHeaderfileIncludeFile
#include"DSP281x_Examples.h"//DSP281xExamplesIncludeFile
//led
unsignedintuLed[2][2]={{0x10,0x48},{0,0x48}
};
//Prototypestatementsforfunctionsfoundwithinthisfile.
voidDelay(unsignedintnTime);
interruptvoidcpu_timer0_isr(void);
voidGpio_select(void);
voidGpio_PortA(void);
voidGpio_PortB(void);
inti=0,nCount;
unsignedintuLBD;
#defineLEDS*(int*)0xc0000
#defineT46uS0x0d40
#defineCTRGR*(int*)0x108000
#defineCTRLCDCMDR*(int*)0x108001
#defineCTRKEY*(int*)0x108001
#defineCTRLCDCR*(int*)0x108002
#defineCTRCLKEY*(int*)0x108002
#defineCTRLCDLCR*(int*)0x108003
#defineCTRLCDRCR*(int*)0x108004
#defineCTRLA*(int*)0x108005
#defineCTRLR*(int*)0x108007
Uint16var1=0;
Uint16var2=0;
Uint16var3=0;
Uint16test_count=0;
Uint16Test_flag=0;
Uint16Test_var=0;
Uint16Test_status[32];
intjishu=0,uPort8000,nScanCode;
intnCountLed,i;
voidmain(void)
{InitSysCtrl();//初始化cpu
DINT;//关中断
InitPieCtrl();//初始化pie寄存器
IER=0x0000;//禁止所有的中断
IFR=0x0000;
InitPieVectTable();
EALLOW;//ThisisneededtowritetoEALLOWprotectedregisters
PieVectTable.TINT0=&cpu_timer0_isr;//指定中断服务子程序
EDIS;//ThisisneededtodisablewritetoEALLOWprotectedregisters
CpuTimer0.RegsAddr=&CpuTimer0Regs;
//Initializetimerperiodtomaximum:
CpuTimer0Regs.PRD.all=0x0FFF;
//Initializepre-scalecountertodivideby1(SYSCLKOUT):
CpuTimer0Regs.TPR.all=0;
CpuTimer0Regs.TIM.all=0;
CpuTimer0Regs.TPRH.all=0;
//Makesuretimerisstopped:
CpuTimer0Regs.TCR.bit.TSS=1;
CpuTimer0Regs.TCR.bit.SOFT=1;
CpuTimer0Regs.TCR.bit.FREE=1;
//Reloadallcounterregisterwithperiodvalue:
CpuTimer0Regs.TCR.bit.TRB=1;
CpuTimer0Regs.TCR.bit.TIE=1;
//Resetinterruptcounters:
CpuTimer0.InterruptCount=0;
StartCpuTimer0();//启动定时器0
//EnableCPUINT1whichisconnectedtoCPU-Timer0:
IER|=M_INT1;
//EnableTINT0inthePIE:
Group1interrupt7
PieCtrlRegs.PIEIER1.bit.INTx7=1;
Gpio_PortB();
CTRGR=0;//初始化ICETEK-CTR
CTRGR=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);
}
}
voidDelay(unsignedintnDelay)
{
intii,jj,kk=0;
for(ii=0;ii{
for(jj=0;jj<6400;jj++)
{
kk++;
}
}
}
voidGpio_PortB(void)
{
//GPIOTest#2:
//ConfigureUpper8bitsofPortasinputsandlower8bitsasoutputs
//Loopbackbits[7:
0]tobits[15:
8]
//Don'tsetanyinputqualifier
var1=0x0000;//setsGPIOMuxsasI/Os
var2=0x00FF;//setsGPIO15-8DIRasinputs,7-0DIRasoutputs
var3=0x0000;//Don'tsetanyinputqualifier
Gpio_select();
test_count=0;
Test_status[Test_var]=0x0002;
Test_var++;
Test_status[Test_var]=0xD0BE;//Setthedefaultvalueofstatus
//to"PASSED"
GpioDataRegs.GPBCLEAR.all=0x00FF;//TestClear
asm("RPT#5||NOP");
GpioDataRegs.GPBSET.bit.GPIOB5=1;
}
voidGpio_select(void)
{
EALLOW;
GpioMuxRegs.GPAMUX.all=var1;//ConfigureMUXsasdigitalI/Osor
GpioMuxRegs.GPBMUX.all=var1;//peripheralI/Os
GpioMuxRegs.GPDMUX.all=var1;
GpioMuxRegs.GPFMUX.all=var1;
GpioMuxRegs.GPEMUX.all=var1;
GpioMuxRegs.GPGMUX.all=var1;
GpioMuxRegs.GPADIR.all=var2;//GPIOPORTsasoutput
GpioMuxRegs.GPBDIR.all=var2;//GPIODIRselectGPIOsasoutput
GpioMuxRegs.GPDDIR.all=var2;
GpioMuxRegs.GPEDIR.all=var2;
GpioMuxRegs.GPFDIR.all=var2;
GpioMuxRegs.GPGDIR.all=var2;
GpioMuxRegs.GPAQUAL.all=var3;//SetGPIOinputqualifiervalues
GpioMuxRegs.GPBQUAL.all=var3;
GpioMuxRegs.GPDQUAL.all=var3;
GpioMuxRegs.GPEQUAL.all=var3;
EDIS;
}
interruptvoidcpu_timer0_isr(void)
{
//CpuTimer0.InterruptCount++;
//Acknowledgethisinterrupttoreceivemoreinterruptsfromgroup1
PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;
CpuTimer0Regs.TCR.bit.TIF=1;
CpuTimer0Regs.TCR.bit.TRB=1;
if(nCount==0)
{
LEDS=~LEDS;
}
nCount++;nCount%=194;
}
//Nomore.