#include "../main/SystemInclude.h" /* File start *****************************************************************/ #if ENABLE_USE_MCP9808 /******************************************************************************/ /******************************************************************************/ void WriteWordRegister(u8 regBuf, u16 regData) { SI2C_Start(); // send START command SI2C_Write(MCP_ADR); // WRITE Command (see Section 4.1.4 ¡°Address Byte¡±) // also, make sure bit 0 is cleared ¡®0¡¯ SI2C_Write(regBuf); // Write CONFIG Register SI2C_Write(regData>>8); // Write data SI2C_Write(regData); // Write data SI2C_Stop(); // send STOP command } /******************************************************************************/ u16 ReadWordRegister(u8 regBuf) { TypeWord tempInt; SI2C_Start(); // send START command SI2C_Write(MCP_ADR); // WRITE Command (see Section 4.1.4 ¡°Address Byte¡±) // also, make sure bit 0 is cleared ¡®0¡¯ SI2C_Write(regBuf); // Write CONFIG Register SI2C_Start(); // send Repeat START command SI2C_Write(MCP_ADR | 0x01); // READ Command // also, make sure bit 0 is set ¡®1¡¯ tempInt.Byte[1] = SI2C_Read(); // READ 8 bits SI2C_Ack(); tempInt.Byte[0] = SI2C_Read(); // READ 8 bits SI2C_NoAck(); SI2C_Stop(); // send STOP command return tempInt.Word; } /******************************************************************************/ void WriteByteRegister(u8 regBuf, u8 regData) { SI2C_Start(); // send START command SI2C_Write(MCP_ADR); // WRITE Command (see Section 4.1.4 ¡°Address Byte¡±) // also, make sure bit 0 is cleared ¡®0¡¯ SI2C_Write(regBuf); // Write CONFIG Register SI2C_Write(regData); // Write data SI2C_Stop(); // send STOP command } /******************************************************************************/ u16 ReadByteRegister(u8 regBuf) { u8 temp; SI2C_Start(); // send START command SI2C_Write(MCP_ADR); // WRITE Command (see Section 4.1.4 ¡°Address Byte¡±) // also, make sure bit 0 is cleared ¡®0¡¯ SI2C_Write(regBuf); // Write CONFIG Register SI2C_Start(); // send Repeat START command SI2C_Write(MCP_ADR | 0x01); // READ Command // also, make sure bit 0 is set ¡®1¡¯ temp = SI2C_Read(); // READ 8 bits SI2C_NoAck(); SI2C_Stop(); // send STOP command return temp; } /******************************************************************************/ void TestTemperatureInit(u8 regValue) { WriteWordRegister(CONFIG, CONVERSION); //WriteByteRegister(RREG, RESULT_0_125_BIT); WriteByteRegister(RREG, regValue); HWState.EnableTempInit = 0; } /******************************************************************************/ s16 TestTemperature(void) { u32 tempLongInt; s16 tempTA; tempTA = (u32)ReadWordRegister(TA); tempTA &= 0x1fff; tempLongInt = (u32)(tempTA & 0xFFF); if(tempTA >= 0x1000) tempLongInt = 0xFFF - tempLongInt; tempLongInt = (tempLongInt * 6400) >> 10; // 0.0625*1024*100 /1024 if(tempTA >= 0x1000){ tempTA *= -1; } else tempTA = (u16)tempLongInt; // Temperature*100 if(voltageDetected[TPCB] >= 0x1000) tempTA *= -1; return tempTA; } /******************************************************************************/ void TemperatureLowPower(void) { WriteWordRegister(CONFIG, SHUT_DOWN); } /* File end *****************************************************************/ #endif /****************************************************************************/