amd16.c

来自「对norflash进行擦初、编程的源码」· C语言 代码 · 共 146 行

C
146
字号
/*************************************************************************/
/*                                                                       */
/* 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 + =
减小字号Ctrl + -
显示快捷键?