?? test_flash.c.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 + -