60 lines
2.0 KiB
C
60 lines
2.0 KiB
C
|
|
#ifndef __PCF8563_H__
|
|||
|
|
#define __PCF8563_H__
|
|||
|
|
|
|||
|
|
#include "../App/config.h"
|
|||
|
|
|
|||
|
|
/* ====== PCF8563 器件地址与寄存器定义 ====== */
|
|||
|
|
#define PCF8563_ADDR_READ 0xA3 // PCF8563 读地址 (0xA2 | 0x01)
|
|||
|
|
#define PCF8563_ADDR_WRITE 0xA2 // PCF8563 写地址 (0xA2)
|
|||
|
|
|
|||
|
|
#define REG_CTRL_STATUS1 0x00 // 控制/状态寄存器 1
|
|||
|
|
#define REG_CTRL_STATUS2 0x01 // 控制/状态寄存器 2
|
|||
|
|
#define REG_VL_SECONDS 0x02 // 秒寄存器 (bit7 为 VL 保证标志)
|
|||
|
|
#define REG_MINUTES 0x03 // 分钟寄存器
|
|||
|
|
#define REG_HOURS 0x04 // 小时寄存器
|
|||
|
|
#define REG_DAYS 0x05 // 日寄存器
|
|||
|
|
#define REG_WEEKDAYS 0x06 // 星期寄存器
|
|||
|
|
#define REG_MONTHS 0x07 // 月份寄存器 (bit7 为 C 世纪位)
|
|||
|
|
#define REG_YEARS 0x08 // 年份寄存器
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 初始化 PCF8563 RTC 芯片
|
|||
|
|
* @details 初始化 I2C 管脚高电平,并检测芯片启动状态
|
|||
|
|
* @return bit 1: 芯片响应正常, 0: 通讯异常
|
|||
|
|
*/
|
|||
|
|
bit PCF8563_Init(void);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 从 PCF8563 芯片读取当前时间 (时、分、秒)
|
|||
|
|
* @param hour 小时指针 (0~23)
|
|||
|
|
* @param min 分钟指针 (0~59)
|
|||
|
|
* @param sec 秒钟指针 (0~59)
|
|||
|
|
* @return bit 1: 读取成功, 0: 通讯失败
|
|||
|
|
*/
|
|||
|
|
bit PCF8563_ReadTime(u8 *hour, u8 *min, u8 *sec);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 将指定的时间 (时、分、秒) 写入 PCF8563 芯片
|
|||
|
|
* @param hour 小时 (0~23)
|
|||
|
|
* @param min 分钟 (0~59)
|
|||
|
|
* @param sec 秒钟 (0~59)
|
|||
|
|
* @return bit 1: 写入成功, 0: 通讯失败
|
|||
|
|
*/
|
|||
|
|
bit PCF8563_WriteTime(u8 hour, u8 min, u8 sec);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief I2C 总线器件扫描诊断函数
|
|||
|
|
* @details 逐个发送 I2C 写地址,检测总线上是否有响应的器件,并在串口打印发现的设备地址
|
|||
|
|
*/
|
|||
|
|
void PCF8563_ScanDiagnostic(void);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 尝试直接用最底层时序试读 RTC 控制寄存器并输出 ACK 调试日志
|
|||
|
|
*/
|
|||
|
|
bit PCF8563_TryReadDiagnostic(void);
|
|||
|
|
|
|||
|
|
// 动态引脚对调标志 (由 pcf8563.c 维护,0: 默认, 1: 互换)
|
|||
|
|
extern volatile u8 i2c_swapped;
|
|||
|
|
|
|||
|
|
#endif // __PCF8563_H__
|