做EPWM的下溢出中断,增计数,TBPRD=9999,中短周期为200微秒,也就是说是50MHz,系统时钟是200MHz,中间除去一个2,是100MHz,那另一个2是在哪里除去的,查寄存器没找见
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
做EPWM的下溢出中断,增计数,TBPRD=9999,中短周期为200微秒,也就是说是50MHz,系统时钟是200MHz,中间除去一个2,是100MHz,那另一个2是在哪里除去的,查寄存器没找见
这样说吧,EPWM的时钟是PLLSYSCLK,也就是与输入给CPU的时钟一样,都是200MHz
又因为PERCLKDIVSEL.bit.EPWMCLKDIV = 1,所以二分频,也就是实际输入EPWM的时钟应该是100MHz
而实际情况是我使用增计数,TBPRD=9999,也就是说周期为10000,我设置每10000个时钟周期触发一次中断,中断发生后会将一个引脚的电平翻转,用示波器观察显示中断周期为200us,也就是说时钟频率为50MHz,这与实际供给的时钟是不符合的。
我检查了锁相环的时钟,根据计算公式fPLLSYSCLK = fOSCCLK * (SYSPLLMULT.IMULT + SYSPLLMULT.FMULT) / SYSCLKDIVSEL.PLLSYSCLKDIV,其中fOSCCLK =10MHz,SYSPLLMULT.IMULT=0,SYSPLLMULT.FMULT=20,SYSCLKDIVSEL.PLLSYSCLKDIV=1,也就是说PLLSYSCLK=200MHz,也就是说时钟在输入EPWM之后慢了一倍,这样才会与实验得到的50MHz相符,那么问题来了,时钟为什么会变慢?
我已经检查了EPWM的分频,这里我都设置为0,也就是说不分频,寄存器的值也是对应的。
请通过ETPS寄存器确认一下,你的中断是每几次事件(event)发生一次?
另外,ISR里是如何翻转GPIO的?通过TOGGLE吗?然后你测量的时间是两个高电平之间?
根据你的建议,我查了ETPS的寄存器,其中只有ITNTPRD=1,也就是每一次事件中断一次。
我说的周期200us是说一个高电平的时间,我用的是Toggle,所以周期的计算没问题。
会是时钟的问题吗?有神么方法测试晶振的频率,或者测试CPU的频率?
Wenhao Wu2 说:我说的周期200us是说一个高电平的时间,我用的是Toggle,所以周期的计算没问题。
是说每次进入中断就通过TOGGLE翻转电平吗?之后以及退出时不会操作?一个高电平的时间是指一个上升沿到一个下降沿的时间?
Wenhao Wu2 说:会是时钟的问题吗?有神么方法测试晶振的频率,或者测试CPU的频率?
可以测试系统时钟输出,包括任意其它时钟,印象里是GPIO73,你可以看一下,通过配置它为时钟输出功能,然后配置具体要输出哪个时钟。
我没有开电脑暂时不能完全确定具体的引脚以及什么寄存器来设置。如果还有问题,明天下午我会到公司,可以给你准确答复。
关于哪里可以看到二分频,上面12月5号的两个回复里都有提到,建议提问之前仔细看一下。
F2837x系列芯片的EPWM必须进行分频,因为EPWMCLK不能超过100MHz,这个在数据手册里也有说明。
添加代码即可实现不分频运行
EALLOW;
ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV = 0;
EDIS;
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 0;
EDIS;