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

📄 rtc_ext.c

📁 ARM7的I2C读写
💻 C
字号:
#include "configLPC.h"
#include "i2c.h"

static uint8 x1226Address = X1226_ADDRESS;
static uint8 x1226LastRegister = X1226_REGISTER_TEMPERATURE;
static uint8 x1226Mode = 0;

static int x1226Read8 (uint8 reg, uint8 *value)
{
	x1226LastRegister = reg;
	*value = 0;

	if (i2cWriteBuffer (x1226Address, (uint8 *) &reg, sizeof (uint8)))
		return -1;

	return i2cReadBuffer (x1226Address, (uint8 *) value, sizeof (uint8));
}
///////////*********begining of adding x1226Read16 x1226Write16 *********////////
static int x1226Read16 (uint16 reg, uint8 *value)
{ 
	uint8 buffer[2];
	buffer[0] = (uint8)(reg>>8);
	buffer[1] = (uint8)reg;
	
	////要做改变////////
	x1226LastRegister = reg;//need to do some change 
	////////
	
	*value = 0;

	if (i2cWriteBuffer (x1226Address, buffer, sizeof (uint16)))
		return -1;

	return i2cReadBuffer (x1226Address, (uint8 *) value, sizeof (uint8));
}
static int x1226Write16 (uint16 reg, uint8 value)
{
	x1226LastRegister = reg;//need to do some change 
	uint8 buffer [3];

	buffer [0] = (uint8)(reg>>8);
	buffer [1] = (uint8)reg;
	buffer [2] = value;

	return i2cWriteBuffer (x1226Address, buffer, sizeof (buffer));
}
///////////*********ending of adding x1226Read16 x1226Write16 *********/////////////

static int x1226Write8 (uint8 reg, uint8 value)
{
	uint8 buffer [2];

	buffer [0] = x1226LastRegister = reg;
	buffer [1] = value;

	return i2cWriteBuffer (x1226Address, buffer, sizeof (buffer));
}




int x1226Init (void)
{
	return x1226ConfigWrite (0);
}

int x1226ConfigWrite (int configValue)
{
	return x1226Write8 (X1226_REGISTER_CONFIGURATION, configValue)
}

void getSysTime(DEVICE_TIME *time)
{
	int data_BCD[6] = {0}; 	//存储从RTC得到的时间数据
	int *p_data_BCD;				//指向data_BCD数组的指针
	int i;	
	if(time != NULL)
	{
		p_data_BCD = data_BCD;
		//for(i=0;i<6;i++)
		//{
		//	x1226Read16 ((uint16)(0x0030+i),point_to_rtcdata+i);
		//}
		
		///////得到RTC的时间数据////////////
		x1226Read16 (0x0030,p_data_BCD);
		x1226Read16 (0x0031,p_data_BCD+1);
		x1226Read16 (0x0032,p_data_BCD+2);
		x1226Read16 (0x0033,p_data_BCD+3);
		x1226Read16 (0x0034,p_data_BCD+4);
		x1226Read16 (0x0035,p_data_BCD+5);
		
		///BCD码转换成十进制码////
		data_BCD[0] &=0x0000007f;	
		data_BCD[1] &=0x0000007f;
		data_BCD[2] &=0x0000003f;
		data_BCD[3]	&=0x0000003f;
		data_BCD[4] &=0x0000001f;
		data_BCD[5] &=0x000000ff;
		
		////赋值给结构/////
		time->second 	=(uint8)((data_BCD[0]>>4)*10 + (data_BCD[0]&0x0f));	
		time->minute 	=(uint8)((data_BCD[1]>>4)*10 + (data_BCD[1]&0x0f));
		time->hour 		=(uint8)((data_BCD[2]>>4)*10 + (data_BCD[2]&0x0f));
		time->day 		=(uint8)((data_BCD[3]>>4)*10 + (data_BCD[3]&0x0f));
		time->month 	=(uint8)((data_BCD[4]>>4)*10 + (data_BCD[4]&0x0f));
		time->year 		=(uint16)((data_BCD[5]>>4)*10 + (data_BCD[5]&0x0f))+2000;				
	}
}

void SetSystemTime(DEVICE_TIME * time)
{

	int data_not_BCD[6];
	unsigned short year_type;
	if(time != NULL)
	{
		///BCD 转换///
		data_not_BCD[0]= (int)(time->second/10*10+time->second%10);
		data_not_BCD[1]= (int)(time->minute/10*10+time->minute%10);
		data_not_BCD[2]= (int)((time->hour/10*10+time->hour%10)|0x80);
		data_not_BCD[3]= (int)(time->day/10*10+time->day%10);
		data_not_BCD[4]= (int)(time->month/10*10+time->month%10);
		year_type = time->year & 0x00ff;
		data_not_BCD[5]= (int)(year_type/10*10+year_type%10);

		////写入BCD码///
		x1226Write16 (0x0030,data_not_BCD[0]);
		x1226Write16 (0x0031,data_not_BCD[1]);
		x1226Write16 (0x0032,data_not_BCD[2]);
		x1226Write16 (0x0033,data_not_BCD[3]);
		x1226Write16 (0x0034,data_not_BCD[4]);
		x1226Write16 (0x0035,data_not_BCD[5]);
	}
}

⌨️ 快捷键说明

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