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

📄 amd16.c

📁 对norflash进行擦初、编程的源码
💻 C
字号:
/*************************************************************************/
/*                                                                       */
/* FILE NAME                                      VERSION                */
/*                                                                       */
/* Amd16.c                                  	  1.0                    */
/*                                                                       */
/*                                                                       */
/*                                                                       */
/* FUNCTIONS : AMD Flash program code                            		 */
/*                                                                       */
/* DEPENDENCIES                                                          */
/*                                                                       */
/*                                                                       */
/*************************************************************************/

#include <stdio.h>
#include <string.h>
#include "common.h"

volatile uchar *firstAddr = 	(uchar *)(BASE_ADDRESS+0xaaa);
volatile uchar *secondAddr = 	(uchar *)(BASE_ADDRESS+0x555);

void Main(void)
{
 EraseAll();
 
			
}
		
// Flash program function
/*void  Program(void)
{
	ulong i;
	volatile uchar *targetP;
	volatile uchar *srcP;
 
   targetP=(uchar *)TARGET_ADDR;
   srcP= (uchar *)SOURCE_ADDR;
    for(i=0; i<SOURCE_LENGTH; i++, targetP++, srcP++)
    {
    	    __asm{
    	      nop
    	      nop
    	      nop
    	      nop
    	      nop
    	      nop
    	      nop
    	      nop
    	      nop
    	      nop
    	      nop
    	      nop
    	      nop
    	      nop
    	      nop
    	      }
			*firstAddr = FIRST_CMD;
			  
			*secondAddr = SECOND_CMD;
			  
			*firstAddr = PROGRAM_CMD;
			 
			
			*targetP=*srcP;
			
		   
		
		if(!Wait((ulong)targetP))
			return;
    }
    }*/
	
// Chip erase function
void EraseAll(void)
{


	// First Flash erase
	*firstAddr = FIRST_CMD;
	*secondAddr = SECOND_CMD;
	*firstAddr = ERASE_CMD;
	
	*firstAddr = FIRST_CMD;
	*secondAddr = SECOND_CMD;
	*firstAddr = ERASE_ALL_CMD;
	
	// Second flash erase
	//*thirdAddr = FIRST_CMD;
	//*fourthAddr = SECOND_CMD;
	//*thirdAddr = ERASE_CMD;
	
	//*thirdAddr = FIRST_CMD;
	//*fourthAddr = SECOND_CMD;
	//*thirdAddr = ERASE_ALL_CMD;
	*firstAddr = RESET_CMD;
	
     

	//if(!Wait((ulong)thirdAddr))
		//return;

	//;
	//Flash_Info.Result=1;
	
}

int Wait(ulong tAddr)
{
	volatile ushort old, status;
	volatile ushort * targetP;
	
	targetP = (ushort *)tAddr;
	

	old = *targetP;

    while(1)
   	{

		status=*targetP;

		//Toggle algorithm			
		if((status & TOGGLE_MASK1) == (old & TOGGLE_MASK1)) 
			break;
				
		if(status & TOGGLE_MASK2)
		 {
			old = *targetP;
			status=*targetP;

			if((status & TOGGLE_MASK1) == (old & TOGGLE_MASK1)) 
				break;
			else {
				
				*firstAddr = RESET_CMD;
				return 0;
			 }
			
		 }
			
		old = status;

		}
	return 1;
}

⌨️ 快捷键说明

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