110 lines
4.3 KiB
C
Executable File
110 lines
4.3 KiB
C
Executable File
#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
|
||
/****************************************************************************/ |