3361|0

125

帖子

3708

TA的资源

一粒金砂(高级)

楼主
 

TI DSP中的ConfigCpuTimer 函数解读 [复制链接]

如果你在System中的系统时钟倍频后设置为150M的话,Cputimer0定时时间可以这样理解ConfigCpuTimer(&CpuTimer2, 75, 1000000)中
定时频率为75MHZ(即:1个计时周期计75M个系统时钟),  计时周期为1000000,系统时钟频率150M
则定时时间这样计算
(1/150M)*75MHZ*1000000=500000us(M对应us)=0.5s

频率可以自己设置的
    DSP的晶振为30M
   可以根据自己频率的需要 设置自己想要的值 具体设置在System中
   SysCtrlRegs.PLLCR 是用来设置频率的
   如果频率需要150M则
   SysCtrlRegs.PLLCR=0X0A;  //
   120M则
   SysCtrlRegs.PLLCR=0X08 //
   计算公式
   频率=30M*SysCtrlRegs.PLLCR/2;


ConfigCpuTimer(&CpuTimer0, 10, 1000000);

/////////////////////////////////////////////////////////////////////////////////////////////////////

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.POL = 0;      // 0 = Pulse Low
    Timer->RegsAddr->TCR.bit.TOG = 0;     // 0 = No Toggle, POL bit defines action
    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.FRCEN = 0;    // Force output enable (not used)
    Timer->RegsAddr->TCR.bit.PWIDTH = 7;   // 7+1 = 8 SYSCLKOUT cycle pulse width
    Timer->RegsAddr->TCR.bit.SOFT = 1;
    Timer->RegsAddr->TCR.bit.FREE = 1;     // Timer Free Run
    Timer->RegsAddr->TCR.bit.TIE = 1;      // 0 = Disable/ 1 = Enable Timer Interrupt
   
    // Reset interrupt counter:
    Timer->InterruptCount = 0;
}///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

由此可知

10的单位为MHz, 1000000的单位为Us。定时器的周期为两者的乘积即10*1000000。

现在的学习板大多数采用30M的晶振,则当系统时钟(SYSCLKOUT)为150M时,定时一秒中断的程序为ConfigCpuTimer(&CpuTimer0, 150, 1000000)。

对于ConfigCpuTimer(&CpuTimer0, NMHz, Nus)来讲,如果设置的频率不是SYSCLKOUT,那么中断时间应是Freq乘以Period(参照上面定时函数的形参),再除以SYSCLKOUT。即:

Time=Freq*Period/SYSCLKOUT

这样可以根据你设置的频率来计算你的定时时间了!

点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表