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