📄 at24c512_pcf8563.c.bak
字号:
/***********************************************************************
文件说明:AT24C512、PCF8563读写程序
创建人: 严瑞
创建日期:2008-05-26
修改时间:
***********************************************************************/
#include"hw_types.h"
#include"hw_i2c.h"
#include"i2c.h"
#include"hw_memmap.h"
#include"sysctl.h"
#include"gpio.h"
#include"interrupt.h"
#include"AT24C512_PCF8563.h"
/*************************************************************
**I2C进行状态
***************************************************************/
#define STATE_IDLE 0 //空闲状态
#define STATE_WRITE_HIGH_ADDR 1 //写高字节地址
#define STATE_WRITE_LOW_ADDR 2 //写低字节地址
#define STATE_WRITE_SINGLE_ADDR 3 //写单字节地址(针对从地址为单字节的器件)
#define STATE_WRITE_FIRST 4 //写入第一个字节
#define STATE_WRITE_NEXT 5 //写入下一个字节
#define STATE_WRITE_FINAL 6 //写入最后一个字节
#define STATE_READ_FIRST 7 //读取第一个字节
#define STATE_READ_NEXT 8 //读取下一个字节
#define STATE_READ_FINAL 9 //读取最后一个字节
/********************************************************************
**全局变量的定义
**********************************************************************/
unsigned char g_I2C_sla; //器件从地址
unsigned long g_I2C_suba; //器件子地址
unsigned char g_I2C_suba_num; //器件子地址结构
unsigned long g_I2C_opt; //标示是读操作还是写操
unsigned char g_I2C_status; //I2C操作状态
unsigned char g_I2C_num; //每次操作写入或读出数据数目
unsigned char *g_I2C_buff; //该指针指向每次用户写入数据来源和读出数据缓冲首地址
unsigned char g_I2C_data; //仅用于I2C写入数据后读出校验缓
unsigned char g_I2C_check; //写操作完成后的检查操作,为I2C_SUCCESS表示比较结果相等
/********************************************************************
**函数原型:void Dly(unsigned long Delay)
**一个简单的延时函
**入口参数:Delay 计数器
**返回参数:无
**********************************************************************/
void Dly(unsigned long Delay)
{
for(;Delay!=0;Delay--)
{
;
}
}
/*********************************************************************
2000年~2099年星期算法
*********************************************************************/
unsigned char WeekCalculate(unsigned char y, unsigned char m, unsigned char d)
{
unsigned char week, day;
day = WeekTab[m - 1];//月表
week = day >> 5;//月星期数
day &= 0x1f;//月天数
if ((m < 3) && (y & 0x03)){//平年
if (m == 2) day--;//平年月天数
week++;//平年月表+1
}
y = y + (y >> 2);//年+年/4
week = (week + y + d + 2) % 7;//(星期=年+年/4+月表+2日)%7
return (week) ;//返回星期
}
/********************************************************************
**函数原型 void I2CInit()
**函数说明:I2C模块初始化函数,速率由I2C_SPEED决定(100Kbps或400Kbps)
**入口参数:无
**返回值: 无
**********************************************************************/
void I2CInit()
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); //使能GPIOB外
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -