关于DSP28335的CPU 定时器的配置问题

voidConfigCpuTimer(structCPUTIMER_VARS*Timer,floatFreq,floatPeriod){Uint32temp;//Init... 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 by 1 (SYSCLKOUT):
Timer->RegsAddr->TPR.all = 0;
Timer->RegsAddr->TPRH.all = 0;

// Initialize timer control register:
Timer->RegsAddr->TCR.bit.TSS = 1; // 1 = Stop timer, 0 = Start/Restart Timer
Timer->RegsAddr->TCR.bit.TRB = 1; // 1 = reload timer
Timer->RegsAddr->TCR.bit.SOFT = 0;
Timer->RegsAddr->TCR.bit.FREE = 0; // Timer Free Run Disabled
Timer->RegsAddr->TCR.bit.TIE = 1; // 0 = Disable/ 1 = Enable Timer Interrupt

// Reset interrupt counter:
Timer->InterruptCount = 0;
}
能给我解释一下这段程序吗?
展开
 我来答
空古终铭
2010-08-20
知道答主
回答量:10
采纳率:0%
帮助的人:18.6万
展开全部
CPUFreqInMHz是DSP的实际工作频率,这个参数的单位是MHz,
PeriodInUSec是要定时的时间长度,单位是微秒
定时值=定时长度/(CPU的周期)=定时长度×CPU的频率
Timer->RegsAddr->PRD.all= temp 向定时器周期寄存器赋值

Timer->RegsAddr->TPR.all = 0;
Timer->RegsAddr->TPRH.all = 0;
上面两句是配置定时器预定标寄存器,每个定时器源时钟周期TIM(定时器计数器)减一

Timer->RegsAddr->TCR.bit.TSS = 1; // 1 = Stop timer, 0 = Start/Restart Timer
Timer->RegsAddr->TCR.bit.TRB = 1; // 1 = reload timer
Timer->RegsAddr->TCR.bit.SOFT = 0;
Timer->RegsAddr->TCR.bit.FREE = 0; // Timer Free Run Disabled
Timer->RegsAddr->TCR.bit.TIE = 1; // 0 = Disable/ 1 = Enable Timer Interrupt
上面这五句是配置定时器控制寄存器,TSS写1,停止定时器;TRB写1,使能定时器重新装载;SOFT=0、FREE=0是配置CPU定时器仿真模式;TIE写1,CPU定时器中断使能。

以上是我的理解,我也是刚学,如有错误,还望高三指点
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
光派通信
2024-09-03 广告
对光传输设备进行调试和维护,需要掌握以下关键点:1. **熟悉设备性能**:深入了解OTN/DWDM等光传输产品的性能特点,确保能够熟练使用设备。2. **按规范操作**:依据产品说明书和维护手册进行调试和维护,确保操作步骤正确无误。3. ... 点击进入详情页
本回答由光派通信提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式