/************************** FM33256.h ********************************/
#ifndef _FM33256_H_
#define _FM33256_H_
#include "c8051f020.h"
#include "MyType.h"
//以下配置FM33256硬件接口------------开始>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//FM33256片选引脚
sbit FM33256_CS = P3^0;
sbit FM33256_ALARM = P3^6;
//选中FM33256
#define SELECT_FM33256 (FM33256_CS = 0)
//释放FM33256
#define DESELECT_FM33256 (FM33256_CS = 1)
//------------------------------
//允许/禁止FM33256 SPI接口使用的中断
#define ENABLE_FM33256_SPI_INT (EIE1 |= BIT8(1))
#define DISABLE_FM33256_SPI_INT (EIE1 &= ~BIT8(1))
//FM33256 SPI接口使用的中断号
#define FM33256_SPI_INT_NUM 6
//清除FM33256 SPI接口使用的中断标志
#define CLEAR_FM33256_SPI_INT (SPIF = 0)
//------------------------------
//允许/禁止FM33256 闹钟中断
#define ENABLE_FM33256_ALARM_INT (EIE2 |= BIT8(4))
#define DISABLE_FM33256_ALARM_INT (EIE2 &= ~BIT8(4))
//FM33256 闹钟中断触发方式配置
//P3IF.2 = 0时下降沿触发
//P3IF.2 = 1时上升沿触发
#define FM33256_ALARM_INT_MODE (P3IF &= ~BIT8(2))
//FM33256 闹钟使用的中断号
#define FM33256_ALARM_INT_NUM 18
//清除FM33256 闹钟使用的中断标志
#define CLEAR_FM33256_ALARM_INT (P3IF &= ~BIT8(6))
//------------------------------
//允许/禁止FM33256 电源失效中断
#define ENABLE_FM33256_POWER_INT (EX0 = 1)
#define DISABLE_FM33256_POWER_INT (EX0 = 0)
//FM33256 电源失效中断触发方式配置
//MODE = 0时电平触发
//MODE = 1时边沿触发
#define FM33256_POWER_INT_MODE(MODE) (IT0 = (MODE))
//FM33256 电源失效使用的中断号
#define FM33256_POWER_INT_NUM 0
//清除FM33256 电源失效使用的中断标志
#define CLEAR_FM33256_POWER_INT (IE0 = 0)
//以上配置FM33256硬件接口------------结束<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//FM33256监测到的复位类型
typedef enum
{
EARLY_DOG = 0x80, //早期看门狗复位
LATE_DOG = 0x40, //后期看门狗复位
POWER_ON = 0x20, //上电复位
EARLY_AND_POWER = 0x0A0, //早期看门狗复位 + 上电复位
LATE_AND_POWER = 0x60 //后期看门狗复位 + 上电复位
}FM33256_RESET_SOURCE;
//FM33256存储器保护范围
typedef enum
{
NONE = 0x00, //无保护
UP_QTR = 0x04, //高四分之一
UP_HALF= 0x08, //高二分之一
ALL = 0x0C //全部
}FRAM_PROTECT_RANGE;
//日期类型
typedef struct
{
INT8U date; //日
INT8U month; //月
INT8U year; //年
}RTC_DATE;
//时间类型
typedef struct
{
INT8U second; //秒
INT8U minute; //分
INT8U hour; //时
}RTC_TIME;
/***********************************************************************************************************************************
*函数名称 : cbcd_to_hex
*函数功能 : 将单字节BCD码转换为十六进制数
*输 入 : bcd -> 待转换数据
*返 回 : 转换后的十六进制数
******************************************/
extern INT8U cbcd_to_hex(INT8U bcd);
/***********************************************************************************************************************************
*函数名称 : chex_to_bcd
*函数功能 : 将单字节十六进制数转换为BCD码
*输 入 : hex -> 待转换数据
*返 回 : 转换后的BCD码
******************************************/
extern INT8U chex_to_bcd(INT8U hex);
/***********************************************************************************************************************************
*函数名称 : get_time
*简要描述 : 从FM33256读取时间值
*输 入 : hex_time -> 指向输出时间值的RTC_TIME结构体指针
*返 回 : 无
******************************************/
extern void get_time(RTC_TIME * hex_time);
/***********************************************************************************************************************************
*函数名称 : set_time
*简要描述 : 设置FM33256时间值
*输 入 : hex_time -> 时间设置目标值
*返 回 : 无
******************************************/
extern void set_time(RTC_TIME hex_time);
/***********************************************************************************************************************************
*函数名称 : get_week
*简要描述 : 从FM33256读取星期值
*输 入 : week -> 指向输出星期值的指针
*返 回 : 无
******************************************/
extern void get_week(INT8U * week);
/***********************************************************************************************************************************
*函数名称 : set_week
*简要描述 : 设置FM33256星期值
*输 入 : week -> 星期设置目标值
*返 回 : 无
******************************************/
extern void set_week(INT8U week);
/***********************************************************************************************************************************
*函数名称 : get_date
*简要描述 : 从FM33256读取日期值
*输 入 : hex_date -> 指向输出日期值的RTC_DATE结构体指针
*返 回 : 无
******************************************/
extern void get_date(RTC_DATE * hex_date);
/***********************************************************************************************************************************
*函数名称 : set_date
*简要描述 : 设置FM33256日期值
*输 入 : hex_date -> 日期设置目标值
*返 回 : 无
******************************************/
extern void set_date(RTC_DATE hex_date);
/***********************************************************************************************************************************
*函数名称 : set_day_alarm
*简要描述 : 设置以天为周期的闹钟
*输 入 : BCD_time -> 指向BCD码格式的闹钟时间目标值
*返 回 : 无
******************************************/
extern void set_day_alarm(RTC_TIME hex_time);
/***********************************************************************************************************************************
*函数名称 : get_day_alarm
*简要描述 : 读取以天为周期的闹钟值
*输 入 : hex_time -> 指向输出闹钟值的RTC_DATE结构体指针
*返 回 : 无
******************************************/
extern void get_day_alarm(RTC_TIME * hex_time);
/***********************************************************************************************************************************
*函数名称 : enable_alarm
*简要描述 : 使能/禁止闹钟
*输 入 : enable = TRUE 使能闹钟
* = FALSE 禁止闹钟
*返 回 : 无
******************************************/
extern void enable_alarm(BOOLEAN enable);
/***********************************************************************************************************************************
*函数名称 : check_alarm
*简要描述 : 检查闹钟
*输 入 : 无
*返 回 : TRUE -> 闹钟已发生
* FALSE -> 闹钟未发生
******************************************/
extern BOOLEAN check_alarm(void);
/***********************************************************************************************************************************
*函数名称 : clear_alarm
*简要描述 : 清除闹钟
*输 入 : 无
*返 回 : 无
******************************************/
extern void clear_alarm(void); //reentrant;
/***********************************************************************************************************************************
*函数名称 : set_watchdog_starttime
*简要描述 : 设置看门狗的窗口定时器开始时间
*输 入 : starttime -> 开始时间为该值×25ms;设置范围0~31,对应0~775ms
*返 回 : 无
******************************************/
extern void set_watchdog_starttime(INT8U starttime);
/***********************************************************************************************************************************
*函数名称 : set_watchdog_endtime
*简要描述 : 设置看门狗的窗口定时器结束时间
*输 入 : endtime -> 结束时间为该值×60ms;设置范围0,1~31,设为0时禁止定时器,其余对应60~1860ms
*返 回 : 无
******************************************/
extern void set_watchdog_endtime(INT8U endtime);
/***********************************************************************************************************************************
*函数名称 : enable_watchdog
*简要描述 : 使能/禁止看门狗
*输 入 : enable = TRUE 使能看门狗
* = FALSE 禁止看门狗
*返 回 : 无
******************************************/
extern void enable_watchdog(BOOLEAN enable);
/***********************************************************************************************************************************
*函数名称 : restart_watchdog
*简要描述 : 重启看门狗定时器
*输 入 : 无
*返 回 : 无
******************************************/
extern void restart_watchdog(void);
/***********************************************************************************************************************************
*函数名称 : get_reset_flag
*简要描述 : 查看FM33256监测到的复位源
*输 入 : 无
*返 回 : 复位源类型
******************************************/
extern FM33256_RESET_SOURCE get_reset_flag(void);
/***********************************************************************************************************************************
*函数名称 : clear_reset_flag
*简要描述 : 清除FM33256监测到的复位源标志
*输 入 : 无
*返 回 : 无
******************************************/
extern void clear_reset_flag(void);
/***********************************************************************************************************************************
*函数名称 : get_VBAK_state
*简要描述 : 查看FM33256备份电源状态
*输 入 : 无
*返 回 : TRUE -> 备份电源正常
* FALSE -> 备份电源电压低
******************************************/
extern BOOLEAN get_VBAK_state(void);
/***********************************************************************************************************************************
*函数名称 : clear_VBAK_flag
*简要描述 : 清除FM33256备份电源状态标志
*输 入 : 无
*返 回 : 无
******************************************/
extern void clear_VBAK_flag(void);
/***********************************************************************************************************************************
*函数名称 : set_ACS_pin
*简要描述 : 设置FM33256 ACS引脚的功能
*输 入 : alarm = TRUE ACS引脚由闹钟驱动
* = FALSE ACS引脚由方波驱动,方波频率由freq指定
* freq -> 当ACS引脚由方波驱动时,freq指定方波频率,对应关系为:
* freq值 方波频率
* 0 1Hz
* 1 512Hz
* 2 4096Hz
* 3 32768Hz
*返 回 : 无
******************************************/
extern void set_ACS_pin(BOOLEAN alarm,INT8U freq);
/***********************************************************************************************************************************
*函数名称 : enable_charge
*简要描述 : 允许/禁止FM33256充电功能
*输 入 : enable = TRUE 允许充电功能
* = FALSE 禁止充电功能
*返 回 : 无
******************************************/
extern void enable_charge(BOOLEAN enable);
/***********************************************************************************************************************************
*函数名称 : enable_fast_charge
*简要描述 : 允许/禁止FM33256快速充电功能。该功能仅在充电功能有效时有作用
*输 入 : enable = TRUE 允许快速充电功能
* = FALSE 禁止快速充电功能
*返 回 : 无
******************************************/
extern void enable_fast_charge(BOOLEAN enable);
/***********************************************************************************************************************************
*函数名称 : set_VTP
*简要描述 : 设置FM33256低电压复位的动作点
*输 入 : threshold -> 指定低电压复位动作点
* 设定值 对应动作点
* 0 2.60V
* 1 2.75V
* 2 2.90V
* 3 3.00V
*返 回 : 无
******************************************/
extern void set_VTP(INT8U threshold);
/***********************************************************************************************************************************
*函数名称 : enable_RTC_osc
*简要描述 : 允许/禁止FM33256振荡器
*输 入 : enable = TRUE 允许
* = FALSE 禁止
*返 回 : 无
******************************************/
extern void enable_RTC_osc(BOOLEAN enable);
/***********************************************************************************************************************************
*函数名称 : enable_RTC_CAL
*简要描述 : 允许/禁止FM33256校准模式
*输 入 : enable = TRUE 允许
* = FALSE 禁止
*返 回 : 无
******************************************/
extern void enable_RTC_CAL(BOOLEAN enable);
/***********************************************************************************************************************************
*函数名称 : get_RTC_CAL
*简要描述 : 读取FM33256校准码
*输 入 : 无
*返 回 : FM33256校准码
******************************************/
extern INT8U get_RTC_CAL(void);
/***********************************************************************************************************************************
*函数名称 : set_RTC_CAL
*简要描述 : 设置FM33256校准码
*输 入 : cal_code -> 校准码
*返 回 : SUCCESS -> 设置成功
* FAILURE -> 设置失败
******************************************/
extern BOOLEAN set_RTC_CAL(INT8U cal_code);
/***********************************************************************************************************************************
*函数名称 : get_protect_range
*简要描述 : 查看FM33256中存储器的写保护情况
*输 入 : 无
*返 回 : 存储器保护范围
******************************************/
extern FRAM_PROTECT_RANGE get_protect_range(void);
/***********************************************************************************************************************************
*函数名称 : set_protect_range
*简要描述 : 设定FM33256中存储器的写保护范围
*输 入 : range -> 指定写保护范围
*返 回 : 无
******************************************/
extern void set_protect_range(FRAM_PROTECT_RANGE range);
/***********************************************************************************************************************************
*函数名称 : read_FRAM
*简要描述 : 读FRAM
*输 入 : start_address -> 16位起始地址
* len -> 要读取的字节数
* buff -> 指向输出缓存区
*返 回 : 无
******************************************/
extern void read_FRAM(INT16U start_address,INT16U len,INT8U * buff);
/***********************************************************************************************************************************
*函数名称 : write_FRAM
*简要描述 : 写FRAM
*输 入 : start_address -> 16位起始地址
* len -> 要写入的字节数
* buff -> 指向输入缓存区
*返 回 : 无
******************************************/
extern void write_FRAM(INT16U start_address,INT16U len,const INT8U * buff);
/***********************************************************************************************************************************
*函数名称 : fm33256_init
*简要描述 : FM33256初始化
*输 入 : 无
*返 回 : 无
******************************************/
extern void fm33256_init(void);
#endif
/************ End of file ***********/
roumao_411466022 2015-3-14 17:39
lyl_420819_659650253 2014-8-22 13:45