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

📄 flash_main.c

📁 COLDFIRE 5275板极初始化程序
💻 C
字号:
/*
 * File:		flash_main.c
 * Purpose:		Test the AM29LV160CB Flash on the M5275EVB
 *
 */
 
#include "m5275evb.h"

int sector_erase(uint32);

void main(void)
{
	uint16 i;
	uint16 data = 0xA5A5;
	
	printf("\n\nStarting Flash Example\n");
	/* Erase sector 0, 2, 5, 10 */
	if (!sector_erase(0))
		return;
	if (!sector_erase(0x3000))
		return;
	if (!sector_erase(0x40000))
		return;
	if (!sector_erase(0xE0000))
		return;
	
	

	/* Unlock Bypass command */
	*((uint16 *)(EXT_FLASH_ADDRESS + 0x0AAA)) = 0x00AA;
	*((uint16 *)(EXT_FLASH_ADDRESS + 0x0554)) = 0x0055;
	*((uint16 *)(EXT_FLASH_ADDRESS + 0x0AAA)) = 0x0020;
		
	/* Unlock Bypass Program command */
	*((uint16 *)(EXT_FLASH_ADDRESS + 0x0000)) = 0x00A0;
	
	/* Wait between unlock bypass and writes */
	for (i = 0; i < 1000; i++){};
	
	/* Program 16-bits of data to the 5 sectors */
	*((uint16 *)(EXT_FLASH_ADDRESS)) = data;
	
	while(*((uint16 *)(EXT_FLASH_ADDRESS)) != data){};
	
	
	*((uint16 *)(EXT_FLASH_ADDRESS + 0x0000)) = 0x00A0;
	*((uint16 *)(EXT_FLASH_ADDRESS + 0x3000)) = data;
	
	while(*((uint16 *)(EXT_FLASH_ADDRESS + 0x3000)) != data){};
	
	
	*((uint16 *)(EXT_FLASH_ADDRESS + 0x0000)) = 0x00A0;
	*((uint16 *)(EXT_FLASH_ADDRESS + 0x40000)) = data;
	
	while(*((uint16 *)(EXT_FLASH_ADDRESS + 0x40000)) != data){};
	
	
	*((uint16 *)(EXT_FLASH_ADDRESS + 0x0000)) = 0x00A0;
	*((uint16 *)(EXT_FLASH_ADDRESS + 0xE0000)) = data;
		
	while(*((uint16 *)(EXT_FLASH_ADDRESS + 0xE0000)) != data){};


	/* Unlock Bypass Reset command */
	*((uint16 *)(EXT_FLASH_ADDRESS + 0x0000)) = 0x0090;
	*((uint16 *)(EXT_FLASH_ADDRESS + 0x0000)) = 0x0000;

	/* Verify Data in all 5 sectors */
	
	if (*((uint16 *)(EXT_FLASH_ADDRESS + 0x0000)) != data)
	{
			printf("Write Failed at offset 0x0000\n");
	}
	
	if (*((uint16 *)(EXT_FLASH_ADDRESS + 0x3000)) != data)
	{
			printf("Write Failed at offset 0x3000\n");
	}
	
	if (*((uint16 *)(EXT_FLASH_ADDRESS + 0x40000)) != data)
	{
			printf("Write Failed at offset 0x40000\n");
	}
	
	if (*((uint16 *)(EXT_FLASH_ADDRESS + 0xE0000)) != data)
	{
			printf("Write Failed at offset 0xE0000\n");
	}

	/* Test passed... Erase sector 0, 2, 5, and 10 again */
	if (!sector_erase(0))
		return;
	if (!sector_erase(0x3000))
		return;
	if (!sector_erase(0x40000))
		return;
	if (!sector_erase(0xE0000))
		return;
	
	printf("Flash Example Finished\n");
}
/********************************************************************/
int sector_erase(uint32 address)
{
	int i;
	
	*((uint16 *)(EXT_FLASH_ADDRESS + 0x0AAA)) = 0x00AA;
	*((uint16 *)(EXT_FLASH_ADDRESS + 0x0554)) = 0x0055;
	*((uint16 *)(EXT_FLASH_ADDRESS + 0x0AAA)) = 0x0080;
	*((uint16 *)(EXT_FLASH_ADDRESS + 0x0AAA)) = 0x00AA;
	*((uint16 *)(EXT_FLASH_ADDRESS + 0x0554)) = 0x0055;
	*((uint16 *)(EXT_FLASH_ADDRESS + address)) = 0x0030;
	
	for (i = 0; i < 40000000; i++)
	{
		if (*((uint16*)(EXT_FLASH_ADDRESS + address)) == 0xFFFF)
			break;
	}
	if (i == 40000000)
	{
		printf("Erase failed at 0x%x\n",address);
		return FALSE;
	}
	return TRUE;
}
/********************************************************************/

⌨️ 快捷键说明

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