原创 处理器伴侣FM33256源码之2

2011-3-23 17:08 1649 9 11 分类: MCU/ 嵌入式

/************************** 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 ***********/

文章评论2条评论)

登录后参与讨论

roumao_411466022 2015-3-14 17:39

不客气,欢迎指正!

lyl_420819_659650253 2014-8-22 13:45

非常好,在此谢了。
相关推荐阅读
roumao 2013-06-26 20:16
四层电路板布线方法
四层电路板布线方法         一般而言,四层电路板可分为顶层、底层和两个中间层。顶层和底层走信号线, 中间层首先通过命令DESIGN/LAYER STACK MANAGER用ADD PLANE ...
roumao 2013-03-08 20:12
关于上拉电阻
光耦输出端的上拉电阻会严重影响上升沿的上升速度,使用时务必注意。简单串口隔离电路中使用了TLP521-4光耦,输出端使用10k上拉时,上升沿上升速度至少70多微秒,要比手册中描述的速度,25微秒,...
roumao 2012-12-12 15:52
MCGS帮助文件错误处
MCGS帮助文件错误处 版本:MCGS嵌入版7.2(09.0001) 1、 存盘数据浏览构件 帮助文件中的描述: GetCellValue(RowNo,Col...
roumao 2011-05-04 14:42
PCB板的大小
        在protel99se SP6中设计电路板时,我们习惯于在keepout层上用线条画出板子的形状及大小,对于尺寸要求严格的设计而言,此时要十分注意了,实际做出来的板子将包含该线条的宽度...
roumao 2011-03-23 17:09
处理器伴侣FM33256源码之4
attachment download本篇日志包含有“处理器伴侣FM33256源码之1~3 ”所涉及代码的压缩包,以供大家下载,欢迎大家共同探讨。我的邮箱:roumao@126.com...
roumao 2011-03-23 17:08
处理器伴侣FM33256源码之3
/************************** MyType.h ********************************/ #ifndef _MY_TYPE_#define _MY_...
我要评论
2
9
关闭 站长推荐上一条 /2 下一条