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

📄 test_flash.c.bak

📁 闻亭DM642的培训全部资料与大家共享
💻 BAK
字号:
/**********************************************************/
/*  FLASH_TEST for TMS320C6415                            */
/*                                                        */
/*  Author:    Eward.li                                   */
/*  Date:      2003,10,26                                  */
/*  Version:   0.1                                        */
/**********************************************************/
#include <csl.h>
#include <csl_dat.h>
#include <csl_edma.h>
#include "emiface0cfg.h"
#include "stdio.h"
/**************************************************/
#define CE1_ADDRS 0x64000000
#define FLASH_ADDRS CE1_ADDRS
#define LENGTH 0x800000
#define TRUE 1
#define FALSE 0
int erase_flash(char* flash_addrs);
int program_flash(char * flash_addrs, int num_words);
int poll_data(char *,unsigned char );
/**************************************main**************************************/
/* Main code body.                                                              */
/********************************************************************************/

void main(void)
{
  
   int pass = TRUE;
   char * flash_ptr = (char *)FLASH_ADDRS;
   EMIFB_config(&emifbCfg0);
   pass = erase_flash(flash_ptr);
      if (pass)
         {
             pass = program_flash(flash_ptr, LENGTH);
                if (!pass)
                   printf("Failed in program operation\n");
                else
                   printf("Successful erase and program!!!\n");
          }
      else
        printf("Failed in erase operation!!!!\n");
} 
/*********************************************************************************/
/* erase_flash : Routine to erase entire FLASH memory AM29LV065 (8Mx8bit) */
/* Inputs: */
/* flash_ptr: Address of the FLASH */
/* Return value: */
/* Returns TRUE if passed, or FALSE if failed. Pass or failure is */
/* determined during the poll_data routine. */
/* */
/*********************************************************************************/
int erase_flash(char * flash_ptr)
{
   char * ctrl_addr1 = (char *) ((int)flash_ptr );
   char * ctrl_addr2 = (char *) ((int)flash_ptr );
   int pass = TRUE;
   * ctrl_addr1 = 0xaa; /* Erase sequence  */
   * ctrl_addr2 = 0x55;
   * ctrl_addr1 = 0x80;
   * ctrl_addr1 = 0xaa;
   * ctrl_addr2 = 0x55;
   * ctrl_addr1 = 0x10;
   pass = poll_data(flash_ptr, (unsigned char) 0xff);
   if (!pass)
      printf("failed erase\n\n");
   return pass;
}
/********************************************************************************/
/* program_flash: Routine to program FLASH AM29LV040(512K x 8bit) */
/* Inputs: */
/* flash_ptr: Address of the FLASH PEROM */
/* lenth : The lenth that the data to be programmed */
/* Return value: */
/* Returns TRUE if passed, or FALSE if failed. Pass or failure is */
/* determined during the poll_data routine. */
/* */
/********************************************************************************/
int program_flash(char * flash_ptr, int length)
{
   int i;
   int pass;
   char * ctrl_addr1 = (char *) ((int)flash_ptr );
   char * ctrl_addr2 = (char *) ((int)flash_ptr);
   for (i = 0; i < length; i++)
   {
      * ctrl_addr1 = 0xaa;
      * ctrl_addr2 = 0x55;
      * ctrl_addr1 = 0xa0;
      * flash_ptr++ = i;
   pass = poll_data(flash_ptr-1, i);
   }
   if (!pass)
      printf("Failed at address %x \n\n", (int) flash_ptr);
   return pass;
}
/*********************************************************************************/
/* poll_data: Routine to determine if Flash has successfully completed the */
/* program or erase algorithm. This routine will loop until */
/* either the embedded algorithm has successfully completed or */
/* until it has failed. */
/* */
/* Inputs: */
/* prog_ptr : Address just programmed */
/* prog_data: Data just programmed to flash */
/* Return value: */
/* Returns TRUE if passed, or FALSE if failed. */
/* */
/*********************************************************************************/
int poll_data(char * prog_ptr, unsigned char prog_data)
{
   unsigned char data;
   int fail = FALSE;
   do 
   {
      data = (unsigned char) * prog_ptr;
         if (data != (prog_data & 0Xff))                /* is D7 != Data? */
         {
            if ((data & 0x20) == 0x20)               /*is D5 = 1 ? */
            {
               data = (unsigned char) * prog_ptr;
                  if (data != (prog_data & 0Xff))             /* is D7 = Data? */
                     fail = TRUE;
                  else
                     return TRUE;                    /* PASS */
            }
          }
          else
             return TRUE;                            /* PASS */
    } 
    while (!fail);
    return FALSE;                                    /* FAIL */
}

⌨️ 快捷键说明

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