main.c

来自「基于MDK的LPC1100处理器开发应用例程」· C语言 代码 · 共 159 行

C
159
字号
/****  (C) COPYRIGHT 2010 UP Team, Wuhan University of Technology ************
* 文件名: main.c
* 作者  : UP Team, Wuhan University of Technology
* 日期  : 01/18/2010
* 描述  : 主程序源文件.
*******************************************************************************
*******************************************************************************
* 历史:
* 01/18/2010		 : V1.0		   初始版本
*******************************************************************************/
/* Includes ------------------------------------------------------------------*/
#include <stdio.h>
#include "LPC11xx.h"			
#include "uart.h"
#include "type.h"
#include "i2c.h"

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
#define LM75_ADDR	0x90

#define TEMPERATURE_REG_ADDR	0x00000000 /* 温度寄存器,只读 */
#define CONFIGURATION_REG_ADDR	0x00000001 /* 配置寄存器,可读写 */
#define TOS_SET_POINT			0x00000011 /* Tos设置指针寄存器,可读写 */
#define THYST_SET_POINT			0x00000010 /* Thyst设置指针寄存器,可读写 */


/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
uint8_t ErrorCount = 0;		 
extern volatile uint32_t I2CCount;
extern volatile uint8_t I2CMasterBuffer[I2C_BUFSIZE];
extern volatile uint8_t I2CSlaveBuffer[I2C_BUFSIZE];
extern volatile uint32_t I2CMasterState;
extern volatile uint32_t I2CReadLength, I2CWriteLength;

/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/ 

/**
  * @函数名:I2CReadTemSensor
  * @描述:获取温度传感器某一寄存器值
  * @参数   DeviceAddr  - 硬件地址 
  * @参数   RegAddr     - 寄存器地址 
  * @参数   ReadSize    - 读块大小 (字节)
  * @返回值:无
  */   
uint32_t I2CReadTemSensor(uint8_t DeviceAddr, uint8_t RegAddr, uint32_t ReadSize)
{
  I2CWriteLength = 2;
  I2CReadLength = ReadSize;
  I2CMasterBuffer[0] = DeviceAddr;
  I2CMasterBuffer[1] = RegAddr;		
  I2CMasterBuffer[2] = DeviceAddr | RD_BIT;

  if (!(I2CEngine()))
  {
    printf("\n\r -E- Read fail! \n\r");
	return ( FALSE );
  }

  return ( TRUE ); 
}



/**
  * @函数名:main
  * @描述:主函数 
  * @参数: 无
  * @返回值:无
  */ 
int main (void)
{
  uint32_t i;

  SystemInit();

  /* NVIC配置包含在UARTInit函数中 */
  UARTInit(115200);
  
  printf("\n\r-- Basic I2C Temperature Sensor Project V1.0 --\n\r");
  printf("\n\r-- EM-LPC1100 --\n\r");
  printf("\n\r-- I2C Temperature Sensor test -- \n\r");  	

  /* 初始化I2C */
  if ( I2CInit( (uint32_t)I2CMASTER ) == FALSE )	
  {
	/* 初始化失败 */
	while ( 1 );				
  }

  for ( i = 0; i < I2C_BUFSIZE; i++ )
  {
	I2CSlaveBuffer[i] = 0x00;
  }

  /* 读温度寄存器 */
  if (I2CReadTemSensor(LM75_ADDR, TEMPERATURE_REG_ADDR, 2))
  {    
	printf("\n\r-I- Temperature Register value:0x%X\n\r", (I2CSlaveBuffer[0] << 8 | (I2CSlaveBuffer[1] & 0x80)));
  }
  else
  {
    ErrorCount++;  
  }

  /* 读配置寄存器 */
  if (I2CReadTemSensor(LM75_ADDR, CONFIGURATION_REG_ADDR, 1))
  {
    printf("\n\r-I- Configuration Register value:0x%X\n\r", I2CSlaveBuffer[0]);  
  }
  else
  {
    ErrorCount++;  
  }
  
  /* 读Tos设置指针寄存器 */  
  if (I2CReadTemSensor(LM75_ADDR, TOS_SET_POINT, 2))
  {
    printf("\n\r-I- Tos Set Point Register value:0x%X\n\r", (I2CSlaveBuffer[0] << 8 | (I2CSlaveBuffer[1] & 0x80)));
  }
  else
  {
    ErrorCount++;  
  }

  /* 读Thyst设置指针寄存器 */
  if (I2CReadTemSensor(LM75_ADDR, THYST_SET_POINT, 2))
  {
    printf("\n\r-I- Thyst Set Point Register value:0x%X\n\r", (I2CSlaveBuffer[0] << 8 | (I2CSlaveBuffer[1] & 0x80)));
  }
  else
  {
    ErrorCount++;  
  }	  

  /* 测试成功 */
  if (ErrorCount == 0) 
  {
    printf("\n\r I2C Temperature Sensor test success!\n\r");
  }
  else	/* 测试失败 */ 
  {
    printf("\n\r I2C Temperature Sensor test fail!\n\r");
  }
  return 0;
}

/**
  * @}
  */ 

/**
  * @}
  */ 

/**** (C) COPYRIGHT 2010 UP Team, Wuhan University of Technology****文件结束****/

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?