www.pudn.com > flashrdwr.rar > Flash.c


//本程序在每个Flash操作子函数中都加入了口线的方向配置。 
#include "msp430x14x.h" 
#include "flash.h" 
//**************************************************** 
//往FLASH中写入sequential data input命令字 
//**************************************************** 
void WriteSequentialDataInputCommandToFlash(void) 
{ 
  DataPortDirection=0xFF; 
  ControlPortDirection=(~FlashRB); 
  OutputToFlash=FlashSequentialDataInput; 
  FlashControlPort=CommandInputInWriteMode; 
  FlashControlPort&=~FlashWE; 
  FlashControlPort|=FlashWE; 
} 
//**************************************************** 
//往FLASH中写入读模式1命令字并选中A区 
//**************************************************** 
void WriteRead1ACommandToFlash(void) 
{ 
  DataPortDirection=0xFF; 
  ControlPortDirection=(~FlashRB); 
  OutputToFlash=FlashRead1A; 
  FlashControlPort=CommandInputInReadMode;  
  FlashControlPort&=~FlashWE; 
  FlashControlPort|=FlashWE; 
} 
 
//**************************************************** 
//往FLASH中写入读模式1命令字并选中B区 
//**************************************************** 
void WriteRead1BCommandToFlash(void) 
{ 
  DataPortDirection=0xFF; 
  ControlPortDirection=(~FlashRB); 
  OutputToFlash=FlashRead1B; 
  FlashControlPort=CommandInputInReadMode; 
  FlashControlPort&=~FlashWE; 
  FlashControlPort|=FlashWE;  
} 
//**************************************************** 
//往FLASH中写入读模式2命令字并选中C区 
//**************************************************** 
void WriteRead2CommandToFlash(void) 
{ 
  DataPortDirection=0xFF; 
  ControlPortDirection=(~FlashRB); 
  OutputToFlash=FlashRead2; 
  FlashControlPort=CommandInputInReadMode&(~FlashSE); 
  FlashControlPort&=~FlashWE; 
  FlashControlPort|=FlashWE; 
} 
//**************************************************** 
//读取FLASH的ID 
//**************************************************** 
void WriteReadIDCommandToFlash(void) 
{ 
  DataPortDirection=0xFF; 
  ControlPortDirection=(~FlashRB); 
  OutputToFlash=FlashReadID; 
  FlashControlPort=CommandInputInReadMode; 
  FlashControlPort&=~FlashWE; 
  FlashControlPort|=FlashWE;  
} 
//**************************************************** 
//往FLASH中写入复位命令字 
//**************************************************** 
void WriteReadResetCommandToFlash(void) 
{ 
  DataPortDirection=0xFF; 
  ControlPortDirection=(~FlashRB); 
  OutputToFlash=FlashReset; 
  FlashControlPort=CommandInputInReadMode; 
  FlashControlPort&=~FlashWE; 
  FlashControlPort|=FlashWE; 
} 
//**************************************************** 
//往FLASH中写入块擦除命令字 
//**************************************************** 
void WriteBlockEraseCommandToFlash(unsigned short FlashRowAddress) 
{ 
  DataPortDirection=0xFF; 
  ControlPortDirection=(~FlashRB); 
  OutputToFlash=FlashBlockErase1cycle; 
  FlashControlPort=CommandInputInWriteMode; 
  FlashControlPort&=~FlashWE; 
  FlashControlPort|=FlashWE; 
  OutputToFlash=FlashRowAddress;  
  FlashControlPort=AddressInputInWriteMode; 
  FlashControlPort&=~FlashWE; 
  FlashControlPort|=FlashWE;   
  OutputToFlash=(FlashRowAddress>>8); 
  FlashControlPort&=~FlashWE; 
  FlashControlPort|=FlashWE; 
  OutputToFlash=FlashBlockErase2cycle; 
  FlashControlPort=CommandInputInWriteMode; 
  FlashControlPort&=~FlashWE; 
  FlashControlPort|=FlashWE; 
} 
//**************************************************** 
//往FLASH中写入读取状态命令字 
//**************************************************** 
void WriteReadStatusToFlash(void) 
{ 
  DataPortDirection=0xFF; 
  ControlPortDirection=(~FlashRB); 
  OutputToFlash=FlashReadStatus; 
  FlashControlPort=CommandInputInReadMode; 
  FlashControlPort&=~FlashWE; 
  FlashControlPort|=FlashWE;  
} 
//**************************************************** 
//往FLASH中写入页编程命令字 
//**************************************************** 
void WritePageProgramCommandToFlash(void) 
{ 
  DataPortDirection=0xFF; 
  ControlPortDirection=(~FlashRB); 
  OutputToFlash=FlashPageProgram; 
  FlashControlPort=CommandInputInWriteMode; 
  FlashControlPort&=~FlashWE; 
  FlashControlPort|=FlashWE; 
} 
 
 
//**************************************************** 
//往FLASH中写入地址的程序(读模式) 
//**************************************************** 
void WriteReadModeAddressToFlash(unsigned short FlashRowAddress,unsigned short FlashColumnAddress) 
{ 
  DataPortDirection=0xFF; 
  ControlPortDirection=(~FlashRB); 
  OutputToFlash=FlashColumnAddress; 
  FlashControlPort=AddressInputInReadMode; 
  FlashControlPort&=~FlashWE; 
  FlashControlPort|=FlashWE; 
  OutputToFlash=FlashRowAddress; 
  FlashControlPort&=~FlashWE; 
  FlashControlPort|=FlashWE;    
  OutputToFlash=(FlashRowAddress>>8); 
  FlashControlPort&=~FlashWE; 
  FlashControlPort|=FlashWE; 
} 
 
//**************************************************** 
//往FLASH中写入地址的程序(读模式) 
//**************************************************** 
void WriteWriteModeAddressToFlash(unsigned short FlashRowAddress,unsigned short FlashColumnAddress) 
{ 
  DataPortDirection=0xFF; 
  ControlPortDirection=(~FlashRB); 
  OutputToFlash=FlashColumnAddress; 
  FlashControlPort=AddressInputInWriteMode; 
  FlashControlPort&=~FlashWE; 
  FlashControlPort|=FlashWE; 
  OutputToFlash=FlashRowAddress; 
  FlashControlPort&=~FlashWE; 
  FlashControlPort|=FlashWE;    
  OutputToFlash=(FlashRowAddress>>8); 
  FlashControlPort&=~FlashWE; 
  FlashControlPort|=FlashWE; 
} 
 
 
 
//**************************************************** 
//为读取数据作准备 
//**************************************************** 
void PrepareForReadDataFromFlash(void) 
{ 
  ControlPortDirection=(~FlashRB); 
  FlashControlPort=PrepareForDataOutput&(~FlashSE); 
} 
 
//**************************************************** 
//写入数据到Flash作准备(不包括C区域) 
//**************************************************** 
void PrepareForWriteDataToFlashNoCArea(void) 
{ 
  ControlPortDirection=(~FlashRB); 
  FlashControlPort=PrepareForDataInput|FlashSE; 
} 
//**************************************************** 
//写入数据到Flash作准备(包括C区域) 
//**************************************************** 
void PrepareForWriteDataToFlashIncludeCArea(void) 
{ 
  ControlPortDirection=(~FlashRB); 
  FlashControlPort=PrepareForDataInput&(~FlashSE); 
} 
 
 
 
//**************************************************** 
//组合函数 
//**************************************************** 
//**************************************************** 
//读取Flash中的状态寄存器,其中返回值在InputDataFromFlash中 
//**************************************************** 
void ReadStatusFromFlash(void) 
{ 
  WriteReadStatusToFlash(); 
  DataPortDirection&=~0xFF; 
  FlashControlPort&=~FlashRE; 
  FlashControlPort|=FlashRE; 
}