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

📄 flash.c

📁 在TI的C6000系列高速DSP下实现对FLAH芯片的读写
💻 C
字号:
#include <glodef.h>     
#define BASE	0x01400000

unsigned int  Flash_Program(unsigned char * Program_Addr, unsigned char *Source);
unsigned int polling(unsigned char data, unsigned char *address);

unsigned int Flash_Program(unsigned char * Program_Addr, unsigned char *Source)
{                                                                     
	unsigned char * Flash_Addr;
	unsigned char data;
	
	unsigned int  return_code, Cmd_Addr;               
	
	
	                            
	Cmd_Addr = (0x555 << 2);                            
	Flash_Addr = (unsigned char*)(BASE + Cmd_Addr);
	data = 0xAA;
	*Flash_Addr = data;
	
	Cmd_Addr = (0x2aa << 2);
	Flash_Addr = (unsigned char*)(BASE + Cmd_Addr);
	data = 0x55;
	*Flash_Addr = data;
	
	Cmd_Addr = (0x555<< 2);
	Flash_Addr = (unsigned char*)(BASE + Cmd_Addr);
	data = 0xA0;
	*Flash_Addr = data;
	
	Flash_Addr = (unsigned char*)(BASE + Program_Addr);
	data = *Source;
	*Flash_Addr = data;
	
	return_code = polling(data, Flash_Addr);
	return return_code;	
}	

/**************************************************************************/
/*  polling():                                                            */
/*                                                                        */
/*  NOTE: polling till the command is finished                            */
/*  INPUT : the address location and the data written on the flash        */
/*  OUTPUT : result of polling (1 for pass and 0 for fail )               */ 
/*                                                                        */
/**************************************************************************/
unsigned int polling(unsigned char data, unsigned char *address)
{       
   unsigned int   return_code;
   unsigned char  *ptr;
   unsigned char temp;
                       
   ptr =  address;
      /*data &= 0x80;*/
   while(1)
   {
	temp = *ptr;
      if((temp & 0x80) == (data & 0x80))         /* check whether DQ7 = data */ 
      {   
         return_code = 1;                        /* if 'yes', PASS */
         break;
      }
      else if((temp & 0x20) == (data & 0x20))			/* chech whether time is out, DQ5 = 1 --> timeout */
      {
         if((*ptr & 0x80) == data)
            return_code = 1;
         else
            return_code = 0;
         break;   
      }
   }
   return return_code;
}  /* Polling End */

unsigned int Flash_Erash_Chip()
{   
	unsigned char * Flash_Addr;	
	unsigned char cmd;
	unsigned int return_code,Cmd_Addr;
	
	Cmd_Addr = (0x555 << 2);
	Flash_Addr = (unsigned char*)(BASE + Cmd_Addr);
	cmd = 0xAA;
	*Flash_Addr = cmd;
	
	Cmd_Addr = (0x2AA << 2);
	Flash_Addr = (unsigned char*)(BASE + Cmd_Addr);
	cmd = 0x55;
	*Flash_Addr = cmd;
		
	Cmd_Addr = (0x555<<2);
	Flash_Addr = (unsigned char*)(BASE + Cmd_Addr);
	cmd = 0x80;
	*Flash_Addr = cmd;

	Cmd_Addr = (0x555<<2);
	Flash_Addr = (unsigned char*)(BASE + Cmd_Addr);
	cmd = 0xAA;
	*Flash_Addr = cmd;

	Cmd_Addr = (0x2AA<<2);
	Flash_Addr = (unsigned char*)(BASE + Cmd_Addr);
	cmd = 0x55;
	*Flash_Addr = cmd;
	
	Cmd_Addr = (0x555<<2);
	Flash_Addr = (unsigned char*)(BASE + Cmd_Addr);
	cmd = 0x10;
	*Flash_Addr = cmd;       
	
	return_code = polling(0xFF, Flash_Addr);
	
	return return_code;	
}                                            

⌨️ 快捷键说明

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