📄 x5045.c
字号:
/******************************************************************/
// 模块原型: FUNC.C
// 功 能: X5045(EEPROM+WATCHDOG)操作底层函数。
/******************************************************************/
#include "hardware.h"
#include "intrins.h"
void Data_load(uchar RAM_data);
void instruction_load(uchar inst_name);
void Write_Status_Register(uchar RAM_data4);
void clock(void);
/******************************************************************/
// 函数原型: void init_X5045(void)
// 功 能: X5045初始寄存器设置
// 参 数: Status_Register (初始寄存器值)
/******************************************************************/
void init_X5045(uchar Status_Register)
{
CSI=0;_nop_();
SCK=0;
SI=0;
SO=1;
Write_Status_Register(Status_Register);
}
/******************************************************************/
// 函数原型: void instruction_load(uchar inst_name)
// 功 能: 写入X5045命令字
// 参 数: inst_name(命令字)
/******************************************************************/
void instruction_load(uchar inst_name)
{
register uchar i;
CSI=0;_nop_();
for(i=0;i<8;i++)
{
SI=(bit)(inst_name&0x80);
inst_name=inst_name<<1;
clock();
}
}
/******************************************************************/
// 函数原型: void Data_load(uchar RAM_data)
// 功 能: X5045写入数据
// 参 数: RAM_data(1字节数据)
/******************************************************************/
void Data_load(uchar RAM_data)
{
register uchar i;
for(i=0;i<8;i++)
{
SI=(bit)(RAM_data&0x80);
RAM_data=RAM_data<<1;
clock();
}
}
/******************************************************************/
// 函数原型: void Write_Status_Register(uchar RAM_data4)
// 功 能: X5045写状态寄存器
// 参 数: RAM_data4(1字节数据)
/******************************************************************/
void Write_Status_Register(uchar RAM_data4)
{
instruction_load(WREN);
CSI=1;_nop_();
_nop_();_nop_();
instruction_load(WRSR);
Data_load(RAM_data4);
CSI=1;_nop_();
}
/******************************************************************/
// 函数原型: uchar Read_Status_Register(void)
// 功 能: 读X5045状态寄存器
// 参 数: 无
/******************************************************************/
uchar Read_Status_Register()
{
register uchar i;
bit bit_temp=0;
uchar I_data=0;
instruction_load(RSDR);
SCK=1;_nop_();
bit_temp=SO;
for(i=0;i<8;i++)
{
SCK=0;_nop_();
I_data*=2;
if(bit_temp)
{ I_data++; }
SCK=1;_nop_();
bit_temp=SO;
}
CSI=1;_nop_();
return(I_data);
}
/******************************************************************/
// 函数原型: uchar Write_Ram_byte(uint RAM_address,uchar *RAM_data2,uchar length)
// 功 能: X5045写入数据
// 参 数:
/******************************************************************/
uchar Write_Ram_byte(uint RAM_address,uchar *RAM_data2,uchar length)
{
uchar low_addr,WRITE;
uint i;
bit SS;
CSI=0;_nop_();
SCK=0;
SI=0;
SO=1;
SS=(bit)(RAM_address&0x100);
if(SS==1)
{ WRITE=0x0a;}
else{ WRITE=0x02;}
low_addr=(uchar)RAM_address;
CSI=1;_nop_();
instruction_load(WREN);
CSI=1;_nop_();
instruction_load(WRITE);
Data_load(low_addr);
for(i=0;i<length;i++) { Data_load(RAM_data2[i]); }
CSI=1; _nop_();
for(i=0;i<1900;i++)
{
_nop_();
_nop_();
}
_nop_();
do
{
i=Read_Status_Register();
SS=(bit)(i&0x01);
}
while(SS);
return 0;
}
/******************************************************************/
// 函数原型: void Read_Ram(uint RAM_address,uchar *RAM_data6,uchar length)
// 功 能: 读X5045偏移地址内容
// 参 数:
/******************************************************************/
void Read_Ram(uint RAM_address,uchar *RAM_data6,uchar length)
{
uchar j,I_data=0;
register uchar i;
bit bit_temp=0;
CSI=0;_nop_();
SCK=0;
SI=0;
SO=1;
CSI=1;_nop_();
SO=1;_nop_();
if((bit)(RAM_address&0x100)==1)
{ instruction_load(0x0b); }
else{ instruction_load(0x03); }
Data_load((uchar)RAM_address);
for(j=0;j<length;j++)
{
SCK=1;_nop_();
bit_temp=SO;
for(i=0;i<8;i++)
{
SCK=0;_nop_();
I_data*=2;
if(bit_temp)
{ I_data++; }
SCK=1;_nop_();
bit_temp=SO;
}
RAM_data6[j]=I_data;
}
CSI=1;_nop_();
}
/******************************************************************/
// 函数原型: void clock(void)
// 功 能: X5045时钟
// 参 数: 无
/******************************************************************/
void clock(void)
{
SCK=1;
_nop_();
_nop_();
_nop_();
_nop_();
SCK=0;
}
/******************************************************************/
// 函数原型: void watchdog(void)
// 功 能: 看门狗 (default 1.4s)
// 参 数: 无
/******************************************************************/
void W_DOG(void)
{
CSI=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
CSI=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -