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

📄 source1.c

📁 SDT环境下
💻 C
字号:

#include "stdio.h"
#define FLASH_START_ADDR 	0x0000 
#define FLASH_ADDR_UNLOCK1 	0x555 
#define FLASH_ADDR_UNLOCK2 	0x2aa 
#define FLASH_DATA_UNLOCK1 	0xaa 
#define FLASH_DATA_UNLOCK2 	0x55 
#define FLASH_SETUP_ERASE 	0x80 
#define FLASH_CHIP_ERASE 	0x10 
#define UINT16 		unsigned short 
int FlashStatusDetect(UINT16 *ptr, UINT16 Data, int TimeCounter); 
int Main()
{ 
	volatile UINT16 *flashPtr=(UINT16 *) FLASH_START_ADDR; 
//按整片擦除命令要求写入命令序列;以16位方式操作 
	*((volatile UINT16 *) FLASH_START_ADDR+FLASH_ADDR_UNLOCK1) = FLASH_DATA_UNLOCK1; 
	*((volatile UINT16 *) FLASH_START_ADDR+FLASH_ADDR_UNLOCK2) = FLASH_DATA_UNLOCK2; 
	*((volatile UINT16 *) FLASH_START_ADDR+FLASH_ADDR_UNLOCK1) = FLASH_SETUP_ERASE; 
	*((volatile UINT16 *) FLASH_START_ADDR+FLASH_ADDR_UNLOCK1) = FLASH_DATA_UNLOCK1; 
	*((volatile UINT16 *) FLASH_START_ADDR+FLASH_ADDR_UNLOCK2) = FLASH_DATA_UNLOCK2; 
	*((volatile UINT16 *) FLASH_START_ADDR+FLASH_ADDR_UNLOCK1) = FLASH_CHIP_ERASE;

//判断擦除操作是否正确完成 
	if(FlashStatusDetect((UINT16 *)flashPtr,0xffff,0x100000)!=1) 
	printf("ERROR!");
	return(0);
}
int FlashStatusDetect(UINT16 *ptr,UINT16 Data, int TimeCounter) 
{ 
	int tmp = TimeCounter; 
	volatile UINT16 *p = ptr; 
	UINT16 current_data; 
	current_data = Data & 0x8080; 	
					//为什么不直接用0xffff?
	while((*p & 0x8080) != current_data) 
	{ 
		if(tmp-- <= 0) 
		return (0); 
	} 
		return (1); 
}

⌨️ 快捷键说明

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