TI中文支持网
TI专业的中文技术问题搜集分享网站

F2808-60的主频配置定时器0输出为何一直是2倍关系,请指点

1、主频设置

InitPll(DSP28_PLLCR,DSP28_CLKINDIV);

#define DSP28_CLKINDIV   1

#define DSP28_PLLCR    6

其他没有修改

 

2、定时器0设置

ConfigCpuTimer(&CpuTimer0, 60, 1);   //CpuTimer0配置分频60M,定时周期1uS

 

3、定时器中断 ,定时1秒

interrupt void cpu_timer0_isr(void) {

 CpuTimer0.InterruptCount++;

 if(CpuTimer0.InterruptCount >= 1000000)   

 {    

    CpuTimer0.InterruptCount = 0;   

    GpioDataRegs.GPATOGGLE.bit.GPIO22 = 1; //测试下来,正常翻转

   }

  PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; 

 }

 

我用示波器测GPIO22,一直是2秒,反复配置,都是这样,请问是什么地方有问题

yi chen7:

GPIO22的高电平和低电平各2秒,周期是4秒

1、主频设置

InitPll(DSP28_PLLCR,DSP28_CLKINDIV);

#define DSP28_CLKINDIV   1

#define DSP28_PLLCR    6

其他没有修改

 

2、定时器0设置

ConfigCpuTimer(&CpuTimer0, 60, 1);   //CpuTimer0配置分频60M,定时周期1uS

 

3、定时器中断 ,定时1秒

interrupt void cpu_timer0_isr(void) {

 CpuTimer0.InterruptCount++;

 if(CpuTimer0.InterruptCount >= 1000000)   

 {    

    CpuTimer0.InterruptCount = 0;   

    GpioDataRegs.GPATOGGLE.bit.GPIO22 = 1; //测试下来,正常翻转

   }

  PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; 

 }

 

我用示波器测GPIO22,一直是2秒,反复配置,都是这样,请问是什么地方有问题

yi chen7:

定时器配置:1分频

 Timer->CPUFreqInMHz = Freq;  

Timer->PeriodInUSec = Period;  

temp = (long) (Freq * Period);  

Timer->RegsAddr->PRD.all = temp;    

  Timer->RegsAddr->TPR.all  = 0;    // Set pre-scale counter to divide by 1 (SYSCLKOUT):

Timer->RegsAddr->TPRH.all  = 0;

1、主频设置

InitPll(DSP28_PLLCR,DSP28_CLKINDIV);

#define DSP28_CLKINDIV   1

#define DSP28_PLLCR    6

其他没有修改

 

2、定时器0设置

ConfigCpuTimer(&CpuTimer0, 60, 1);   //CpuTimer0配置分频60M,定时周期1uS

 

3、定时器中断 ,定时1秒

interrupt void cpu_timer0_isr(void) {

 CpuTimer0.InterruptCount++;

 if(CpuTimer0.InterruptCount >= 1000000)   

 {    

    CpuTimer0.InterruptCount = 0;   

    GpioDataRegs.GPATOGGLE.bit.GPIO22 = 1; //测试下来,正常翻转

   }

  PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; 

 }

 

我用示波器测GPIO22,一直是2秒,反复配置,都是这样,请问是什么地方有问题

Victor Zheng:

回复 yi chen7:

您好

您的系统时钟可能配置的不对。请参考 SPRUGL8C的Table30.   你的配置结果是:振荡器频率×6/4

1、主频设置

InitPll(DSP28_PLLCR,DSP28_CLKINDIV);

#define DSP28_CLKINDIV   1

#define DSP28_PLLCR    6

1、主频设置

InitPll(DSP28_PLLCR,DSP28_CLKINDIV);

#define DSP28_CLKINDIV   1

#define DSP28_PLLCR    6

其他没有修改

 

2、定时器0设置

ConfigCpuTimer(&CpuTimer0, 60, 1);   //CpuTimer0配置分频60M,定时周期1uS

 

3、定时器中断 ,定时1秒

interrupt void cpu_timer0_isr(void) {

 CpuTimer0.InterruptCount++;

 if(CpuTimer0.InterruptCount >= 1000000)   

 {    

    CpuTimer0.InterruptCount = 0;   

    GpioDataRegs.GPATOGGLE.bit.GPIO22 = 1; //测试下来,正常翻转

   }

  PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; 

 }

 

我用示波器测GPIO22,一直是2秒,反复配置,都是这样,请问是什么地方有问题

yi chen7:

回复 Victor Zheng:


我的主芯片的TMS320F2802-60的,这个配置没错啊,你那个SPRUGL8C的Table30是TMS320F03X系列的

1、主频设置

InitPll(DSP28_PLLCR,DSP28_CLKINDIV);

#define DSP28_CLKINDIV   1

#define DSP28_PLLCR    6

其他没有修改

 

2、定时器0设置

ConfigCpuTimer(&CpuTimer0, 60, 1);   //CpuTimer0配置分频60M,定时周期1uS

 

3、定时器中断 ,定时1秒

interrupt void cpu_timer0_isr(void) {

 CpuTimer0.InterruptCount++;

 if(CpuTimer0.InterruptCount >= 1000000)   

 {    

    CpuTimer0.InterruptCount = 0;   

    GpioDataRegs.GPATOGGLE.bit.GPIO22 = 1; //测试下来,正常翻转

   }

  PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; 

 }

 

我用示波器测GPIO22,一直是2秒,反复配置,都是这样,请问是什么地方有问题

Victor Zheng:

回复 yi chen7:

您好

2802-60的话,系统时钟是对的。怀疑你中断里的程序再加上中断程序的现场保护1us执行不完。 你可以把中断的周期配长一点比如100ms。在中断中不计数直接反转GPIO来测试你的配置是否正确。

赞(0)
未经允许不得转载:TI中文支持网 » F2808-60的主频配置定时器0输出为何一直是2倍关系,请指点
分享到: 更多 (0)