打印
[其他MCU]

LPC54102 通过I2C读取总线上的TMP275

[复制链接]
1479|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ccw1986|  楼主 | 2015-12-30 21:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目的:M0+核通过I2C总线,通过板上TMP275温度传感器,了解当前角度传感器使用的环境温度

占用端口:GPIO口

占用硬件资源   I2C
一、初始化I2C
int Init_I2C(void)

{

        uint32_t memSize, *devMem;

        ROM_I2CM_INIT_T i2cmInit;



        /* Setup I2C pin muxing, enable I2C clock and reset I2C peripheral */

        //Init_I2C_PinMux();

        Chip_Clock_EnablePeriphClock(LPC_I2CM_CLOCK);



相关帖子

沙发
ccw1986|  楼主 | 2015-12-30 21:01 | 只看该作者
Chip_SYSCON_PeriphReset(LPC_I2CM_RESET);



        /* Get needed size for driver context memory */

        memSize = ROM_I2CM_GetMemSize();

        if (memSize > sizeof(drvData)) {

        }

        devMem = drvData;        /* Or just use malloc(memSize) */

使用特权

评论回复
板凳
ccw1986|  楼主 | 2015-12-30 21:02 | 只看该作者
  /* Initialize driver */

        i2cmInit.pUserData = NULL;

        i2cmInit.base = (uint32_t) LPC_I2C_PORT;

        i2cmHandle = ROM_I2CM_Init(devMem, &i2cmInit);

        if (i2cmHandle == NULL) {

                /* Error initializing I2C */

        }

使用特权

评论回复
地板
ccw1986|  楼主 | 2015-12-30 21:02 | 只看该作者
/* Set I2C clock rate */

        ROM_I2CM_SetClockRate(i2cmHandle, Chip_Clock_GetAsyncSyscon_ClockRate(), I2C_BITRATE);





        /* Code never reaches here. Only used to satisfy standard main() */

        return 0;

}

使用特权

评论回复
5
ccw1986|  楼主 | 2015-12-30 21:03 | 只看该作者
二、初始化TMP275
/****************************************************************************

* 函数名:

* 输入:

* 返回:

* 描述:

* ************************************************************************/
void Init_TMP275(void)

{

        unsigned char RxData[3],TxData[3];

        Init_I2C();

      

        //读配置寄存器

        Read_TMP275(TMP275_Con_Reg,&RxData[0]);

使用特权

评论回复
6
ccw1986|  楼主 | 2015-12-30 21:03 | 只看该作者
TxData[0]=0xFF;

        Write_TMP275(TMP275_Con_Reg,&TxData[0]);

        //读配置寄存器

        Read_TMP275(TMP275_Con_Reg,&RxData[0]);

      

        TxData[0]=0x00;

        Write_TMP275(TMP275_Con_Reg,&TxData[0]);

使用特权

评论回复
7
ccw1986|  楼主 | 2015-12-30 21:04 | 只看该作者
/读配置寄存器

        Read_TMP275(TMP275_Con_Reg,&RxData[0]);

        //读配置寄存器

        Read_TMP275(TMP275_Con_Reg,&RxData[0]);

使用特权

评论回复
8
ccw1986|  楼主 | 2015-12-30 21:05 | 只看该作者
 //写配置寄存器

        TxData[0] =        TMP275_CR_12BITS|//12 Bits (0.0625°C)转换时间 220ms

                                TMP275_FQ6                |//故障队列

                                TMP275_ALERT_L        |//ALERT脚为H

                                TMP275_SM_E                |//连续转换模式

                                TMP275_TM_C                ;//比较模式

                        

        Write_TMP275(TMP275_Con_Reg,&TxData[0]);

}      

使用特权

评论回复
9
ccw1986|  楼主 | 2015-12-30 21:05 | 只看该作者
三、读写TMP275
 /****************************************************************************

* 函数名:

* 输入:

* 返回:

* 描述:

* ************************************************************************/

void Write_TMP275(unsigned char Reg_Address,unsigned char * data)

{

                 

                /* Write address, write 1 btye, read 8 bytes back */

                i2cmXfer.slaveAddr = TMP275_ADDRESS;

                tx[0] = Reg_Address;        //寄存器地址

                tx[1]=data[0];                //寄存器值 MSB

                //tx[2]=data[1];                //寄存器值 LSB

使用特权

评论回复
10
ccw1986|  楼主 | 2015-12-30 21:06 | 只看该作者
 i2cmXfer.txBuff = tx;

                i2cmXfer.rxBuff = rx;

                i2cmXfer.txSz = 2;

                i2cmXfer.rxSz = 0;



                /* I2C master driver will block if blocking flag is used */

                i2cmXfer.flags = ROM_I2CM_FLAG_BLOCKING;

使用特权

评论回复
11
ccw1986|  楼主 | 2015-12-30 21:07 | 只看该作者
 /* Start transfer and wait for completion */

                ROM_I2CM_Transfer(i2cmHandle, &i2cmXfer);



}  
/****************************************************************************

* 函数名:

* 输入:

* 返回:

* 描述:

* ************************************************************************/

void Read_TMP275(unsigned char Reg_Address,unsigned char *RxData )

{  

                /* Write address, write 1 btye, read 8 bytes back */

                i2cmXfer.slaveAddr = TMP275_ADDRESS;

                tx[0] = Reg_Address;        //寄存器地址

使用特权

评论回复
12
ccw1986|  楼主 | 2015-12-30 21:07 | 只看该作者
 i2cmXfer.txBuff = tx;

                i2cmXfer.rxBuff = rx;

                i2cmXfer.txSz = 1;

                i2cmXfer.rxSz = 2;



                /* I2C master driver will block if blocking flag is used */

                i2cmXfer.flags = ROM_I2CM_FLAG_BLOCKING;  

使用特权

评论回复
13
ccw1986|  楼主 | 2015-12-30 21:08 | 只看该作者
  /* Start transfer and wait for completion */

                ROM_I2CM_Transfer(i2cmHandle, &i2cmXfer);

      

          RxData[0]=rx[0];

          RxData[1]=rx[1];

}

使用特权

评论回复
14
ccw1986|  楼主 | 2015-12-30 21:08 | 只看该作者
四、读温度
nsigned int Read_TMP275_TEMP(void)

{

        unsigned char RxData[2] ;

        _ui2uc ui2uc;

        unsigned int temp=0;

      

        //读配置寄存器

        Read_TMP275(TMP275_Con_Reg,&RxData[0]);

使用特权

评论回复
15
ccw1986|  楼主 | 2015-12-30 21:09 | 只看该作者
//读温度寄存器

        Read_TMP275(TMP275_Tem_Reg,&RxData[0]);

         

        ui2uc.ucdata[1]=RxData[0];

        ui2uc.ucdata[0]=RxData[1];

            

      

        temp=(ui2uc.uidata>>4);

        return temp;

}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

84

主题

925

帖子

6

粉丝