📄 e2prom.c
字号:
#include "JINGWEI_2407.h"
#include "My Define.h"
extern struct COMMAND_ALL_MEMBER command_all;
extern unsigned int canshu[133];
extern struct E2PROM_NUMBER spi_e2_num;
unsigned int spi_con=0;
unsigned int old_t=0;
struct Time spi_time;
unsigned int SPI_WAIT();
struct SPI_E2PROM_READ_WORD e2_word={0,0};
SPI_INIT()
{
unsigned int i;
for(i=0;i<35;i++)
{
spi_e2_num.list[i].con=0;
spi_e2_num.list[i].num=0x55;
if(i<34)
spi_e2_num.list[i].next=&spi_e2_num.list[i+1];
else
spi_e2_num.list[i].next=&spi_e2_num.list[0];
}
spi_e2_num.e2_read=spi_e2_num.e2_write=&spi_e2_num.list[0];
spi_e2_num.e2_r_full=0;
SPICCR=0x07;//发送8个BIT
SPICTL=0x1f;
SPIBRR=0x4f;
SPIPRI=0x40;
SPICCR=0x87;//发送8个BIT
}
/*
unsigned int SPI_E2PROM_WRITEENABLE()
{
if(spi_con==0)
{
SPITXBUF=0x0600;
//SPITXBUF=0x8000;
spi_con=3;
}
while(1)
{
SPI_WAIT();
if(spi_con==0)
{
break;
}
}
}
unsigned int SPI_E2PROM_WRITESTATUS(unsigned int data)
{
if(spi_con==0)
{
SPITXBUF=0x0100;
SPITXBUF=data<<8;
spi_con=2;
old_t=3;
}
while(1)
{
SPI_WAIT();
if(spi_con==0)
{
break;
}
TIME_PR_ADD();
}
}
unsigned int SPI_E2PROM_READSTATUS()
{
unsigned int data;
SPITXBUF=0x0500;
SPITXBUF=0xff00;
spi_e2_num.e2_r_full=0;
while(1)
{
if(spi_e2_num.e2_r_full==2)
{
data=spi_e2_num.e2_r_data;
break;
}
}
return data;
}
//E2PROM 写一个字节
SPI_E2PROM_WRITEBYTE(unsigned int address,unsigned int data)
{
spi_e2_num.e2_write->num=(address);
spi_e2_num.e2_write->con=1;
spi_e2_num.e2_write=spi_e2_num.e2_write->next;
spi_e2_num.e2_write->num=data;
spi_e2_num.e2_write->con=1;
spi_e2_num.e2_write=spi_e2_num.e2_write->next;
SPITXBUF=0x0200;
SPITXBUF=(address&0xff00);
}
*/
void SPI_E2PROM_READBYTE(unsigned int address)
{
unsigned int data;
spi_e2_num.e2_write->num=(address);
spi_e2_num.e2_write->con=1;
spi_e2_num.e2_write=spi_e2_num.e2_write->next;
spi_e2_num.e2_write->num=0x3f;
spi_e2_num.e2_write->con=1;
spi_e2_num.e2_write=spi_e2_num.e2_write->next;
SPITXBUF=0x0300;
SPITXBUF=(address&0xff00);
spi_con=1;
}
unsigned int SPI_E2PROM_READWORD(unsigned int address)
{
unsigned int j=0;
if(spi_con==0)
{
if(e2_word.byte==0)
{
SPI_E2PROM_READBYTE(address<<1);
e2_word.byte=1;
}
else if(e2_word.byte==2)
{
e2_word.byte_1_read=spi_e2_num.e2_r_data;
spi_e2_num.e2_r_data=0xff;
SPI_E2PROM_READBYTE((address<<1)+1);
}
else
{
e2_word.byte_1_read+=spi_e2_num.e2_r_data<<8;
spi_e2_num.e2_r_data=0xff;
e2_word.byte=0;
j=1;
}
}
return j;
}
unsigned int SPI_E2PROM_WRITEWORD(unsigned int address,unsigned int data)
{
unsigned int j=0;
unsigned int i;
if(spi_con==0)
{
//SPI_E2PROM_WRITEENABLE();
spi_e2_num.e2_write=spi_e2_num.e2_write->next;
spi_e2_num.e2_write->num=((address<<1)>>8);
spi_e2_num.e2_write->con=1;
spi_e2_num.e2_write=spi_e2_num.e2_write->next;
spi_e2_num.e2_write->num=(address<<1);
spi_e2_num.e2_write->con=1;
spi_e2_num.e2_write=spi_e2_num.e2_write->next;
spi_e2_num.e2_write->num=data;
spi_e2_num.e2_write->con=1;
spi_e2_num.e2_write=spi_e2_num.e2_write->next;
spi_e2_num.e2_write->num=data>>8;
spi_e2_num.e2_write->con=1;
spi_e2_num.e2_write=spi_e2_num.e2_write->next;
//head=((address<<1)&0xff00);
//SPITXBUF=0x0600;
//SPITXBUF=0x0200;
//SPITXBUF=((address<<1)&0xff00);
spi_e2_num.e2_r_full=0;
spi_con=2;
j=1;
}
return j;
}
WRITE_E2PROM_L_WORDS(unsigned int address,unsigned int length,unsigned int *p)
{
unsigned int i;
unsigned int l;
l=0;
while(1)
{
SPI_WAIT();
if(spi_con==0)
{
if(l==length)
break;
spi_e2_num.e2_write=spi_e2_num.e2_write->next;
spi_e2_num.e2_write->num=(((address+l)<<1)>>8);
spi_e2_num.e2_write->con=1;
spi_e2_num.e2_write=spi_e2_num.e2_write->next;
spi_e2_num.e2_write->num=((address+l)<<1);
spi_e2_num.e2_write->con=1;
spi_e2_num.e2_write=spi_e2_num.e2_write->next;
for(i=0;i<16;i++)
{
if(l==length)
break;
spi_e2_num.e2_write->num=*(p+l);
spi_e2_num.e2_write->con=1;
spi_e2_num.e2_write=spi_e2_num.e2_write->next;
spi_e2_num.e2_write->num=(*(p+l))>>8;
spi_e2_num.e2_write->con=1;
spi_e2_num.e2_write=spi_e2_num.e2_write->next;
l++;
}
spi_e2_num.e2_r_full=0;
spi_con=2;
}
TIME_PR_ADD();
KICK_DOG();
}
}
unsigned int SPI_WAIT()
{
/*
unsigned int i;
if(spi_e2_num.e2_r_full==2)
{
for(i=0;i<40000;i++);
return 1;
}
else
return 0;
*/
if(spi_con==4)
{
if(spi_e2_num.e2_r_full==2)
{
spi_e2_num.e2_r_full=0;
spi_con=0;
}
}
if(spi_con==3)
{
if(spi_e2_num.e2_r_full==1)
{
spi_e2_num.e2_r_full=0;
spi_con=0;
}
}
else if(spi_con==2)
{
if(old_t==0)
{
SPITXBUF=0x0600;
old_t++;
}
else if(old_t==1)
{
if(spi_e2_num.e2_r_full==1)
{
spi_e2_num.e2_r_full=0;
old_t++;
// TIME_FU(&spi_time);
}
}
else if(old_t==2)
{
//if(TIME_OUT(&spi_time,(unsigned long)0x1f))
//{
//SPI_E2PROM_WRITEWORD(500,0x63);
spi_e2_num.e2_read=spi_e2_num.e2_read->next;
SPITXBUF=0x0200;
SPITXBUF=spi_e2_num.e2_read->num<<8;
spi_e2_num.e2_read->con=0;
spi_e2_num.e2_read=spi_e2_num.e2_read->next;
old_t++;
//}
}
else if(old_t==3)
{
if(spi_e2_num.e2_r_full==2)
{
TIME_FU(&spi_time);
old_t++;
}
}
else
{
if(TIME_OUT(&spi_time,(unsigned long)0xa1f))
{
old_t=0;
spi_e2_num.e2_r_full=0;
spi_con=0;
}
}
}
else if(spi_con==1)
{
if(spi_e2_num.e2_r_full==2)
{
e2_word.byte++;
spi_e2_num.e2_r_full=0;
spi_con=0;
}
}
if(spi_con==0)
return 1;
else
return 0;
}
void READ_E2PROM_L_WORDS(unsigned int address,unsigned int length,unsigned int *p)
{
unsigned int i;
for(i=0;i<length;)
{
SPI_WAIT();
if(SPI_E2PROM_READWORD(address+i))
{
*(p+i)=e2_word.byte_1_read;
i++;
}
TIME_PR_ADD();
KICK_DOG();
}
}
void WRITE_CANSHU()
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -