⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fm24cl64.c

📁 FM24CL64驱动C语言程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/****************************************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 + -