TMS320VC5402定时器实验.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
TMS320VC5402定时器实验.doc

TMS320VC5402定时器实验 一、 实验目的 1. 了解DSP汇编程序与C语言程序的构成; 2. 了解DSP程序各段的含义; 3. 熟悉如何编写中断服务程序; 4. 掌握片内定时器的设置方法; 5. 掌握长时间间隔的定时器的处理 二 、实验内容(要求) 1. DSP的初始设置; 2. DSP中断向量表的建立; 3. 定时器的使用; 三 、实验原理(背景知识) TMS320VC5402定时器中有一个可编程的片上定时器,总共包含有三个可由用户设置的寄存器,并可以申请主机的中断。这三个寄存器分别为 TIM、PRD、TCR。 时间寄存器(TIM)是一个 16 位的存贮器映射寄存器,它的值由周期寄存器来进行装载,并且做减一操作。 周期寄存器(PRD)是一个 16 位的存贮器映射寄存器,它是用来重装时间寄存器(TIM)寄存器的值的。 定时器控制寄存器(TCR)是一个 16 位的存贮器映射寄存器,包含了定时器的控制与状态信息。 定时器的工作过程: ①?定时分频系数和周期数分别装入TCD和PRC寄存器中; ②?每来一个定时脉冲CLKOUT,计数器PSC减1; ③?当PSC减至0时,PSC产生借位信号; ④ 在PSC的借位信号作用下,TIM减1计数,同时将分频系数装入PSC,重新计数; ⑤?当TIM减到0时,定时时间到,由借位产生定时中断TINT和定时输出TOUT并将PRD中的时间常数重新装入TIM。 定时器的定时时间为: 定时周期 = CLKOUT×(TDDR+1)×(PRD+1) 程序框图如下: 四 、实验步骤 1、打开CCS,并设置好相对应的参数,显示硬件连接成功后,编写主函数。 2、主函数中先初始化,然后关中断,设置定时的相对应寄存器,打开中断,等待中断的到来,定时中断服务函数中对输出引脚取反,然后实现了LED的亮灭变化。为了改变定时的长度,还引入了按键中断服务,在按键中断服务函数中每按一下健,增加定时的长度。 3、接着编写中断向量表,中断向量表只要和主函数的中断一一对应就行。 4、添加支持c语言的库函数的头文件,编译,看一下会产生哪些链接文件,然后编写链接文件。 5、编译通过后,下载到板子上,验证是否有逻辑错误,然后进行修改。 五、程序源代码 1、主函数: #include timer.h int t0_count,coeff; void main() { *CLKMD=0x0000; while(*CLKMD0x0001); *CLKMD=0x47ff; *PMST=0x00a0; coeff=1; t0_count=250*coeff; asm( ssbx intm); //*ST1=*ST1|0x0800; //INTM=1 *TCR=0x0010; *PRD=9999; *TIM=9999; *TCR=0x669; *IFR=0x0108; *IMR=0x0108; asm( rsbx intm); //*ST1=*ST10xf7ff; //INTM=0; // while(1) { while(t0_count0); t0_count=250*coeff; if(*ST10x2000) { *ST1=*ST10xDFFF; } else { *ST1=*ST1|0x2000; } } } interrupt void timer() { t0_count--; } interrupt void key_press() { coeff++; if(coeff5){coeff=1;} } 中断函数: .ref _c_int00 .ref _timer .ref _key_press .sect .vectors rs: BD _c_int00 nop nop ;Rest nmi: .space 4*16 ;NMI, SINT16 sint17:.space 4*16 ;SINT17 sint18: .space 4*16 ;SINT18 sint19: .space 4*16 ;SINT19 sint20: .space 4*16 ;SINT20 sint21: .space 4*16 ;SINT21 sint22: .space 4*16 ;SINT22 sint23: .space 4*16 ;SINT23 sint24: .space 4*16 ;SINT24 sint

文档评论(0)

tk2469tk + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档