⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tempdetect.c

📁 这是mpc860 iic总线x下温度芯片DS1624的驱动源代码
💻 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 + -