📄 flash_ctl.c
字号:
#include "SPCE061V004.h"
#define MODE_STORAGE 0
#define MODE_REPLAY 0xff
#define INPORT *P_IOA_Data //High 8 bit
#define OUTPORT *P_IOB_Data //High 8 bit
#define STORE_INITIAL_ADD 0xA000 //存储首地址
#define STORE_LENGTH 0x0800 //存储长度
#define C_FLASH_BLOCK_SIZE 0x100
#define ERASETIMES (STORE_LENGTH/C_FLASH_BLOCK_SIZE)
void F_FlashWrite1Word(unsigned int ,unsigned int);
void F_FlashWrite(unsigned int ,unsigned int * ,unsigned int);
void F_FlashErase(unsigned int );
unsigned int F_FlashRead(unsigned int);
unsigned int Addr=STORE_INITIAL_ADD;
unsigned int StorageLength=0;
unsigned int Mode=0;
void FlashControl(unsigned int mode)
{
unsigned int i=0;
__asm("IRQ OFF");
StorageLength=0;
Addr=STORE_INITIAL_ADD;
Mode=mode;
if(mode==MODE_STORAGE)
{
for(i=0;i<ERASETIMES;i++)
{
F_FlashErase(Addr );
Addr+=C_FLASH_BLOCK_SIZE;
}
Addr=STORE_INITIAL_ADD;
}
__asm("INT FIQ");
}
void FlashServiceLoop()
{
unsigned int data,i;
switch(Mode)
{
case MODE_STORAGE:
{
if(StorageLength<=STORE_LENGTH)
{
data=INPORT; //Get input data
data &=0xff00; //Save high 8 bits
F_FlashWrite1Word(Addr,data);
Addr++;
StorageLength++;
}
else{__asm("fiq off");__asm("INT IRQ");}
break;
}
case MODE_REPLAY:
{
if(StorageLength<=STORE_LENGTH)
{
data=F_FlashRead(Addr);
Addr++;
StorageLength++;
i=OUTPORT; //Get last output data
i&=0x00ff; //Save last output data low 8 bits
OUTPORT=i|data; //Sent high 8 bits and never change low 8 bits now
}
else{__asm("fiq off");__asm("INT IRQ");}
break;
}
default:break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -