📄 dps2812_eeprom.c
字号:
#include "DSP28_Device.h"
#include "EEPROM.h"
unsigned char Spi_VarRx[155];
unsigned char Spi_VarTx[155];
unsigned char *EEPROM_Write_Date1,*EEPROM_Read_Date1;
unsigned int i,j,i1;
//unsigned int EEPROM_Read1(void);
//inline Uint16 EEPROM_Read1(void);
void EEPROM_MultiRead(Uint16 EEPROM_Addr,unsigned char *EEPROM_Read_Date,Uint16 Read_Length);
void EEPROM_MultiWrite(Uint16 EEPROM_Addr,unsigned char *EEPROM_Write_Date,Uint16 Write_Length);
unsigned int *ram_addr = (unsigned int *)0x100000;
//unsigned int Send_Counter,Page_Counter;
unsigned int EEPROM_Addr1,Write_Length1;
void main(void)
{
/*初始化系统*/
InitSysCtrl();
/* 关中断 */
DINT;
IER = 0x0000;
IFR = 0x0000;
/* 初始化PIE控制寄存器 */
InitPieCtrl();
/* 初始化PIE参数表 */
InitPieVectTable();
/* 初始化外设寄存器 */
InitPeripherals();
EEPROM_Addr1 = 0x0003;
// Send_Counter = 0;
// Page_Counter = 0;
Write_Length1 = 70; //假设有的数据
for(i = 0; i < 32000; i++)
{
//*(ram_addr+i)=i+1;///~~~~~~~~~~~~~~~
//Spi_VarTx[i] = i+2;
}
for(i = 0; i < 155; i++)
{
Spi_VarRx[i] = 0;
Spi_VarTx[i] = i+2;
}
i = 0;
j = 0;
EEPROM_Write_Date1 = Spi_VarTx;
EEPROM_Read_Date1 = Spi_VarRx;
/* 开中断 */
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
EEPROM_MultiWrite(EEPROM_Addr1,EEPROM_Write_Date1,Write_Length1);
EEPROM_MultiRead(EEPROM_Addr1,EEPROM_Read_Date1,Write_Length1);
/* while((EEPROM_Read_Status()&0x01) == 0x01);
while(Spi_TxReady() == 0);
GpioDataRegs.GPFDAT.bit.GPIOF3 = 0;
SpiaRegs.SPITXBUF = READ;
while(Spi_TxReady() == 0);
SpiaRegs.SPITXBUF = 0x0000;
//for(i = 0; i < 10000; i++);
while(Spi_TxReady() == 0);
SpiaRegs.SPITXBUF = 0x0000 << 8;
while(Spi_TxReady() == 0);
SpiaRegs.SPITXBUF = 0x5500;
for(j = 0; j < 100; j++);
while(Spi_RxReady() == 0);
/////////////////////////
*/
//void EEPROM_MultiWrite(Uint16 EEPROM_Addr,unsigned char *EEPROM_Read_Date,Uint16 Read_Length);
//{
while((EEPROM_Read_Status()&0x01) == 0x01);
while(Spi_TxReady() == 0);
GpioDataRegs.GPFCLEAR.bit.GPIOF3 = 1;
SpiaRegs.SPITXBUF = 0x0300;
while(Spi_TxReady() == 0);
SpiaRegs.SPITXBUF = 0x0000;
while(Spi_TxReady() == 0);
SpiaRegs.SPITXBUF = 0x0000 << 8;
while(Spi_TxReady() == 0);
SpiaRegs.SPITXBUF = 0x5500;
for(j = 0; j < 100; j++);
while(Spi_RxReady() == 0);
for(i1 = 0; i1 < 155; i1++)
{
Spi_VarRx[i1] = SpiaRegs.SPIRXBUF;
while(Spi_TxReady() == 0);
SpiaRegs.SPITXBUF = 0x5500;
for(j = 0; j < 100; j++);
while(Spi_RxReady() == 0);
delay_time(50);
}
//}
for(;;)
{
}
}
//===========================================================================
/*inline Uint16 SPIA_Transmit(void)
{
Uint16 recvData;
while( Spi_TxReady() == 0);
recvData = SPIARegs.SPIRXBUF;
while( Spi_TxReady() == 0);
SPIARegs.SPITXBUF = 0x5500;
for(j = 0; j < 100; j++);
while(Spi_RxReady() == 0);
delay_time(50);
return recvData;
}*/
/*////////////////////////////////////////
inline Uint16 EEPROM_Read1(void)
{
Uint16 data;
data = SpiaRegs.SPIRXBUF;
while(Spi_TxReady() == 0);
SpiaRegs.SPITXBUF = 0x5500;
for(j = 0; j < 100; j++);
while(Spi_RxReady() == 0);
delay_time(50);
return data;
}*/
////////////////////////////////////////////////////////
//EEPROM多字节写
//EEPROM_MultiWrite(EEPROM绝对地址,数组指针,数据长度)
////////////////////////////////////////////////////////
void EEPROM_MultiWrite(Uint16 EEPROM_Addr,unsigned char *EEPROM_Write_Date,Uint16 Write_Length)
{
unsigned int Send_Counter,Page_Counter;
EEPROM_Write_Enable();
EEPROM_Write_write(EEPROM_Addr);
Page_Counter = EEPROM_Addr%64; //取出EEPROM页内地址。
for(Send_Counter=0;Send_Counter!=Write_Length;)
{
if(Page_Counter != 64)
{
SpiaRegs.SPITXBUF =(*EEPROM_Write_Date << 8) & 0xff00;
delay_time(50);
Page_Counter++;
Send_Counter++;
EEPROM_Addr++;
EEPROM_Write_Date++;
}
else
{
GpioDataRegs.GPFDAT.bit.GPIOF3 = 1;
while((EEPROM_Read_Status()&0x01) == 0x01);
Page_Counter = 0;
EEPROM_Write_Enable();
EEPROM_Write_write(EEPROM_Addr); //更新写入页地址
}
}
GpioDataRegs.GPFDAT.bit.GPIOF3 = 1;//写完
return;
}
void EEPROM_MultiRead(Uint16 EEPROM_Addr,unsigned char *EEPROM_Read_Date,Uint16 Read_Length)
{
int t;
while((EEPROM_Read_Status()&0x01) == 0x01);
while(Spi_TxReady() == 0);
GpioDataRegs.GPFCLEAR.bit.GPIOF3 = 1;
SpiaRegs.SPITXBUF = 0x0300;
while(Spi_TxReady() == 0);
SpiaRegs.SPITXBUF = EEPROM_Addr;
while(Spi_TxReady() == 0);
SpiaRegs.SPITXBUF = EEPROM_Addr << 8;
while(Spi_TxReady() == 0);
SpiaRegs.SPITXBUF = 0x5500;
for(t = 0; t < 100; t++);
while(Spi_RxReady() == 0);
for(t = 0; t < Read_Length; t++)
{
*EEPROM_Read_Date++ = SpiaRegs.SPIRXBUF;
while(Spi_TxReady() == 0);
SpiaRegs.SPITXBUF = 0x5500;
for(j = 0; j < 100; j++);
while(Spi_RxReady() == 0);
delay_time(50);
}
GpioDataRegs.GPFDAT.bit.GPIOF3 = 1;
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -