C2000 F280049 Timer模块开发
F280049 Timer概述
结构图如下,具体情况请参考F280049指导手册。跟F2803x、F2806的定时器差不多的。
#源码讲解
- 关于F280049网上的代码多数都是sysconfig生成的,使用寄存器版的少。我个人更喜欢寄存器版的,这样能对代码的整体更有掌控力。
/** ds_timer.c** Created on: 2023年9月19日* Author: chends*/#include "ds_timer.h"/*
*psc-预分频值
*prd-周期值
*/
void cpu_timer0_init(Uint16 psc,Uint32 prd)
{EALLOW;PieVectTable.TIMER0_INT= &dasen_TIM0IRQn;CpuSysRegs.PCLKCR0.bit.CPUTIMER0=1;//使能CPUtimer0时钟EDIS;CpuTimer0Regs.TIM.all=0;//定时器计数器寄存器,计数递减为0时重装载PRD周期值CpuTimer0Regs.TCR.bit.TIF=1;//写1清除CPU-timer溢出标志位CpuTimer0Regs.TCR.bit.TIE=1;//使能CPU-timer中断CpuTimer0Regs.TCR.bit.FREE=1;//断点调试相关。如果 FREE 位设置为 1,则软件断点后,定时器继续运行。如果 FREE 位为 0,则 SOFT 位控制仿真行为。CpuTimer0Regs.TCR.bit.SOFT=0;//0h= TIMH:TIM 下一次递减后停止(硬停止)。 1h= TIMH:TIM 递减到 0 后停止(软停止)。 仅当 FREE=0 时,如果 FREE=1,则该位无关紧要CpuTimer0Regs.TCR.bit.TSS=0;//CPU-timer停止状态位。读取为1时表示CPU-timer已停止。要停止CPU-timer,请将TSS设置为1。psc = psc>0 ? psc-1 : 0;CpuTimer0Regs.TPRH.bit.TDDRH=psc>>8;CpuTimer0Regs.TPR.bit.TDDR=(psc&0xff);//预分频值,计数TDDRH:TDDR + 1次,CPU-timer递减1。CpuTimer0Regs.PRD.all=prd;//计数周期值CpuTimer0Regs.TCR.bit.TRB=1;//写0无效,写 1 时,TIMH:TIM 将加载 PRDH:PRD 中的值,预分频器计数器 (PSCH:PSC) 将加载定时器分频寄存器 (TDDRH:TDDR) 中的值。//开启中断IER |= M_INT1;PieCtrlRegs.PIEIER1.bit.INTx7=1;PieCtrlRegs.PIEACK.bit.ACK1=1;//写1去清除ACK位//使能总中断EINT;ERTM;
}interrupt void dasen_TIM0IRQn(void)
{GpioDataRegs.GPBTOGGLE.bit.GPIO32=1;//IO口电平翻转CpuTimer0Regs.TCR.bit.TIF=1;//写1清除定时器溢出标志CpuTimer0Regs.TCR.bit.TRB=1;//CPU-Timer重载PieCtrlRegs.PIEACK.bit.ACK1=1;
}
/** ds_timer.h** Created on: 2023年9月19日* Author: chends*/#ifndef USER_DS_TIMER_H_
#define USER_DS_TIMER_H_
#include "F28x_Project.h"interrupt void dasen_TIM0IRQn(void);
void cpu_timer0_init(Uint16 psc,Uint32 prd);#endif /* USER_DS_TIMER_H_ */
使用
使用时,调用初始化函数来初始化定时器。设置好定时时间。在中断中加入用户代码即可。