分类: C/C++
2008-04-23 21:39:13
超频软件原理探析
作者:联想(深圳)电子有限公司QDI研发部
文章摘要:
目前各大主板供应商使用的超频软件都是基于频率发生器这一硬件实现的,而大部分频率发生器都是了I2C总线上的一个设备,本文介绍了I2C 设备的基本原理及超频的基本方法和原理。
关键词:I2C,频率发生器,字节读写,块读写
Over-clock basic theory
Luo xi, Zhang Hong-wei
518027 R&D Department QDI Business Legend(shenzhen) Electrolic Inc.
ABSTRACT:
Almost all the over-clock software provided by mainboard manufactory is
based on the clock generator which is the basic hardware on mainboard.
And almost all clock generators are I2C devices. This document focus on
how the I2C device works and the basic theory of over-clock software.
Key words: I2C, clock generator, Byte read/write, Block Read/Write
随着计算机的快速发展,越来越多的DIY们希望更充分地发挥计算机及其部件的性能,"榨取"包括CPU在内的各种设备的资源。在这种情况下,各主板厂商提供的超频软件就应运而生了。这些应用软件包括联想QDI的StepEasy(超频梭),技嘉的EasyTune,微星的Fuzzy
Logic,硕泰克的红色风暴。本文将在这个方面结合自己在这方面的实践经验,介绍超频软件的实现原理。
#define G xxx #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 } } } }接着把M和N的值写入相应的寄存器了,如果几秒种后系统工作正常,超频就成功了。
;Byte方式读: ReadByte Proc Near push cx mov dx,SMBus_Port 04h ;将I2C总线基地址读入段寄存器 inc ch mov al,ch ;ID 读的命令 out dx,al IODELAY ;IO延时 call Ct_Chk_SMBus_READY ;检测I2C总线是否准备好 pop ax mov dl,03h out dx,al IODELAY //IO延时 IODELAY //IO延时 mov dl,02h mov al,48h out dx,al ;读数据 IODELAY ;IO延时 mov cx,1000h @@: newiodelay loop short @B call Ct_Chk_SMBus_READY ;检测I2C总线是否准备好 mov dl,05 in al,dx ;读出数据到AL寄存器 IODELAY ;IO延时 ret ReadByte Endp ;************************************************************ ;Block方式写: WriteBlock PROC NEAR push cx call Ct_Chk_SMBus_READY ;检测I2C总线是否准备好 mov dx,SMBus_Port 02h in al,dx ;基地址加上02h IODELAY ;IO延时 pop cx mov dx,SMBus_Port 04h mov al,ch out dx,al IODELAY ;IO延时 mov dx,SMBus_Port 03h ;寄存器开始的偏移量 mov al,cl out dx,al xor cx,cx mov dx,SMBus_Port 00h BlockWriteok: mov al,byte ptr es:[si] ;es:[si 0]=数据块的大小 mov dx,SMBus_Port 05h ;将要写的个数传给段寄存器 out dx,al IODELAY ;IO延时 movzx cx,al ; 获取读取的block数 inc si ;es:[si 1]=开始写数据 ;R09A mov cl,byte ptr es:[si] mov dx,SMBus_Port 07h WriteBlockdata: ;R09B mov al,byte ptr cs:[si] mov al,byte ptr es:[si] out dx,al IODELAY ;IO延时 inc si loop short WriteBlockdata mov dx,SMBus_Port 02h ;开始以block方式写 mov al,54h out dx,al IODELAY ;IO延时 xor cx,cx mov dx,SMBus_Port 00h ;检查状态 Writefail: in al,dx IODELAY ;IO延时 ;R09A or al,al ;检查状态 ;R09A jz short Writeok test al,02h jnz short writeok out dx,al ;清除状态 IODELAY ;IO延时 loop short Writefail Writeok: ret WriteBlock ENDP5 后记
引或用参考文献:
1)“I2C总线介绍” 作者: 彭秀峰
2)“The I2C-BUS Specification Version 2.1” 作者: Philips Semiconductors 1/2000
作者简介:
罗玺:湘潭大学。
张宏伟:北京航空航天大学学士,电子科技大学硕士毕业。
现都在联想电脑公司深圳研发中心从事应用软件开发工作.
工作单位:联想(深圳)电子有限公司QDI研发部软件处
地址:
深圳市南山区高新技术产业园区(南区)高新南一道联想(深圳)电子有限公司QDI研发部软件处
Office Tel.:(0755)6955888-8335
Email : luoxi@legend.com