F28335的DSP板子,都能烧写程序,然而在部分DSP板子上出现下面问题:
while ( MEP_ScaleFactor[1] == 0 ) SFO_MepDis(1); //SFO for HRPWM1
while ( MEP_ScaleFactor[2] == 0 ) SFO_MepDis(2); //SFO for HRPWM2
while ( MEP_ScaleFactor[3] == 0 ) SFO_MepDis(3); //SFO for HRPWM3
while ( MEP_ScaleFactor[4] == 0 ) SFO_MepDis(4); //SFO for HRPWM4
在程序跑到这里时一直循环在第一句,也就是说MEP_ScaleFactor[1]的值一直是0;后来发现即使屏蔽第一句,下面的几句运行结果也是0。
在正常情况下150MHz的对应的MEP_ScaleFactor应该是45左右吧。在正常的DSP板子上也确实是这样。
想请教一下这个问题可能的原因是什么?有可能是DSP本身的问题么?或者是焊接问题?
Ming Cheng3:
这个问题我查了一天,原来一直在软件上找问题,发现一个现象,就是MEP_ScaleFactor只会出现两个值,一个是0一个是0x07FF,虽说不正常但也是会变化的,再考虑到TI公司的DSP芯片质量毕竟过硬,基本排除DSP本身有问题。SFO是根据时钟SYSCLKOUT来算MEP的个数吧,就是和时钟相关的计算,然后就是在时钟上找问题,发现时钟的软件设置也正常。
在最后才想到是不是硬件出问题了,也就是晶振。。。设计的30MHz,板子的厂家给焊的是5MHz,除以2乘以10也才25MHz。MEP_Dis()函数的工作频率最小为50MHz,自然没法正常工作。
另外,当外部晶振和CCS3.3的flash烧写设置的时钟对不上的时候也能烧写程序,这也让我很吃惊,不太明白其中的原理。
F28335的DSP板子,都能烧写程序,然而在部分DSP板子上出现下面问题:
while ( MEP_ScaleFactor[1] == 0 ) SFO_MepDis(1); //SFO for HRPWM1
while ( MEP_ScaleFactor[2] == 0 ) SFO_MepDis(2); //SFO for HRPWM2
while ( MEP_ScaleFactor[3] == 0 ) SFO_MepDis(3); //SFO for HRPWM3
while ( MEP_ScaleFactor[4] == 0 ) SFO_MepDis(4); //SFO for HRPWM4
在程序跑到这里时一直循环在第一句,也就是说MEP_ScaleFactor[1]的值一直是0;后来发现即使屏蔽第一句,下面的几句运行结果也是0。
在正常情况下150MHz的对应的MEP_ScaleFactor应该是45左右吧。在正常的DSP板子上也确实是这样。
想请教一下这个问题可能的原因是什么?有可能是DSP本身的问题么?或者是焊接问题?
Eric Ma:
回复 Ming Cheng3:
看起来应该就是晶振问题。
ERIC