最近遇到一个问题,同一份代码上遇到两个情况,在一块板子上是正常的,但是在另外一块板子上是不正常的,两块板子的唯一区别就是EMIF走线的长短不同,所以推断,是不是因为线的长短,以及阻抗问题,导致数据错误,那么这个时候需要降低EMIF的时钟来实现。
因为以前没有注意留意EMIF如何修改时钟,然后搜索一下网上的大神的资料,这里总结一下。
修改EMIF的时钟,只需要修改gel文件,gel文件时什么,就是当仿真器烧写程序之前,会将dsp上面的配置初始化,其中就包括EMIF的时钟配置。
?
首先我们找到这段代码:
/*Program the RATIO field in PLLDIVx with the desired divide factors. In addition, make sure in this step you leave the PLLDIVx.DxEN bits set so clocks are still enabled (default).*/
PLL0_PLLDIV1 = 0x8000 | PLLDIV1; // Fixed Ratio /1
PLL0_PLLDIV2 = 0x8000 | PLLDIV2; // Fixed Ratio /2
PLL0_PLLDIV4 = 0x8000 | (((PLLDIV1+1)*4)-1); // Fixed Ratio /4
PLL0_PLLDIV6 = 0x8000 | PLLDIV1; // Fixed Ratio /1
PLL0_PLLDIV3 = 0x8000 | PLLDIV3; // Variable Ratio (EMIF)
PLL0_PLLDIV7 = 0x8000 | PLLDIV7; // Variable Ratio (RMII)
按照注释来看,默认的EMIF的时钟为114MHz,然而主时钟为456MHz,再结合上面的代码,我们得出456MHz/4=114MHz,PLLDIV3的分频值为4,那么我们需要降低他的时钟,就提高分频值就可以。
/*Program the RATIO field in PLLDIVx with the desired divide factors. In addition, make sure in this step you leave the PLLDIVx.DxEN bits set so clocks are still enabled (default).*/
PLL0_PLLDIV1 = 0x8000 | PLLDIV1; // Fixed Ratio /1
PLL0_PLLDIV2 = 0x8000 | PLLDIV2; // Fixed Ratio /2
PLL0_PLLDIV4 = 0x8000 | (((PLLDIV1+1)*4)-1); // Fixed Ratio /4
PLL0_PLLDIV6 = 0x8000 | PLLDIV1; // Fixed Ratio /1
PLL0_PLLDIV3 = 0x8000 | PLLDIV7; // Variable Ratio (EMIF)
PLL0_PLLDIV7 = 0x8000 | PLLDIV7; // Variable Ratio (RMII)
下面的PLL0_PLLDIV3为456MHz/8=57MHz,因此现在的EMIF的时钟为57MHz,然后再次测试,发现问题解决了。
参考博客:TMS320C6748_EMIF时钟配置_UCASers的博客-CSDN博客_emif配置
若有其他的问题,可以添加一下我们的群:657407920,希望有更多大家加入,一起讨论技术!
|