超频软件原理探析
2007-03-16 21:57:27 来源:WEB开发网3 超频基本原理
超频软件基本原理简单而言是通过修改时钟芯片(CLOCK Chip)I2C总线上数据寄存器的值,从而无须跳线,无须重新启动就能达到超频的目的。同时,为了防止超频后系统死机,时钟芯片还提供了“看门狗(watchdog)”地功能。如下图,在超频过程中,会同时触发时钟芯片内部的计数器,如果死机,系统会在几秒后发出reset信号,使系统重新启动。如果超频成功,在这等待的几秒内,软件必须清除设置看门狗的寄存器,使系统继续正常工作。
图7:时钟芯片管脚图
3.1 复位与看门狗电路
当电源上电、掉电时,该芯片都可提供复位电平,并且当其WDI RESET管脚不能采集到翻转信号时,就会发送200ms的复位脉冲。单片机控制器采用P30脚定时向看门狗电路发送电压翻转信号,以示系统正常工作。当由于外部干扰或其他原因导致死机时,看门狗电路会自动发出复位信号,从而触发主板复位电路使系统重新启动。
3.2 M和N的选择
要实现超频,从软件的角度来看就是将CPU的外频转换成一定的参数,并将这些参数写入到频率发生器的寄存器中去。在这里,首先将CPU外频转换成两个值M和N。以某种芯片为例,根据公式 Fcpu=G*(N+3)/(M+3)就可以得出M和N的值,在这个公式中Fcpu的值为我们想要超的外频大小,G为一个定义好的常数, M和N的最大值和最小值也已知。因此很容易通过编程从而得出当前想要超的外频所对应的M和N的值。以下是我们用C语言写的一段小代码以供参考(注:实现方法很多):#define G xxx
接着把M和N的值写入相应的寄存器了,如果几秒种后系统工作正常,超频就成功了。
#define Mmax xxx
#define Nmax xxx
#define Mmin xxx
#define Nmin xxx
void FoundMN(float Fcpu,int*M,int*N)// Fcpu为输入参数,为想得到的外频值
{ //M,N为输出参数,为该外频值对应的值
…
D=300; // 定义D为一个测试的值
for( M=Mmin; M<=Mmax; M++ )
{
for( N=Nmin; N<=Nmax; N++ )
{
FREQ=G*(N+3)/(M+3); // 测试由当前的M,N得出的外频值
if ( fabs((Fcpu-FREQ)) < D )//看得出的外频值是否与想超的外频值更接近
{
D = float(fabs((Fcpu-FREQ)));// 更新外频值与想超的外频值之间的
//差值
M1=M; N1=N; //将M,N值存入M1,N1
}
}
}
}
更多精彩
赞助商链接