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.

F28377s的EPWM的时钟是50MHz

做EPWM的下溢出中断,增计数,TBPRD=9999,中短周期为200微秒,也就是说是50MHz,系统时钟是200MHz,中间除去一个2,是100MHz,那另一个2是在哪里除去的,查寄存器没找见

  • TBCLK = EPWMCLK/(HSPCLKDIV * CLKDIV):

    建议你看下TBCTL寄存器下的各位

  • 这两个时钟分频我都设置为10,也就是直接使用系统时钟,所以说会不会是系统时钟有其他的分频位?

  • TRM (SPRUHX5C) 的2.14.10.13 PERCLKDIVSEL Register (Offset = 26h) [reset = 51h]章节下Figure 2-131. PERCLKDIVSEL Register表格:

    PERCLKDIVSEL.bit.EPWMCLKDIV = 1

  • 这样说吧,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,你可以看一下,通过配置它为时钟输出功能,然后配置具体要输出哪个时钟。

    我没有开电脑暂时不能完全确定具体的引脚以及什么寄存器来设置。如果还有问题,明天下午我会到公司,可以给你准确答复。

  • 没有记错,是GPIO73可以配置为XVLKOUT(数据手册sprs881的表格Table 4-1. Signal Descriptions (continued)),然后它可以选择各个时钟源进行输出:

  • 谢谢你,这个问题终于解决了。

    我按照你的方法查了时钟,通过用73引脚输出,发现时钟频率果然是一半,开发板使用的外部时钟

  • 请问28377程序里怎么设置 EPWMCLKDIV不分频,在哪里可以看到它默认二分频,谢谢!

  • 关于哪里可以看到二分频,上面12月5号的两个回复里都有提到,建议提问之前仔细看一下。

    F2837x系列芯片的EPWM必须进行分频,因为EPWMCLK不能超过100MHz,这个在数据手册里也有说明。

  • 恩恩  明白了  谢谢~~

  • 你好   如果EPWMCLK超过100MHz,是不是EPWM单元就会烧掉?如何恢复?

  • 添加代码即可实现不分频运行

    EALLOW;
    ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV = 0;
    EDIS;

    EALLOW;
    CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 0;
    EDIS;