A-7
GPIO WDT BKL Programming MS-98F3
SMBus Access
ThebaseaddressofSMBusmustbeknownbeforeaccess.Therelevantbusanddeviceinformation
areasfollowing.
#defineIO_SC 0xCF8
#defineIO_DA 0xCFC
#definePCIBASEADDRESS 0x80000000
#definePCI_BUS_NUM0
#definePCI_DEV_NUM31
#definePCI_FUN_NUM3
4.1 GetSMBusBaseAddress
intSMBUS_BASE;
intDATA_ADDR=PCIBASEADDRESS+(PCI_BUS_NUM<<16)+
(PCI_DEV_NUM<<11)+
(PCI_FUN_NUM<<8);
Outportl(DATA_ADDR+0x20,IO_SC);
SMBUS_BASE=
Inportl(IO_DA)&0xfffffff0;
4.2 SMBus_ReadByte(charDEVID,charoffset)
ReadthevalueofOFFSETfromSMBusdeviceDEVID.
Outportb (LOWORD(SMBUS_BASE),0xFE);
Outportb (LOWORD(
SMBUS_BASE)+0x04,DEVID+1);//outBase+04,(DEVID+1)
Outportb (LOWORD(SMBUS_BASE)+0x03,OFFSET);//outBase+03,OFFSET
Outportb (LOWORD(SMBUS_BASE)+0x02,0x48); //outBase+02,48H
mdelay(20);//delay20mstoletdataready
while((Inportl(
SMBUS_BASE)&0x01)!=0); //waitSMBusready
SMB_DATA=Inportb(LOWORD(SMBUS_BASE)+0x05);//inputBase+05
4.3 SMBu s_WriteByte(charDEVID,charoffset,charDAT A )
Write DATAtoOFFSETonSMBusdeviceDEVID.
Outportb (LOWORD(
SMBUS_BASE),0xFE);
Outportb (LOWORD(
SMBUS_BASE)+0x04,DEVID); //outBase+04,(DEVID)
Outportb (LOWORD(SMBUS_BASE)+0x03,OFFSET);//outBase+03,OFFSET
Outportb (LOWORD(SMBUS_BASE)+0x05,DATA); //outBase+05,DATA
Outportb (LOWORD(SMBUS_BASE)+0x02,0x48); //outBase+02,48H
mdelay(20);//wait20ms