📄 fm24cl64.c
字号:
/****************************************Copyright (c)**************************************************
**
** The measuring and controling Center of JiLiang University Of China
** Zhejiang Province Hangzhou City Xiasha district
**
**
**--------------File Info-------------------------------------------------------------------------------
** File name:
** Last modified Date:
** Last Version:
** Descriptions:
** Created by:
**
**------------------------------------------------------------------------------------------------------
** Created by:
** Created date:
** Version:
** Descriptions:
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
*********************************************************************************************************/
#include "config.h"
/*
**********************************************************************************************************
//----------------I/O port define ------------------------
**********************************************************************************************************
*/
const uint32 P0_11 = (1<<26); //FMSCL接P0.11
const uint32 P0_14 = (1<<14); //FMSDA接P0.14
/*
**********************************************************************************************************
//---------------- I/O Direction Define------------------------
**********************************************************************************************************
*/
#define FMSCL_out IO0DIR |= P0_11 //FMSCL口为输出口
#define FMSCL_in IO0DIR &=~P0_11 //FMSCL口为输入口
#define FMSDA_in IO0DIR &=~P0_14 //FMSDA口为输入口
#define FMSDA_out IO0DIR |= P0_14 //FMSDA口为输出口
/*
**********************************************************************************************************
//---------------- I/O Value Define------------------------
**********************************************************************************************************
*/
#define FMSDA=1 IO0SET = P0_14 //FMSDA = 1
#define FMSDA=0 IO0CLR = P0_14 //FMSDA = 0
#define FMSCL=1 IO0SET = P0_11 //FMSCL = 1
#define FMSCL=0 IO0CLR = P0_11 //FMSCL = 0
#define FMSDA_ReadOneBit ((IO0PIN&P0_14)>>14) //Read FMSDA
/*
**********************************************************************************************************
//---------------- Function Define------------------------
**********************************************************************************************************
*/
void FM_Init(void); // FM24CL64初始化
void FM_Start(void); //开始条件函数
void FM_Stop(void); //停止条件函数
void FM_GetACK(void); //读取从机FM24CL64应答信号函数
void FM_ACK(void); //主机产生应答信号函数
void FM_NoACK(void); //主机不产生应答信号函数
void FM_WriteByte(uint8 WriteData); //向FM写入一个字节
void FM_WriteSingleData(uint16 address,uint8 val); //单字节写操作函数
uint8 FM_ReadByte(void); //从FM读出一个字节
uint8 FM_ReadSingleData(uint16 address); //随机单字节读操作函数
void nNop(uint16 i); //短延时
void LongDelay(uint16 i); //长延时
/*
**********************************************************************************************************
//---------------- EEPROM存储器地址分配------------------------
**********************************************************************************************************
*/
//0x08ff
#define EEP_Product_Num 0x0FF //Product number define
//--
#define EEP_P0 0x000 //Product define
#define EE_P0_ACT_PRESS_HH 0x000 //Act pressure limit define
#define EE_P0_ACT_PRESS_HL 0x001
#define EE_P0_ACT_PRESS_LH 0x002
#define EE_P0_ACT_PRESS_LL 0x003
#define EE_P0_LEAK_PRESS_HH 0x004 //Leak pressure limit define
#define EE_P0_LEAK_PRESS_HL 0x005
#define EE_P0_LEAK_TIME_H 0x008 //Leak test limit define
#define EE_P0_LEAK_TIME_L 0x009 //Leak test limit define
#define EE_P0_COOL_TIME_H 0x00A //COOL limit define
#define EE_P0_COOL_TIME_L 0x00B //COOL limit define
#define EEP_P1 0x010 //Product define
#define EEP_P2 0x020 //Product define
#define EEP_P3 0x030 //Product define
#define EEP_P4 0x040 //Product define
#define EEP_P5 0x050 //Product define
#define EEP_P6 0x060 //Product define
#define EEP_P7 0x070 //Product define
#define EEP_P8 0x080 //Product define
#define EEP_P9 0x090 //Product define
#define EEP_P10 0x0A0 //Product define
/*
**********************************************************************************************************
//---------------- Subsidiary Programe------------------------
**********************************************************************************************************
*/
/*
******************************************************************************
******************************************************************************
******************************************************************************
*Description :FM24CL64初始化,初始化IIC总线
*Arguments :none
*Returns :none
*Nvotes :IIC总线初始化,使总线处于空闲状态
************* 开始使用之前,应当执行一次本函数
******************************************************************************
*/
void FM_Init(void)
{
PINSEL0 = (PINSEL0&(~0x30c00000))|(0x00000000); //设置P0.11,P0.14为GPIO
FMSCL_out;
FMSDA_out;
FMSCL=1;
nNop(10);
FMSDA=1;
nNop(50);
}
/*
******************************************************************************
******************************************************************************
******************************************************************************
*Description :起始条件
*Arguments :none
*Returns :none
*Nvotes :
******************************************************************************
*/
void FM_Start(void)
{
FMSDA=1;
nNop(20);
FMSCL=1;
nNop(20);
FMSDA=0;
nNop(20);
FMSCL=0;
nNop(20);
}
/*
******************************************************************************
******************************************************************************
******************************************************************************
*Description :停止条件
*Arguments :none
*Returns :none
*Nvotes :
******************************************************************************
*/
void FM_Stop(void)
{
FMSDA=0;
nNop(20);
FMSCL=1;
nNop(20);
FMSDA=1;
nNop(50);
}
/*
******************************************************************************
******************************************************************************
******************************************************************************
*Description :读取从机(FM24CL64)应答信号
*Arguments :none
*Returns :none
*Nvotes :读取从机应答位(应答或非应答),用于判断从机是否成功接收主机数据
************* 从机在收到每个字节后都要产生应答位,主机如果收到非应答则应当
************* 终止传输
******************************************************************************
*/
void FM_GetACK(void)
{
uint8 i = 0;
FMSDA=1;
nNop(20);
FMSCL=1;
nNop(20);
FMSDA_in; //改变FMSDA为输入口
while ((FMSDA_ReadOneBit == 0x01) && (i < 100)) { i++; }
FMSCL=0;
nNop(50);
FMSDA_out;
}
/*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -