?? test_flash.c
字號:
/**************************************************************************/
/* Copyright 2004 by SAGA Work House. */
/* All rights reserved. Property of Saga W.H. */
/* Restricted rights to use, duplicate or disclose this code aregranted */
/* through contract. */
/* */
/**************************************************************************/
/***************************************************************************/
/* Flash test program for TMS320DM642EVM */
/* */
/* Author: Ku */
/* Date: 2004,5,27 */
/* Version: 0.1 */
/* */
/***************************************************************************/
#include <csl.h>
#include <csl_dat.h>
#include <csl_edma.h>
#include "emiface0cfg.h"
#include "stdio.h"
/**************************************************/
#define CE1_ADDRS 0x90000000
#define FLASH_ADDRS CE1_ADDRS
#define LENGTH 0x80000
#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;
EMIFA_config(&emifaCfg0);
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 AM29LV033 (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. */
/* */
/**************************************************************************/
{
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("Erase flash error!\n");
else
printf("Erase flash ok!\n");
return pass;
}
/****************************************************************************/
/* program_flash: Routine to program FLASH AM29LV033 */
/* 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 + -