73 lines
2.7 KiB
C
73 lines
2.7 KiB
C
/*----------------------------------------------------------------------------------------------------
|
|
# THIS FILE IS A PART OF XerolySkinner's PROJECT
|
|
#
|
|
# THIS PROGRAM IS FREE SOFTWARE
|
|
#
|
|
# E-mail:ZABBCCCBBAZ@163.com
|
|
# QQ:2715099320
|
|
#
|
|
# Copyright (c) 2022 XerolySkinner
|
|
# All rights reserved.
|
|
*/
|
|
|
|
/*----------------------------------------------------------------------------------------------------
|
|
名字:bsp_AT24C00
|
|
时间:20220802-2220
|
|
程序员:梁源康
|
|
说明:
|
|
*/
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//----------------------------------------------------------------------------------------------------
|
|
// 头文件
|
|
#include "vartable.h"
|
|
|
|
#define IIC_ADDR_24C02 0x50
|
|
#define AT_PAGE 8
|
|
#define AT_IIC_COM bspIIC0
|
|
struct struct_AT_Dat AT_Dat={0,0,0};
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//----------------------------------------------------------------------------------------------------
|
|
// 程序
|
|
//
|
|
void AT_Delay(void){
|
|
HAL_Delay(5);}
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// 基础实现
|
|
void AT_WriteOneByte(char ID,char addr,char dat){
|
|
IIC_WriteOneByte(AT_IIC_COM,IIC_ADDR_24C02+ID,addr,dat);
|
|
AT_Delay();}
|
|
char AT_ReadOneByte(char ID,char addr,char dat){
|
|
return IIC_ReadOneByte(AT_IIC_COM,IIC_ADDR_24C02+ID,addr);}
|
|
//----------------------------------------------------------------------------------------------------
|
|
void AT_WriteByte(char ID,char addr,char *dat,char len){
|
|
unsigned int member=0;
|
|
IIC_Start(AT_IIC_COM);
|
|
IIC_SendByte(AT_IIC_COM,(IIC_ADDR_24C02+ID)<<1);
|
|
IIC_WaitAck(AT_IIC_COM);
|
|
IIC_SendByte(AT_IIC_COM,addr);
|
|
IIC_WaitAck(AT_IIC_COM);
|
|
do{
|
|
IIC_SendByte(AT_IIC_COM,dat[member]);
|
|
IIC_WaitAck(AT_IIC_COM);
|
|
member++;
|
|
if(((member+addr)%AT_PAGE)==0){
|
|
IIC_Stop(AT_IIC_COM);
|
|
AT_Delay();
|
|
IIC_Start(AT_IIC_COM);
|
|
IIC_SendByte(AT_IIC_COM,(IIC_ADDR_24C02+ID)<<1);
|
|
IIC_WaitAck(AT_IIC_COM);
|
|
IIC_SendByte(AT_IIC_COM,addr+member);
|
|
IIC_WaitAck(AT_IIC_COM);}
|
|
}while(member!=len);
|
|
IIC_Stop(AT_IIC_COM);
|
|
AT_Delay();}
|
|
void AT_ReadByte(char ID,char addr,char *dat,char len){
|
|
IIC_ReadByte(AT_IIC_COM,IIC_ADDR_24C02+ID,addr,dat,len);}
|
|
//----------------------------------------------------------------------------------------------------
|
|
void AT_Write_Pack(char ID,struct struct_AT_Dat *AT_Dat){
|
|
AT_WriteByte(ID,0,(char*)AT_Dat,sizeof(struct struct_AT_Dat));}
|
|
void AT_Read_Pack(char ID,struct struct_AT_Dat *AT_Dat){
|
|
AT_ReadByte(ID,0,(char*)AT_Dat,sizeof(struct struct_AT_Dat));}
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////
|