概述
DSP28335定时器学习
- 官方框图
- 官方例程分析(LEDBLINK)
查看了很多视频,对于定时器的寄存器并没有一个很详细的描述,基本是一笔带过,所以记录下学习的过程
官方框图
简单描述下这个图的意思
定时器需要确认的无非就是几个值,时钟源,预分频,自动重装,中断触发,复位的状态,知晓这个看这张图就很清晰了,结合官方的寄存器描述,可以知道28335的定时器结构,
寄存器TDDR和PRD是预设的值,PSC和TIM是被减的数,复位的时候PSC和TIM都为0
从这张图可以归下类:
- 定时器的时钟:
- 控制的SYSCLKOUT,TCR.TSS
- 分频的(TDDR(装载值的),PSC(计数的)),之后输出的才是有关于TIM的CLK
- 计数器
- PRD(装载值的),TIM(用来减少的),减到0才触发中断
- 是否自动重装
- TCR.TRB
- 是否有中断
- TCR.TIE
官方例程分析(LEDBLINK)
通过定时器控制LED
1、系统时钟
InitSysCtrl();
内部有(SysCtrlRegs.PCLKCR3.bit.CPUTIMER0ENCLK = 1;)
2、关闭CPU中断
DINT;
3、初始化中断向量控制器
InitPieCtrl();
4、禁止CPU中断并且清楚CPU中断标志
IER = 0x0000;
IFR = 0x0000;
5、初始化中断向量表
InitPieVectTable();
6、将中断函数添加到向量表中
EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.TINT0 = &cpu_timer0_isr;
EDIS; // This is needed to disable write to EALLOW protected registers1
7、初始化外设,这里是定时器初始化
(1)地址关联
CpuTimer0.RegsAddr = &CpuTimer0Regs;
(2)初始化PRD(这里无所谓,后面会再次配置)
CpuTimer0Regs.PRD.all = 0xFFFFFFFF;
(3)PSC初始化,没有预分频
CpuTimer0Regs.TPR.all = 0;
CpuTimer0Regs.TPRH.all = 0;
(4)关闭定时器时钟
CpuTimer0Regs.TCR.bit.TSS = 1;
(5)开启自动重装
CpuTimer0Regs.TCR.bit.TRB = 1;
(6)复位中断计数器
CpuTimer0.InterruptCount = 0;
8、重新设置定时器的什么时候中断
ConfigCpuTimer(&CpuTimer0, 150, 500000);
150指150MHZ,500000指500000us=500ms
最后
以上就是俊秀猎豹为你收集整理的DSP28335定时器学习的全部内容,希望文章能够帮你解决DSP28335定时器学习所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复