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

📄 ipb_flash.c

📁 该代码实现了 两次下载法在dspC6713平台上 烧写flash的操作过程
💻 C
字号:
/*****************************************************************************
* File name :  FLASH.c
* Description: Including Functions Supporting 8-bit Flash (AT29LV010A)
* FLASH_START		   0x90000000
* FLASH_END		       0x9007FFFF
* FLASH_ADR1		   0x90005555
* FLASH_ADR2		   0x90002AAA
******************************************************************************/
#ifndef MASTER_FILE
#define C6711_GLOBALS
#include "includes.h"
#endif

void delay_msec(int );

/*-------------------------------------------------------------------------*
* Function:   flash_page_prog() 
* Description:                                                               
*-------------------------------------------------------------------------*/

void flash_page_prog(char * src_addr, char * dst_addr, int page_size)
{
  int i;
  char temp,temp1;
  char *flash_ptr = dst_addr;
  char *src_ptr = src_addr;

  *(char *)FLASH_ADR1 = FLASH_KEY1;/*FLASH_ADR1=0x90005555,FLASH_KEY1=0xAA*/
  *(char *)FLASH_ADR2 = FLASH_KEY2;/*FLASH_ADR2=0x90002AAA,FLASH_KEY2=0x55*/
  *(char *)FLASH_ADR1 = FLASH_KEY3;/*FLASH_KEY3=0xA0                      */
  *(char *)FLASH_ADR1 = FLASH_KEY3;
  for (i=0;i<page_size;i++)
   {
    *flash_ptr++ = *src_ptr++;
    
   }
  temp = *--flash_ptr;
  temp1 = *--src_ptr;
  delay_msec(500);
  /*while ( temp != temp1)
  {
    temp = *flash_ptr;
  }*/
}

/*-------------------------------------------------------------------------*
* Function:   flash_erase() 
* Description: erase the whole flash      
*-------------------------------------------------------------------------*/
void flash_erase()
{
 // printf("Begin erase the Flash\n");
  *(char *)FLASH_ADR1 = FLASH_KEY1;/*FLASH_ADR1=0x90005555,FLASH_KEY1=0xAA*/
  *(char *)FLASH_ADR2 = FLASH_KEY2;/*FLASH_ADR2=0x90002AAA,FLASH_KEY2=0x55*/
  *(char *)FLASH_ADR1 = 0x80;
  *(char *)FLASH_ADR1 = 0xAA;
  *(char *)FLASH_ADR2 = 0x55;
  *(char *)FLASH_ADR1 = 0x10;
  delay_msec(1000);
}

/*-------------------------------------------------------------------------*
* Function:   sector_erase() 
* Description: erase one sector;
*              each block is 2k words, sector_addr is decided by A11-A17                                                              
*-------------------------------------------------------------------------*/
void sector_erase(unsigned int sector_addr)
{
 // printf("Begin erase the Flash\n");
  *(char *)FLASH_ADR1 = FLASH_KEY1;/*FLASH_ADR1=0x90005555,FLASH_KEY1=0xAA*/
  *(char *)FLASH_ADR2 = FLASH_KEY2;/*FLASH_ADR2=0x90002AAA,FLASH_KEY2=0x55*/
  *(char *)FLASH_ADR1 = 0x80;
  *(char *)FLASH_ADR1 = 0xAA;
  *(char *)FLASH_ADR2 = 0x55;
  *(char *)sector_addr = 0x30;
  delay_msec(10000);
}

/*-------------------------------------------------------------------------*
* Function:   block_erase() 
* Description: erase one block,
*              each block is 32k words, sector_addr is decided by A15-A17                                                                
*-------------------------------------------------------------------------*/
void block_erase(unsigned int block_addr)
{
 // printf("Begin erase the Flash\n");
  *(char *)FLASH_ADR1 = FLASH_KEY1;/*FLASH_ADR1=0x90005555,FLASH_KEY1=0xAA*/
  *(char *)FLASH_ADR2 = FLASH_KEY2;/*FLASH_ADR2=0x90002AAA,FLASH_KEY2=0x55*/
  *(char *)FLASH_ADR1 = 0x80;
  *(char *)FLASH_ADR1 = 0xAA;
  *(char *)FLASH_ADR2 = 0x55;
  *(char *)block_addr = 0x50;
  delay_msec(10000);
}

/*-------------------------------------------------------------------------*
* Function:    flash_product_identify()
* Argument:    sel==0 return manufacture code 
*              sel==1 return device code 
* Description: Read the product identifier
*              Manufacture Code is 1F;Device Code is 35.                                                                
*-------------------------------------------------------------------------*/
int flash_product_identify(char sel)
{ 
 int code;
 //printf("Flash manufactue code identify\n");
 /*Enter Product Identification Mode*/
  *(char *)FLASH_ADR1 = FLASH_KEY1;/*FLASH_ADR1=0x90005555,FLASH_KEY1=0xAA*/
  *(char *)FLASH_ADR2 = FLASH_KEY2;/*FLASH_ADR2=0x90002AAA,FLASH_KEY2=0x55*/
  *(char *)FLASH_ADR1 = 0x90;
   delay_msec(200);
/*Read Manufacture Code*/
 if(sel==0)
  code=(*(char *)(FLASH_START));
/*Read Device Code*/ 
 else if(sel==1)
      code=(*(char *)(FLASH_START+0x01));
      else
      code=0;
/*Exit Product Identification Mode*/ 
 *(char  *)FLASH_ADR1 = FLASH_KEY1;
 *(char  *)FLASH_ADR2 = FLASH_KEY2;
 *(char  *)FLASH_ADR1 = 0xF0;
 delay_msec(200);
 
 return code;
}

/*-------------------------------------------------------------------------*
* Function:    flash_CFI_query()
* Argument:    info_addr is the address of common flash memory interface
*
              information 
* Description: Read the characteristics information of the flash   
*              Including CFI Query Identification String,
*              System Interface Information and Device Geometry Information                                                          
*-------------------------------------------------------------------------*/
int flash_CFI_query(unsigned int info_addr)
{ 
 int code;
 /*Enter Product Identification Mode*/
  *(char *)FLASH_ADR1 = FLASH_KEY1;/*FLASH_ADR1=0x90005555,FLASH_KEY1=0xAA*/
  *(char *)FLASH_ADR2 = FLASH_KEY2;/*FLASH_ADR2=0x90002AAA,FLASH_KEY2=0x55*/
  *(char *)FLASH_ADR1 = 0x98;
   delay_msec(20);

  code=(*(char *)info_addr);
  
/*Exit Product Identification Mode*/ 
 *(char *)FLASH_ADR1 = FLASH_KEY1;
 *(char *)FLASH_ADR2 = FLASH_KEY2;
 *(char *)FLASH_ADR1 = 0xF0;
 delay_msec(20);
 
 return code;
}

/* END OF FILE */

⌨️ 快捷键说明

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