DSP

DSP中的ConfigCpuTimer

2019-07-13 10:30发布

如果你在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 这样可以根据你设置的频率来计算你的定时时间了!