⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flash_ctl.c

📁 心电图测量程序,用单片机实现对心电信号的采集和显示及重现
💻 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 + -