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

📄 flash.c

📁 在飞思卡尔MC9S08GB60单片机环境下实现了无线监控
💻 C
字号:
/**********************************************************************************
*FLASH.c
*Author:Andy
*Start Date:2006.3.13
*End Date: 2006.3.15
******************************************************************************/


#include "FLASH.h"


static UINT16 iProgAddr = 0;
static UINT8 cProgData = 0; 
//extern flashunion FlashUnion;
UINT8 FLASHBUFFER[20];

/**************************************************************
*	Write: 	MCU Flash write handler
*	Parameters: none
*	Return:		none
*	Actions:	Enable the MCU Flash write
*           写入MCU Flash
**************************************************************/
void Flash1Byte(UINT16 FAddr_Buff,UINT8 FCont_Buff)							//用于写入Flash
{
  DisableInterrupts;
  TPM1SC_TOIE = 0;
  iProgAddr = FAddr_Buff;
  cProgData = FCont_Buff;
  FCDIV = 0x27;
  asm
  {
      ldhx    iProgAddr       ;//要编写的rom地址
      lda     cProgData       ;//欲写入flash的子机编号
  }
  (void)FlashProg1();
  EnableInterrupts;
  TPM1SC_TOIE = 1;
}

/**************************************************************
*	Write: 	MCU Flash write handler
*	Parameters: none
*	Return:		none
*	Actions:	Enable the MCU Flash write
*           写入MCU Flash
**************************************************************/
void FlashArray(UINT8 *PFCont,UINT16 Length,UINT16 FAddr_Start)							//用于写入Flash
{
    UINT16 i;
    
    DisableInterrupts;
    TPM1SC_TOIE = 0;
    
    for(i=0;i<Length;i++) 
    {
    	 Flash1Byte(FAddr_Start,*PFCont);
    	 PFCont++;
    	 FAddr_Start++; 
    	 
    	 SRS = 0;    
    }

    EnableInterrupts;
    //TPM1SC_TOF = 0;
    TPM1SC_TOIE = 1;
}


/**************************************************************
*	Erase: 	Erase the MCU Flash handler
*	Parameters: i,取1~4,表示要删除的是第几页flash
*	Return:		none
*	Actions:	Enable the MCU Flash Erasion
*           擦除MCU Flash
**************************************************************/
void EraseFlash(UINT8 i)				  //用于擦除Flash
{
    DisableInterrupts;
    TPM1SC_TOIE = 0;
    FCDIV = 0x27;
    
    SRS = 0;
    
    /*向汇编的删除子程序传递参数*/
    switch(i)
      {
         case 1:
           asm
            {
               ldhx    #$1080
            }        
           (void)FlashErase1();//将第一页flash擦除到0xFF
           //p1_rom = (char*)0x1080;	  //复原指针
         
         break;
         
         case 2:
           asm
            {
               ldhx    #$1200
            }        
           (void)FlashErase1();//将第二页flash擦除到0xFF
           //p2_rom = (char*)0x1200;	  //复原指针
         break;
         
         case 3:
           asm
            {
               ldhx    #$1400
            }        
           (void)FlashErase1();//将第三页flash擦除到0xFF
           //p3_rom = (char*)0x1400;	  //复原指针
         break;
         
         case 4:
           asm
            {
               ldhx    #$1600
            }        
           (void)FlashErase1();//将第四页flash擦除到0xFF
           //p4_rom = (char*)0x1600;	  //复原指针
         break;
         
         default:
         break;
      }
    
    SRS = 0;
       
    EnableInterrupts;
    //TPM1SC_TOF = 0;
    TPM1SC_TOIE = 1;
}



/**************************************************************
*	Erase: 	Erase the MCU Flash handler
*	Parameters: none
*	Return:		none
*	Actions:	Enable the MCU Flash Erasion
*             擦除MCUFlash
**************************************************************/
void EraseNum()				  //用于擦除Flash
{
    DisableInterrupts;
    TPM1SC_TOIE = 0;
    FCDIV = 0x27;
    /*向汇编的删除子程序传递参数*/
    asm
    {
    ldhx    #$1280
    }        
    (void)FlashErase1();//将一页flash擦除到0xFF
    //p2_rom = (char*)0x1280;	  //复原指针
    EnableInterrupts;
    //TPM1SC_TOF = 0;
    TPM1SC_TOIE = 1;
}


/**************************************************************
*	FUNCTION: READFLASH
*	Parameters: 读什么内容
*	Return:		none
*	Actions:当Zigbee发送报警信息到单片机的时候,单片机读flash然后打电话发短信
*             
**************************************************************/
void ReadFlash(UINT8 FlashPosit)
{
    //读flash操作
    UINT8 i;
    UINT16 p_temp;
    UINT8 *temp;
    p_temp = 0x1400;
    
    switch(FlashPosit) 
     {
      case  SMS_CENTRE:
              
              temp = (UINT8 *)p_temp;
              for(i=0;i<11;i++) 
                {  
                  FLASHBUFFER[i] = *temp++;
                }
              
              break;
             
      case  TELE_NUMBER1:
              
              temp = (UINT8*)(p_temp + 0x0010);
              for(i=0;i<11;i++)
                {  
                  FLASHBUFFER[i] = *temp++;
                }
              break;
              
      case  TELE_NUMBER2:         
              
              temp = (UINT8*)(p_temp + 0x0020);
              for(i=0;i<11;i++)
                {  
                  FLASHBUFFER[i] = *temp++;
                }
              break;
              
      case  TELE_NUMBER3:         
              
              temp = (UINT8*)(p_temp + 0x0030);
              for(i=0;i<11;i++)
                {  
                  FLASHBUFFER[i] = *temp++;
                }
              break;
              
      case  ALARM_INFO1:
              
              temp = (UINT8*)(p_temp + 0x0040);
              for(i=0;i<24;i++) 
                {  
                  FLASHBUFFER[i] = *temp++;
                }
              break;
              
      case  ALARM_INFO2:
              
              temp = (UINT8*)(p_temp + 0x00A0);
              for(i=0;i<24;i++) 
                {  
                  FLASHBUFFER[i] = *temp++;
                }
              break;
              
      case  ALARM_INFO3:
              
              temp = (UINT8*)(p_temp + 0x0100);
              for(i=0;i<24;i++) 
                {  
                  FLASHBUFFER[i] = *temp++;
                }
              break;
              
      case  SLAVE_ID:
              temp = (UINT8*)(p_temp + 0x0160);
              for(i=0;i<15;i++) 
                {  
                  FLASHBUFFER[i] = *temp++;           
                }
              break;
              
     
      ////其他需要保存在FLASH中的数据可以在此读取
      
      default:
              break;
    
    }
    
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -