读 Hardware Monitor

来源:互联网 发布:淘宝好的女装店铺推荐 编辑:程序博客网 时间:2024/05/15 23:47

这几天一直在回忆HW Monitor的读取方法,因为之前的source code 被误删掉了,所以翻出ICH10和SIO的datasheet重看了一下。找到一个很好的论坛,需要了解硬体操作的可以看下 :http://bbs.2beanet.com/map.php?forum=5&news

1.AP访问底层需要通过驱动中转,常用的工具是WinIo,它通过加载内核级驱动来提供底层操作,也正因如此在使用读写函数前需要初始化。
2.SIO的型号是W83627DHG ,是通过LPT BUS连接到ICH10的,通常LPT bus的入口是0x295和0x296 ,这个是I\O map可以用inputb和ouputb直接操作。  W83627DHG也可以通过IIC连接ICH10 ,这种情况地址是0x48。如果不确定连接方式可以通过0x2E 0x2F或者0X4E 0X4F(if HEFRAS pin pulse hight)  读取CR60和CR61得到SIO的基地址。下面是一段demo code

;-----------------------------------------------------; Enter the Extended Function Mode;-----------------------------------------------------MOV DX, 2EHMOV AL, 87HOUT DX, ALOUT DX, AL;-----------------------------------------------------------------------------; Configure Logical Device 1, Configuration Register CRF0;-----------------------------------------------------------------------------MOV DX, 2EHMOV AL, 07HOUT DX, AL ; point to Logical Device Number Reg.MOV DX, 2FHMOV AL, 01HOUT DX, AL ; select Logical Device 1;MOV DX, 2EHMOV AL, F0HOUT DX, AL ; select CRF0MOV DX, 2FHMOV AL, 3CHOUT DX, AL ; update CRF0 with value 3CH;----------------------------------------------------------------------------; Exit the Extended Function Mode;----------------------------------------------------------------------------MOV DX, 2EHMOV AL, AAHOUT DX, AL

应用程序:

 
   if (!InitializeWinIo())  {   MessageBox(_T("please copy the WINIO.VXD,WinIo.dll,WinIo.sys to the forder where the .exe exist"),_T("ERRor"));   return;  }   DWORD CPUTemperature=0;   DWORD MainboardTemperature=0;   DWORD CPUTemperature1,CPUTemperature2;   CString str;   SetPortVal(0x2E,0x87,1);//Enter the Extended Function Mode
  SetPortVal(0x2E,0x87,1);    SetPortVal(0x295,0x48,1);  SetPortVal(0x295,0x27,1);//主板温度  GetPortVal(0x296,&MainboardTemperature,1);   SetPortVal(0x295,0x4E,1);//bank select  SetPortVal(0x296,0x81,1);  SetPortVal(0x295,0x50,1);  GetPortVal(0x296,&CPUTemperature1,1);  SetPortVal(0x295,0x51,1);  GetPortVal(0x296,&CPUTemperature2,1);  CPUTemperature=(CPUTemperature1<<1)|((CPUTemperature2>>7)&0x01);    SetPortVal(0x2E,0xAA,1);    cpu_t.Format(_T("%u ℃"),CPUTemperature/2);  maiboard_t.Format(_T("%u ℃"),MainboardTemperature);  UpdateData(FALSE);  ShutdownWinIo();
 


 

 

 

 

	
				
		
原创粉丝点击