LPC1114 - Rx8025 SA

一.引脚端口

PIN

Name

I/O

说明

1

N.C

I

他的引脚没有连接到内部IC

2

SCL

I

I2C串行时钟同步

3

FOUT

I/O

C-MOS 输出, 由 FOE 控制. 当 FOE 为高电平时, 输出 32.768 kHz 信号, 当停止输出时, FOUT pin 表现为高阻态 (high impedance)

4

N.C.

5

TEST

Input

厂商测试 (不连接)

6

VDD

供电正电压

7

FOE

Input

用于控制 FOUT pin 的输出. 当此pin为高电平时, FOUT pin 为输出模式, 低电平时 FOUT pin 停止输出.

8

N.C.

9

N.C.

10

/INTA

O

这个中断输出A引脚是N-ch开漏输出。

输出告警中断(Alarm_D)和周期中断。

11

GND

接地

12

/INTB

O

这个中断输出B引脚是N-ch开漏输出。

输出告警中断(Alarm_W)

13

SDA

I/O

I2C的数据输入输出, 输出时为 N-ch开漏输出, 需要上拉电阻.

14

N.C.

RX8025 是高精度I2C实时时钟芯片, I2C总线地址为固定的0x64


RX8025T 与 RX8025SA/NB 的区别

注意, RX-8025T 与 RX-8025SA/NB 只是部分相同, Pin不兼容, 寄存器也不完

、全相同

  • RX-8025SA/NB 晶振不带温度补偿, 但是可以微调走时精度

  • PIN: RX8025T 只有一个 /INT, RX8025SA 有两个 /INTA和/INTB

  • 寄存器0x07:RX8025T 为 RAM 可以读写, RX8025SA 为 Digital Offset 用于调节 32.768 kHz 晶振精度

  • 闹钟定义: RX8025T 为 0X08,0x09,0x0A, RX8025SA 为 周[0x08,0x09,0x0A], 日[0x0B,0x0C]

  • 定时器: RX8025T 带一个双字节(12bit)计数器, RX8025SA 没有

  • 小时格式: RX8025T 只支持24H, RX8025SA 区分12H和24H

二.RX8025寄存器定义


/******************************* RX8025寄存器定义 ***************************/
#define     RX_SECONDS          0x00             // 秒寄存器地址
#define     RX_MINUTES          0x01             // 分寄存器地址
#define     RX_HOURS            0x02             // 时寄存器地址
#define     RX_WEEKDYS          0x03             // 星期寄存器地址,bit0~bit7对应日、一、二、三、四、五、六,对应值为0x01,0x02,0x04,0x08,0x10,0x20,0x40,不可出现2位为1的情况。
#define     RX_DAYS             0x04             // 日寄存器地址
#define     RX_MONTHS           0x05             // 月寄存器地址
#define     RX_YEARS            0x06             // 年寄存器地址
#define     RX_OFFSET           0x07            // 精度调整寄存器地址
#define     RX_AWMINUTE         0x08            // 闹钟分寄存器地址,中断INTB引脚上
#define     RX_AWHOUR           0x09            // 闹钟时寄存器地址,中断INTB引脚上
#define     RX_AWWEEK           0x0A            // 闹钟周寄存器地址,中断INTB引脚上
#define     RX_ADMINUTE         0x0B            // 闹钟分寄存器地址,中断INTA引脚上
#define     RX_ADHOUR           0x0C            // 闹钟时寄存器地址,中断INTA引脚上
#define     RX_EXT_REG          0x0D            //扩展寄存器,bit7-TEST=工厂测试,总应该写0;bit6-WADA=星期或日历报警选择位;bit5-USEL=选择秒或分钟更新触发更新中断,0=秒更新,1=分钟更新;
                                                //bit4-TE=周期定时使能;bit3\2-FSEL1\0=芯片FOUT引脚输出频率选择位;bit1\0-TSEL1\0=用来设定固定周期的内部时钟源。
#define     RX_CONTROL1         0x0E            // 控制寄存器1地址
#define     RX_CONTROL2         0x0F            // 控制寄存器2地址

三.RX8025 读写操作

1) Write via I2C bus

  1. 发送起始信号

  1. 写从机地址 0x64

  1. 应答信号

  1. 地址+传输模式规范(高四位地址+低四位)

  1. 应答信号

  1. 写数据

  1. 应答信号+停止信号


/*******************************************************************************
Function: bsp_simi2c_write
Description: I2C 通信写数据
Input:  device_addr 设备地址
        len         写入的数据长度
        pBuffer     写入数据
Output: 无
Return: {true,false} true 写入成功, false 写入失败
*******************************************************************************/
uint8_t bsp_simi2c_write(uint8_t device_addr, uint8_t *pBuffer, uint8_t len)
{
    uint8_t i;
    bsp_simi2c_start();
    I2C_Send_Byte(0x64);      //写操作指令
    if (iic_wait_ack() == false)
    {
        bsp_simi2c_stop();
        return false;
    }
    I2C_Send_Byte(device_addrs);//IIC_Send_Byte(addr<<4); 地址在高四位
    //I2C_Send_Byte(device_addrs|0x01);
    if(iic_wait_ack() == false)
    {
        bsp_simi2c_stop();
        return false;
    }
    for (i = 0; i < len; i++)
    {
        I2C_Send_Byte(*( pBuffer + i));//数组形式 I2C_Send_Byte(pBuffer[i])
        if (iic_wait_ack() == false)
        {
            bsp_simi2c_stop();
            return false;
        }
    }

    bsp_simi2c_stop(s_iic[hi2c]);
    return true;
}

