流水灯定时控制_第1页
流水灯定时控制_第2页
流水灯定时控制_第3页
流水灯定时控制_第4页
流水灯定时控制_第5页
已阅读5页,还剩23页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、流水灯定时控制流水灯定时控制定时器设置要领软件设计CMD详解CPU定时器结构定时器结构CPU-TIMER的基本工作流程: 首先把周期寄存器PRDH:PRD(32位)的值加载到计数寄存器TIMH:TIM(32位); 然后计数器对SYSCLKOUT时钟递减计数。当计数器等于0时,定时器中断输出信号将产生一个中断脉冲。 计数寄存器TIM周期寄存器PRD控制寄存器TCR预定表计数器低位及高位TPR,TPRH定时器寄存器简介定时器寄存器简介 计数寄存器计数寄存器(TIMERxTIM) (其中,x=0,1,2,下同) 32 位计数寄存器(TIMH:TIM)中,TIM 为计数寄存器低16 位,TIMH 为计

2、数寄存器高16 位。每一个定时器时钟周期(TDDRH:TDDR+1)/ SYSCLKOUT,TIM 减1,其中,(TDDRH:TDDR)是定时器预定标分频值。当(TIMH:TIM)减到0 时,(TIMH:TIM)重装定时器周期值(PRDH: PRD),同时产生定时器中断TINT 周期寄存器(周期寄存器(TIMERxPRDTIMERxPRD) 32 位周期寄存器(PRDH:PRD)中,PRD 为周期寄存器低16 位,PRDH 为周期寄存器高16 位。当(TIMH:TIM)减到0 时,在下一个定时器输入时钟周期开始时,(TIMH:TIM)将重装(PRDH:PRD)的周期值;或者当定时器控制寄存器(

3、TCR)的TRB 置位(节点赋值为1)时,(PRDH:PRD)的周期值也装入(TIMH:TIM) 定时器分频寄存器(定时器分频寄存器(TDDRH:TDDRTDDRH:TDDR) 16 位分频寄存器(TDDRH:TDDR)中,TDDR 为分频寄存器低8 位,TDDRH 为分频寄存器高8 位。每过一个定时器时钟周期,定时器计数器寄存器(TIMH:TIM)减1。当预定标器计数器(PSCH:PSC)减到0,一个系统时钟周期后,(TDDRH:TDDR)的值重装(PSCH:PSC),同时(TIMH:TIM)减1。无论何时,用软件置定时器重装位(TRB)为1,(TDDRH:TDDR)重装(PSCH:PSC)

4、(装载寄存器 ) 预定标计数器低位及高位寄存器预定标计数器低位及高位寄存器(TIMERxTPRTIMERxTPR,TIMERxTPRHTIMERxTPRH) 定时器预定标计数器低位及高位寄存器结构及位域定义见图,它由16位分频寄存器(TDDRH:TDDR)和16 位预定标器计数器(PSCH:PSC)组合而成 控制寄存器(控制寄存器(TIMERxTCRTIMERxTCR) TCR 是一个16 位的寄存器它在所有运算符中优先级最高 */Timer-RegsAddr-TCR.bit.TSS=1;/停止定时器Timer-RegsAddr-TCR.bit.TRB=1; /重装定时器Timer-RegsA

5、ddr-TCR.bit.SOFT=1;Timer-RegsAddr-TCR.bit.FREE=1; /定时器自由运行Timer-RegsAddr-TCR.bit.TIE=1; /使能定时器中断Timer-InterruptCount=0; /复位中断计数器 定时器控制寄存器定时器控制寄存器TIMERxTCR的定义的定义控制定时器速率的几个因素控制定时器速率的几个因素 定时器时钟定时器时钟 定时器时钟源即为系统时钟SYSCLKOUT,改变系统时钟SYSCLKOUT 可控制定时器速率 定时器周期值的设置定时器周期值的设置 定时器周期寄存器(PRDH:PRD)的周期值用于重装定时器计数器(TIMH:

6、TIM)。周期值的大小决定了(TIMH:TIM)减10 的快慢 定时器分频器值的设置定时器分频器值的设置 (TDDRH:TDDR)的值起到了对系统时钟分频的作用。当(TDDRH:TDDR)=0 时,定时器时钟源时钟直接采用系统时钟,不分频,否则分频为:定时器时钟=SYSCLKOUT/(TDDRH:TDDR)+1) 启动定时器启动定时器0 0 步骤步骤 在通过InitCpuTimers()函数对定时器0 进行初始化(默认状态)之后,按ConfigCpuTimer 函数中的步骤进行1 1、CPU CPU 定时器定时器0 0 时钟配置时钟配置 CPU 定时器的时钟源与系统时钟SYSCLKOUT 同步

7、。因此,对定时器时钟源的配置实际上就是对系统时钟SYSCLKOUT 的配置。具体配置可参见DSP281x_ SysCtrl.c 文件中的InitPll()函数及式2 2、定时器、定时器0 0中断的设置中断的设置 使能定时器0 中断有两条必须的指令: CpuTimer0Regs.TCR.bit.TSS= 0; /启动定时器 Timer- RegsAddr- TCR.bit.TIE=1; /使能定时器中断 如果缺少上面两条指令中的一条,将不会产生中断。使能使能PIE PIE 级及级及CPU CPU 级中断向量级中断向量由下面4 类指令完成: 1、先找出中断向量在PIE 向量表中所在的组及在这组中所

8、处的优先级。经查TINT0是第1 组第7 个中断,因此先通过PIE 级指令“PieCtrlRegs.PIEIER1.bit.INTx7 =1;”,使能PIE 第1 组第7 个TINT0 中断(INTx7 由头文件定义为PIE 中断使能寄存器(PIEIER)的第7 位)。 2、通过CPU 级的赋值指令“IER |= M_INT1;”,使能第1 组(M_INT1 由头文件定义为0 x0001,指向第1 组),即把TINT0 中断汇集到CPU 级的INT1 中断线上。 3、通过“EINT;”指令使能全局中断,实际指令为:PieCtrlRegs.PIEIER1.bit.INTx7= 1; /使能PIE

9、 中的TINT0,1 组第7 个中断 IER |= M_INT1; /使能第1 组中断 EINT; /使能INTM 全局中断 4、这里用了按位或复合运算符“|=”,其用意是不破坏IER 原有结构。如果程序仅此一个中断,可以用 “IER = 0 x0001;”指令,否则,会破坏IER 原有结构。使能PIE 向量表,由下面一条指令完成。PieCtrlRegs.PIECRTL.bit.ENPIE=1; 实际上这条指令包含在初始化PIE 向量表InitPieVectTable()函数中,主程序对这个函数已经调用3 3、定时器、定时器0 0设置设置 (ConfigCpuTimer)(ConfigCpuT

10、imer)函数的说明函数的说明 在共享文件DSP281x_CpuTimers.c 中,包含了两个函数:一个是定时器初始化函数InitCpuTimers(),另一个就是CPU 定时器配置函数ConfigCpuTimer() ConfigCpuTimer() ConfigCpuTimer() 函数函数 1. void ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period) 2. Uint32 temp; 3. /* 定时器周期初始化。将后两个实参的乘积作为定时器的周期值存入定时器周期寄存器 */ 4. Timer-

11、CPUFreqInMHz = Freq; 5. Timer-PeriodPeriodInUSec = Period; 6. temp = (long) (Freq * Period); 7. Timer-RegsAddr-PRD.all = temp; /定时器周期PRD = Freq * Period。当定时器计数器(TIMH:TIM)减到0 /时的下一个定时器周期,PRD 值重新装入(TIMH:TIM) /* 设置预定标计数器为129 个时钟源周期,即(129/SYSCLKOUT)*/ 8. / Timer-RegsAddr-TPR.all = 0 x80; 9. / Timer-Regs

12、Addr-TPRH.all = 0 x00; 13. /* 以下3 条指令可代替上面两条指令访问TPR */ 14. CpuTimer0.RegsAddr = &CpuTimer0Regs; /取CpuTimer0Regs 地址 15. CpuTimer0Regs.TPR.all = 0 x80; /TDDR = 0 x 0080 16. CpuTimer0Regs.TPRH.all = 0 x00; /TDDRH= 0 x 0000 /分频器值 TDDRH:TDDR=0 x0080。该值决定定时器时钟周期。计数器TIM 以此 /为周期进行减1 计数。减到0 时的下一个定时器周期,PR

13、D 值重新装入(TIMH:TIM)定时器控制寄存器初始化。“.”是成员(分量)运算符,它在所有运算符中优先级最高 */ 17. Timer-RegsAddr-TCR.bit.TSS = 1; /停止定时器 18.Timer-RegsAddr-TCR.bit.TRB = 1; /重装定时器19. Timer-RegsAddr-TCR.bit.SOFT = 1;20. Timer-RegsAddr-TCR.bit.FREE = 1; /定时器自由运行 21. Timer-RegsAddr-TCR.bit.TIE = 1; /使能定时器中断22. Timer-InterruptCount = 0;

14、/复位中断计数器 23. 设计软件设计软件下载代码到下载代码到DSPDSP芯片、芯片、RUNRUN程序程序步骤:1、点开CCS3.12、DEBUG-CONNECT(建立socket连线) socket用于描述IP地址和端口 3、project-新建CPUTimer_test.pjt,导入外设头文件、公共示例代码、写入用户程序代码4、rebulid all5、file-load program-GPIO_Test.out -run CMDCMD详解详解 CMD主要是用来分配rom和ram空间用的,它告诉链接程序怎样计算地址和分配空间.所以不同的芯片就有不同大小的rom和ram.放用户程序的地方也

15、不尽相同.所以要根据芯片进行修改.分两部分.MEMORY和SECTIONS. RAM(易挥发性随机存取存储器),高速存取,读写时间相等,且与地址无关。 ROM(只读存储器)断电后信息不丢失,取速度很低且不能改写 281X采用分页制,PAGE0放程序空间,PAGE1放数据空间SECTIONS MEMORY PAGE 0 . PAGE 1.SECTIONS vectors . reset . MEMORY是用来指定芯片的rom和ram的大小和划分出几个区间.PAGE 0 对应rom,PAGE 1对应ram。PAGE里包含的区间名字与其后面的参数反映了该区间的起始地址和长度MEMORY PAGE 0

16、: VECS: origin = 00000h, length = 00040hLOW: origin = 00040h, length = 03FC0hSARAM: origin = 04000h, length = 00800hB0: origin = 0FF00h, length = 00100hPAGE 1: B0: origin = 00200h, length = 00100hB1: origin = 00300h, length = 00100hB2: origin = 00060h, length = 00020hSARAM: origin = 08000h, length =

17、 00800h SECTIONS:在程序里添加段名. 用来指定该段名以下,另一个段名以上的程序(属于PAGE0)或数据(属于PAGE1)放到“”符号后的空间名字所在的地方 SECTIONS .text : LOW PAGE 0.cinit : LOW PAGE 0.switch : LOW PAGE 0.const : SARAM PAGE 1.data : SARAM PAGE 1.bss : SARAM PAGE 1.stack : SARAM PAGE 1.sysmem : SARAM PAGE 1 CMDCMD文件由三部分组成:文件由三部分组成:(1) 输入输出定义;(2) MEMORY命令;(3) SECTION命令。 输入/输出定义:这一部分,可以通过ccs的“Build Option.”菜单设置 obj 链接的目标文件lib 链接的库文件map 生成的交叉索引文件out 生成的可执行代码 存储模型说明:存储模型说明: .cinit 存放程序中的变量初值和常量 .const 存放程序中的字符常量、浮点常量和用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论