📄 tempdetect.c
字号:
#include "tempdetect.h"
#include "ppc860I2C.h"
#include "ppc860siu.h"
_UCHAR8 DS1624_printf_switch;
_VOID _________________________________SOLI02(){}
_VOID i2cstart()
{
DS1624_printf_switch = TRUE ;
ppc860I2C_Init();
SetDS1624();
ControlDS1624(1);
ReadDS1624Temp();
}
_VOID SetDS1624( )
{
_UCHAR8 ucBufferTemp[3];
ucBufferTemp[0] = WRITE_DS1624_ADDR; /* control */
ucBufferTemp[1] = DS1624_ACCESSCFG; /* command */
ucBufferTemp[2] = 0x00;/*连续转化为0x0*/ /* the context of the register of DS1624 */
I2CSend( ucBufferTemp,3 );
DS1624_PRINTF("\r\nDS1624:Set to continuous convert mode");
}
_VOID ControlDS1624(_UCHAR8 ucCmd)
{
_UCHAR8 ucBufferTemp[2];
ucBufferTemp[0] = WRITE_DS1624_ADDR; /* 0x1001 1010 --control */
if( ucCmd )/*start convert*/
{
ucBufferTemp[1] = DS1624_STARTCON; /* 0xEE--start convert T--command */
I2CSend( ucBufferTemp, 2 );
DS1624_PRINTF("\r\nDS1624:Start convert!");
}
else
{
ucBufferTemp[1] = DS1624_STOPCON; /* 0x22--stop convert T--command */
I2CSend( ucBufferTemp, 2 );
DS1624_PRINTF("\r\nDS1624:Stop convert!");
}
return;
}
_VOID ReadDS1624Temp( )
{
_UCHAR8 ucBufferFirst[2];
_UCHAR8 ucBufferSec[3];
_UCHAR8 buffer[4];
_USHORT16 length;
/*先发写命令给DS1624,命令字READTEMP 0xaa。*/
ucBufferFirst[0] = WRITE_DS1624_ADDR;
ucBufferFirst[1] = DS1624_READTEMP;
/*再发读命令给DS1624,同时准备相同字节的发送buffer*/
ucBufferSec[0] = READ_DS1624_ADDR;
ucBufferSec[1] = 0x0;
ucBufferSec[2] = 0x0;/* temp is 2 bytes need sendbuffer to prepare 3 bytes */
I2CSendStartTwice((&ucBufferFirst[0]),2, (&ucBufferSec[0]),3 );
I2CReceive( &buffer[0], &length);
OS_Printf("\r\n\r\nDS1624:The Temperature is %d.%d\n",buffer[0],buffer[1] );
}
_VOID _________________________________SOLI01(){}
_VOID WriteDS1624( _UCHAR8 ucAddr,_UCHAR8 ucBuf[],_UCHAR8 uclength )
{
_UCHAR8 ucSendbuf[I2C_MAX_BUF_LEN];
_UCHAR8 i;
if(uclength>8)
{
DS1624_PRINTF("\r\nDS1624:Warning!U want to write to E2PROM over 8 bytes per times,will lose data!");
}
ucSendbuf[0] = WRITE_DS1624_ADDR;
ucSendbuf[1] = DS1624_ACCESSMEM;
ucSendbuf[2] = ucAddr;
for(i = 0;i <uclength; i ++ )
{
ucSendbuf[i+3] = ucBuf[i];
}
I2CSend( ucSendbuf, uclength+3 );
return;
}
_VOID ReadDS1624Mem(_UCHAR8 ucAddr,_UCHAR8 ucBuf[],_UCHAR8 uclength)
{
_UCHAR8 ucSendBuf1[I2C_MAX_BUF_LEN];
_UCHAR8 ucSendBuf2[I2C_MAX_BUF_LEN];
_UCHAR8 ucRecvBuf[I2C_MAX_BUF_LEN];
_USHORT16 ucGetlength;
_UCHAR8 i;
ucSendBuf1[0] = WRITE_DS1624_ADDR;
ucSendBuf1[1] = DS1624_ACCESSMEM;
ucSendBuf1[2] = ucAddr;
ucSendBuf2[0] = READ_DS1624_ADDR;
for(i=0;i<uclength;i++)
{
ucSendBuf2[i+1] = ucBuf[i];
}
I2CSendStartTwice( &ucSendBuf1[0],3,&ucSendBuf2[0],uclength+1 );
I2CReceive( &ucRecvBuf[0], &ucGetlength );
DS1624_PRINTF("\r\nDS1624:E2ROM Read out %d bytes ",ucGetlength);
for(i=0;i<uclength;i++)
{
DS1624_PRINTF("\r\nDS1624: %x byte is %x ",i+1,ucRecvBuf[i]);
}
return;
}
_VOID OperE2PROM()
{
_UCHAR8 ucBuffer[8];
_UCHAR8 RcvBuf[8];
ppc860I2C_Init();
ucBuffer[0] = 0x44;
ucBuffer[1] = 0x33;
ucBuffer[2] = 0x22;
ucBuffer[3] = 0x11;
ucBuffer[4] = 0x3a;
ucBuffer[5] = 0x43;
ucBuffer[6] = 0x5f;
ucBuffer[7] = 0x19;
WriteDS1624( 0,&ucBuffer[0],8);
ReadDS1624Mem( 0 , &RcvBuf[0], 8);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -