2440lib.c的一个错误函数ChangeClockDivider()
先贴上那个函数:void ChangeClockDivider(int hdivn,int pdivn)
{
// hdivn,pdivn FCLK:HCLK:PCLK
// 0,0 1:1:1
// 0,1 1:1:2
// 1,0 1:2:2
// 1,1 1:2:4
// 2,0 1:4:4
// 2,1 1:4:8
// 3,0 1:3:3
// 3,1 1:3:6
rCLKDIVN = (hdivn<<1) | pdivn;
if (hdivn == 2)
rCAMDIVN = (rCAMDIVN & ~(3<<8)) | (1<<9);
if (hdivn == 3)
rCAMDIVN = (rCAMDIVN & ~(3<<8)) | (1<<8);
}
就以ChangeClockDivider(2, 1)为例,按照函数说明,调用ChangeClockDivider(2, 1)后,分频比应该为
1:4:8。执行 rCLKDIVN = (hdivn<<1) | pdivn 后, HDIVN = 10, PDIVN = 1,然后执行第一个if语句
rCAMDIVN = (rCAMDIVN & ~(3<<8)) | (1<<9),此时HCLK4_HALF = 1, HCLK3_HALF = 0,但按照数据手册当 HDIVN = 10, PDIVN = 1,HCLK4_HALF = 1, HCLK3_HALF = 0时,分频比应该为1:8:16。。。。。。。
不知道我分析的对不对,还是有些东西我没考虑进去,真的很郁闷,自己写了个配置分频比的函数,设置成1:4:8,总是达不到预期效果,望各位指点指点啊啊啊啊啊啊啊啊,谢过了 你要考虑HCLK,PCLK在MPLL分频时你没考虑进去,你可以看下PLLCON寄存器,和CLKSLOW怎么配置的,这系统时钟,楼主如果没搞清里边的源,建议不要随便改,很多控制器都用同一时钟源,一改动就很多控制器的分频都要变动的 本帖最后由 luowei3 于 2012-10-23 11:40 编辑
embedsky_lhh 发表于 2012-10-22 10:39 http://www.armbbs.net/static/image/common/back.gif
你要考虑HCLK,PCLK在MPLL分频时你没考虑进去,你可以看下PLLCON寄存器,和CLKSLOW怎么配置的,这系统时钟, ...
额,斑竹,我首先调用SetSysFclk(FCLK_400M)将系统时钟设为400M,然后调用ChangeClockDivider(2, 1),按照注释是将 FCLK:HCLK:PCLK设为1:4:8,关键是这个比率,调用ChangeClockDivider(2, 1)后,HDIVN = 10, PDIVN = 1,HCLK4_HALF = 1, HCLK3_HALF = 0,查数据手册,比率应该是1:8:16。如果要设置成1:4:8,应该把
if (hdivn == 2)
rCAMDIVN = (rCAMDIVN & ~(3<<8)) | (1<<9);
改成 if (hdivn == 2)
rCAMDIVN = (rCAMDIVN & ~(3<<8)) & ~(1<<9);
这时,HDIVN = 10, PDIVN = 1,HCLK4_HALF = 0, HCLK3_HALF = 0,正好是1:4:8;
麻烦斑竹点拨下,真的想不通那个函数,谢过谢过
本帖最后由 luowei3 于 2012-10-23 11:45 编辑
附上比率表 luowei3 发表于 2012-10-23 11:42 static/image/common/back.gif
附上比率表
你说的没错,你如果系统时钟PLLCON这些你都设置好了,你还没有达到预期的效果应该是你程序其他地方出问题了,与这个地方关系, embedsky_lhh 发表于 2012-10-23 16:14 static/image/common/back.gif
你说的没错,你如果系统时钟PLLCON这些你都设置好了,你还没有达到预期的效果应该是你程序其他地方出问题 ...
额,我再看看,多谢斑竹了
页:
[1]