📄 rtc_ext.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 *) ®, 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 + -