《dsp课程设计报告(秒表-)(共16页).doc》由会员分享,可在线阅读,更多相关《dsp课程设计报告(秒表-)(共16页).doc(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上DSP原理及C程序开发课程设计报告题 目 秒表 学 院 专 业 班 级 姓 名 学 号 指导教师 2011 年 11 月 30 日教师评语:总分:教师签名:专心-专注-专业目录一、 课程设计任务. .3二、TMS320F2812介绍 . .44.1 特点 . .44.2 系统框图 . .54.3 TSM320F2812 时钟 .6三、F2812 SCI模块.7 5.1 SCI概述 .7 5.2 SCI 特点 .75.3 SCI CPU接口 .75.4 SCI多处理器通信 .85.5 SCI的中断 .8四、程序代码设计 . .116.1 CPU Timers的初始化配置
2、程序代码. .116.2主程序代码. . . .14五、设计总结 . . .16六、参考文献 . .17一、课程设计任务通过TMS320F2812实现秒表的功能,其功能是时间送PC显示,每1秒变化一次。二、系统分析21设计要求(1)设置DSP的TMS320F2812芯片为Emulator工作模式;(2)设置GPIO相应管脚为输入或输出模式;(3)DSP芯片外接LCD作为输出,外接n个(数目不底于3个)单按键作为输入;(4)在程序中构建汉字字模,并能够使用查找法提取。22、设计思想 通过CCS软件开发平台和相应实验箱进行程序调试DSP外设控制设备开发扩展。用独立式控键控制DSP的GPIO管脚,使
3、用DSP芯片控制LCD来显示秒表的计数数字,用其中一个按键实现LCD的清屏,其它(4个)通过两个按键控制秒表的启停。三、TMS320F2812介绍3.1 特点 采用32-位定点DSP TMS320F2812150MHz,方便实现电机控制片上存储器:FLASH: 128K X16-位SRAM: 18K X16-位Boot ROM: 4K X16-位OPT ROM: 1K X16-位其中FLASH,OPT ROM和8K X16-位SRAM受密码保护,保护用户程序。片上外设:PWM: 12路QEP: 6通道ADC: 2X8通道,12-位,80ns转换时间,03V量程SCI异步串口: 2通道McBSP
4、同步串口: 2通道SPI同步串口: 1通道 eCAN总线: 1通道 外扩SRAM,最大容量为512K X 16位,基本配置为64K X 16位 外扩RTP实时时钟+512 X 8-位EERPROM 外扩4通道,12-位分辨率 2路SCI进行收发驱动,接口标准RS232/RS422/RS485可配置 提供看门狗,电源监视,上电复位,手动复位,系统可靠,稳定 标准化的扩展总线 3.2 系统框图 全功能框图系统电路原理图如下:4.3 TSM320F2812 时钟TSM320F2812 上有多个部件需要时钟,CPU,看门狗电路,ADC,事件管理器等片上外设。F2812 的CPU时钟电路如下图所示:四、
5、TMS320F2812 SCI模块和CPU定时器模块以及串口调试器4.1 SCI概述 SCI 模块支持在CPU和其他异步外设之间的数字通讯。SCI的串口接收和发送均为双缓冲,接收和发送都有独立的使能和中断位。在全双工模式下,两者可以独立或同步运行。为了群豹数据的完整性,SCI模块检查接收数据的断点,校验位和帧错误。4.2 SCI 特点F2812的SCI具有如下特性:l 两根外部信号线引脚:SCITXD/SCIRXD l 异步串行、标准非归零(NRZ)格式l 16位波特率64K种可编程通信速率,增强型自动波特率检测硬件逻辑l 数据格式灵活l 接收数据出错检测 l 2种多处理器唤醒模式 l 半双工
6、、全双工l 双缓冲接收和发送l 发送、接收独立的中断使能和中断位l 增强型发送、接收16级FIFOl 13个8位SCI模块控制寄存器l 发送、接收可采用中断或状态标志位查询编程方式SCI模块方块图如下:4.3 SCI CPU接口SCI CPU接口如下图所示:4.4 SCI多处理器通信同一个串行线路上,一次多处理器通信:l 一个发送者(Talker)l 多个接收者(Listener)实现与一个Listener的互传l 地址字节 数据块第一个字节是地址字节,被所有Listener读取地址正确的接收器接收随后的数据;地址不正确的Listener等待下一个地址字节。l SLEEP位 所有的均置SLEE
7、P位为1,仅在检测到地址字节时才被中断当地址与软件设置地址一致时,用户程序清除SLEEP位,此时方可以接收数据字节,产生接收数据中断。识别地址字节l 空闲线模式:在地址字节前留一段静态空间没有附加地址位,数据10个, 效率比地址位模式高一般应用于典型的非多处理器的SCI通信l 地址位模式:每个字节增加一个地址附加位小块数据时更有效,数据块之间不需要等待高速传送时,程序不可避免地要加入空闲位。SCI的TX和RX控制特点l 用户选择多处理器工作模式,ADDR/IDLE MODE位,SCICCR两种模式下都可以控制SCI发送器/接收器的工作状态l 发送唤醒标志,TXWAKE位,SCICTL1l 接收
8、唤醒标志,RXWAKE位,SCIRXSTl 休眠标志,SLEEP位,SCICTL1接收步骤(1) 接收地址块时,SCI端口唤醒并申请中断读取第一帧数据,其中包括目的地址(2) 中断进入ISR,核对地址与保存在内存中的器件地址(3) 地址相符,则CPU清除SLEEP位并读块的其余数据如果不符,则退出ISR,保持SLEEP位在下一个块开始之前不接收中断。4.5 SCI的中断l SCI模块有独立的发送/接收外围中断向量l 外围中断请求可以是最高优先级,也可以是低优先级(1)由PIE控制器的优先级控制位决定(2)接收优先级 发送优先级l RX/BK INTENA(SCICTRL21)=1: (1) S
9、CI接收到完整的帧,且RXSHFSCIRXBUF RXRDY(SCIRXST6)=1,产生中断(2) 间断测试条件发生(丢失一个停止位后保持连续10个低电平) RBKDT(SCIRXST5)=1,产生中断l TX INTENA(SCICTRL20)=1:(1) SCITXBUFTXSHF TXRDY(SCICTL27)=1,产生中断l RX ERROR INTENA(SCICTRL16)=1:(1) 传送出错 RX ERROR(SCIRXST7)=1,产生中断五、程序代码设计 5.1 CPU Timers的初始化配置程序代码#include DSP28_Device.hstruct CPUTI
10、MER_VARS CpuTimer0;struct CPUTIMER_VARS CpuTimer1;struct CPUTIMER_VARS CpuTimer2;/-/ InitCpuTimers: /-/ This function initializes all three CPU timers to a known state./void InitCpuTimers(void)/ Initialize address pointers to respective timer registers:CpuTimer0.RegsAddr = &CpuTimer0Regs;CpuTimer1.R
11、egsAddr = &CpuTimer1Regs;CpuTimer2.RegsAddr = &CpuTimer2Regs;/ Initialize timer period to maximum:CpuTimer0Regs.PRD.all = 0xFFFFFFFF;CpuTimer1Regs.PRD.all = 0xFFFFFFFF;CpuTimer2Regs.PRD.all = 0xFFFFFFFF;/ Initialize pre-scale counter to divide by 1 (SYSCLKOUT):CpuTimer0Regs.TPR.all = 0;CpuTimer0Regs
12、.TPRH.all = 0;/ Make sure timers are stopped:CpuTimer0Regs.TCR.bit.TSS = 1; CpuTimer1Regs.TCR.bit.TSS = 1; CpuTimer2Regs.TCR.bit.TSS = 1; / Reload all counter registers with period values:CpuTimer0Regs.TCR.bit.TRB = 1; CpuTimer1Regs.TCR.bit.TRB = 1; CpuTimer2Regs.TCR.bit.TRB = 1; / Reset interrupt c
13、ounters:CpuTimer0.InterruptCount = 0;CpuTimer1.InterruptCount = 0;CpuTimer2.InterruptCount = 0;/-/ ConfigCpuTimer: /-/ This function initializes the selected timer to the period specified/ by the Freq and Period parameters. The Freq is entered as MHz/ and the period in uSeconds. The timer is held in
14、 the stopped state/ after configuration./void ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period)Uint32 temp;/ Initialize timer period:Timer-CPUFreqInMHz = Freq;Timer-PeriodInUSec = Period;temp = (long) (Freq * Period);Timer-RegsAddr-PRD.all = temp;/ Set pre-scale counter to divide
15、 by 1 (SYSCLKOUT):Timer-RegsAddr-TPR.all = 0;Timer-RegsAddr-TPRH.all = 0;/ Initialize timer control register:Timer-RegsAddr-TCR.bit.POL = 0; / 0 = Pulse LowTimer-RegsAddr-TCR.bit.TOG =0; / 0 = No Toggle, POL bit defines actionTimer-RegsAddr-TCR.bit.TSS = 1; / 1 = Stop timer, 0 = Start/Restart Timer
16、Timer-RegsAddr-TCR.bit.TRB = 1; / 1 = reload timerTimer-RegsAddr-TCR.bit.FRCEN = 0; / Force output enable (not used)Timer-RegsAddr-TCR.bit.PWIDTH = 7; / 7+1 = 8 SYSCLKOUT cycle pulse width Timer-RegsAddr-TCR.bit.SOFT = 1;Timer-RegsAddr-TCR.bit.FREE = 1; / Timer Free RunTimer-RegsAddr-TCR.bit.TIE = 1
17、; / 0 = Disable/ 1 = Enable Timer Interrupt/ Reset interrupt counter:Timer-InterruptCount = 0;/=/ No more.5.2主程序代码#include #include DSP28_Device.hunsigned int Rbuf100, Tbuf100;unsigned int Ri = 0;unsigned int Ti = 0;unsigned int Tn = 0;/=unsigned char title = DSP课程设计-秒表 rn;unsigned char nunm = rn;un
18、signed int cnt = 0;interrupt void cpu_timer0_isr();/void main(void)int16 i;int16 flag=0;/*初始化系统*/InitSysCtrl();/*关中断*/DINT;IER = 0x0000;IFR = 0x0000;/*初始化PIE中断*/InitPieCtrl();/*初始化PIE中断矢量表*/InitPieVectTable();EALLOW;PieVectTable.TINT0 = &cpu_timer0_isr;EDIS;/*初始化SCIA寄存器*/ InitSci(); InitCpuTimers();
19、 ConfigCpuTimer(&CpuTimer0,150,); StartCpuTimer0(); IER|=M_INT1; PieCtrl.PIEIER1.bit.INTx7 = 1; EINT; ERTM; /*开中断*/EINT;/ Enable Global interrupt INTMERTM;/ Enable Global realtime interrupt DBGMfor(;)if(flag=0)for(i=0; titlei!=0; i+)Tbufi = titlei;Tn = i;Ti = 0;flag = 1;if(flag=2)for(i=0; nunmi!=0;
20、i+)Tbufi = nunmi;Tn = i;Ti = 0;flag = 3;if(flag=4)/if(SciaTx_Ready() = 1) & (Tn!=0)SciaRegs.SCITXBUF = TbufTi;Ti += 1;Tn -= 1;if(Tn=0)Ti = 0;flag += 1;if(SciaRx_Ready() = 1)RbufRi = SciaRegs.SCIRXBUF.all;if(RbufRi=0x0a)for(i=0; i TBufint zc;cnt+;cnt%=100;zc=cnt;/*Tbuf3=zc%10+0;zc=zc/10;Tbuf2=zc%10+0
21、;zc=zc/10;*/Tbuf1=zc%10+0;zc=zc/10;Tbuf0=zc%10+0;Tn = 4;Ti = 0;interrupt void cpu_timer0_isr(void)Conv();CpuTimer0.InterruptCount+;PieCtrl.PIEACK.all = PIEACK_GROUP1;/=/ No more./=六、设计总结 在这次dsp设计中,充分锻炼了我的独立性,设计自己的方案,锻炼自己独立思考的能力。当然,一个项目仅靠一个人的力量是有限的,另一方面,大家又互相帮助,遇到问题时,先是独立思考,当实在不行时。我们可以一起讨论,要是在解决不了的话,我们就去请教老师,总之是尽量达成想要实现的结果。通过设计,也使我们加深了对所学知识的理解,通过实践运用所学的知识,对我们很有帮助,只有通过动手发现自己的不足,才能在以后的道路上改进。时间的分配也是问题,做什么事都要将时间合理的布局,只有时间安排好了,做事的效率才能提起来。总之,通过课程设计,我得到了很多的经验和教训。七、参考文献1万山明,TMS320F281xDSP原理与应用实例,北京航空航天大学出版社,2007.7。2DSP乐园,3 李宏、张家田,液晶显示器件应用技术,机械工业出版社,2005.34郑红、王鹏、董云凤、吴冠,DSP应用系统设计实践,北京航空航天大学出版社,2006.4。
限制150内