2) Read via I2C bus

  1. 发送起始信号

  1. 写从机地址 0x64

  1. 应答信号

  1. 地址+传输模式规范(高四位地址+低四位)

  1. 应答信号

  1. 发送Restart命令

  1. 从机地址+读规范(0x65)

  1. 应答信号

  1. 读数据

  1. 应答信号

  1. 读数据(地址+1 连读)

  1. 非应答信号+停止信


/*******************************************************************************
* 函数名: u8 rx8025_read_data(u8 addr,u8 *buf,u8 len)
* 描述  : 读RX8025T寄存器
* 参数  : addr寄存器地址,*buf存储位置,len读取的长度
* 返回值: 1=操作失败,0=操作成功
*******************************************************************************/
u8 rx8025_read_data(u8 addr,u8 *buf,u8 len)
{
    unsigned char i;
    iic_start();
    iic_send_byte(0x64);  //写操作指令
    if(iic_wait_ack()) 
    {
        iic_stop();
        return 1;    
    }    
    iic_send_byte(addr);  //发送寄存器地址
    if(iic_wait_ack()) 
    {
        iic_stop();
        return 1;    
    }        
    iic_start();          //Sr条件,RESTART
    iic_send_byte(0x65);  //读操作指令
    if(iic_wait_ack()) 
    {
        iic_stop();
        return 1;    
    }    
    for(i=0; i<len; i++) //连续读
    {
        buf[i] =iic_read_byte(1);  //读取数据并发送ACK信号
    }
    //    iic_nack();         //发送一个‘1’
    iic_stop();
    return 0;
}

四.RX8025SA获取时间


/*******************************************************************************
Function: get_rx8025_time
Description: I2C RX8025SA获取时间
Input:  device_addr 设备地址
        len         读取的数据长度
        pBuffer     读取数据
Output: 无
Return: {true,false} true 读取成功, false 读取失败
*******************************************************************************/  
uint8_t get_rx8025_time(void)
{
    uint8_t rtc_str[7];
    if(bsp_simi2c_read(RX_SECONDS,rtc_str,7))  //if(bsp_simi2c_read(RX_SECONDS,rtc_str,sizeof(rtc_str)))获取日期与时间
    {
        return 1;  //读取出错
    }
    RTCBuff[0] = ((rtc_str[0]>>4)*10) + (rtc_str[0] & 0x0f);    //second
    if(RTCBuff[0]>=60)
    {
        RTCBuff[0]=0;
    }        
    RTCBuff[1] = ((rtc_str[1]>>4)*10) + (rtc_str[1] & 0x0f);    //minute
    if(RTCBuff[1]>=60)
    {
        RTCBuff[1]=0;
    }
    RTCBuff[2]   = ((rtc_str[2]>>4)*10) + (rtc_str[2] & 0x0f);  //hour
    if(RTCBuff[2]>=24)
    {
        RTCBuff[2]=0;
    }
    RTCBuff[3]    = ((rtc_str[4]>>4)*10) + (rtc_str[4] & 0x0f); //day
    if(RTCBuff[3]>31)
    {
        RTCBuff[3]=1;
    }
    RTCBuff[4]  = ((rtc_str[5]>>4)*10) + (rtc_str[5] & 0x0f);   //month
    if(RTCBuff[4]>12)
    {
        RTCBuff[4]=1;
    }
    RTCBuff[5]   = ((rtc_str[6]>>4)*10) + (rtc_str[6] & 0x0f);   //year
    if(RTCBuff[5]>99)
    {
        RTCBuff[5]=20;
    }
    RTCBuff[6]   = 20;
    return 0;
}

RTCBuff[0] = ((rtc_str[0]>>4)*10) + (rtc_str[0] & 0x0f); //second


typedef struct  // _TIME  
{
    u8 second;
    u8 minute;
    u8 hour;
    u8 week;
    u8 day;
    u8 month;
    u16 year;
}TIME;    
/*******************************************************************************
* 函数名: u8 get_rx8025_time(TIME* t)
* 描述  : 从RX8025T获取时间 
* 参数  : 存储时间的结构体
* 返回值: 0成功,1失败。
*******************************************************************************/
u8 get_rx8025_time(TIME *t)
{
    u8 rtc_str[7];

    if(rx8025_read_data(RX8025T_SEC_REG,rtc_str,7))  //获取日期与时间
    {
        return 1;  //读取出错
    }
    t->second = ((rtc_str[0]>>4)*10) + (rtc_str[0] & 0x0f);

    t->minute = ((rtc_str[1]>>4)*10) + (rtc_str[1] & 0x0f);
    t->hour   = ((rtc_str[2]>>4)*10) + (rtc_str[2] & 0x0f);
    t->week   = rtc_str[3];    
    t->day    = ((rtc_str[4]>>4)*10) + (rtc_str[4] & 0x0f);
    t->month  = ((rtc_str[5]>>4)*10) + (rtc_str[5] & 0x0f);
    t->year   = ((rtc_str[6]>>4)*10) + (rtc_str[6] & 0x0f);
    t->year+=2000;
    return 0;

}

五.设置RX8025T时间

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值