📄 ic64.c
字号:
#include "config.h"
#include <intrins.h>
extern bit IC_ERR;
/*=======================================================================
释放总线时,默认状态为:IC_SDA-"1",IC_SCL-"0"
=========================================================================*/
void delay_nus()
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
void ic64_start()
{
IC_SDA=1;
delay_nus();
IC_SCL=1;
delay_nus();
IC_SDA=0; // scl--------|________
delay_nus(); // sda --|_______
IC_SCL=0;
delay_nus();
}
void ic64_stop()
{
delay_nus();
IC_SDA=0; // scl___|------------|____
delay_nus(); // sda_______|--------
IC_SCL=1;
delay_nus();
IC_SDA=1;
}
void send64_ack()
{
delay_nus();
IC_SDA=0; //scl_________|---|__
delay_nus(); //sda====________
IC_SCL=1;
delay_nus();
IC_SCL=0;
delay_nus();
}
void send64_noack()
{
delay_nus();
IC_SDA=1; //scl_______|----|__
delay_nus(); //sda-----------
IC_SCL=1;
delay_nus();
IC_SCL=0;
delay_nus();
}
void write64_8bit(uint8 ch)
{
uint8 data i=8;
while (i--)
{
delay_nus();
IC_SDA = (bit)(ch&0x80);
ch<<=1;
delay_nus();
IC_SCL=1;
delay_nus();
IC_SCL=0;
delay_nus();
}
IC_SDA=1;
delay_nus(); //scl____|--------|_____
IC_SCL=1; //sda---------|_____
delay_nus();
if(IC_SDA)
{
IC_ERR = 1;
}
IC_SCL=0;
delay_nus();
}
uint8 read64_8bit()
{
uint8 data ddata=0;
uint8 data i=8;
delay_nus();
IC_SDA=1;
while (i--)
{
ddata <<= 1;
delay_nus();
IC_SCL=1;
if(IC_SDA)
{
ddata|= 0x01;
}
delay_nus();
IC_SCL=0;
}
return(ddata);
}
/*****************************************************************
*功能:写24C64卡
*输入参数:*p - 缓冲区首址
address - 64卡片内地址
dcnt - 写的个数
*返回值:无
*****************************************************************/
void write24c64(uint8 *p, uint16 address, uint8 dcnt)
{
uint8 data i;
ic64_start(); /*START*/
write64_8bit(0xa0); /*置为写模式*/
write64_8bit(address>>8); /*写从地址*/
write64_8bit(address&0x00ff);
for(i=0;i<dcnt;i++)
{
write64_8bit(p[i]);
}
ic64_stop();
}
/*****************************************************************
*功能:读24C64卡
*输入参数:*p - 缓冲区首址
address - 64卡片内地址
dcnt - 读的个数
*返回值:无
*****************************************************************/
void read24c64(uint8 *p, uint16 address, uint8 dcnt)
{
uint8 data i;
ic64_start(); /*START*/
write64_8bit(0xa0); /*置为写模式*/
write64_8bit(address>>8); /*写从地址*/
write64_8bit(address);
ic64_start(); /*START*/
write64_8bit(0xa1); /*置为读模式*/
for(i=0;i<dcnt-1;i++)
{
p[i]=read64_8bit();
send64_ack();
}
p[i]=read64_8bit();
send64_noack();
ic64_stop();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -