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来测试你的配置是否正确。