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.
根据手册,我需要根据外部晶振 的输入,需要配置
SysCtrlRegs.PLLCR.bit.DIV = 18
SysCtrlRegs.PLLSTS.bit.DIVSEL = 2
按道理来讲,28069 需要工作在90M 时钟及其以下,但根据硬件工程师提供的输入,外部晶振 = 20M,
那根据我的配置,是 20 * 18 / 2 = 180M,但实际量出来却还是90M,这是什么原因呢;
然后我又试着将DIVSEL = 0,结果量出来的时钟进一步减半了,这个配置应该怎么理解呢?
我没有直接量,我是通过PWM 来衡量的,当采用第一种配置的时候(也就是最高不能超过90M 的配置),我配置PWM 为UP_DOWN 模式,且PRD寄存器值为9000 (也即100us),也就是一个完整周期为18000 (也就是200us) ,数50000 下才是10秒,而当采用DIVSEL = 0 配置时,数25000下就达到10秒了,也就是18000 对应400us,那么我反推,那就是4500 对应 100us, 这是不是能说明时钟变成45M 了;?
我PWM 的时钟配置都是直接等于SYSCLK :
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
EPwm1Regs.TBCTL.bit.CLKDIV = TBDIV1;
其他没问题,主要是你这里提到的
数50000 下才是10秒
是怎么“数”的?用什么计数的?
而且你这么计算绕了好多圈子啊,能直接检测一下SYSCLKOUT吗?因为至少从你目前提供的配置来看,SYSCLK都应该是90MHz的
又出现一个新问题, 为啥有时候:#define DELAY_US(A) DSP28x_usDelay(((((long double) A * 1000.0L) / (long double)CPU_RATE) - 9.0L) / 5.0L)
采用这个函数会死在里面?
我被迫换成:asm(" RPT#255||NOP"); 才能工作;