?? dec6713_flash.c
字號:
/********************************************************************************
Function:For Flash burn
*********************************************************************************/
#include <stdio.h>
#include <csl.h>
#include <csl_irq.h>
#include <csl_chip.h>
#include <csl_emif.h>
#include <csl_irq.h>
#include "DEC6713_FLASH.h"
#include <math.h>
/********************************************************************************/
extern far void vectors();
#define FLASH_ADR1 (0x90000000+0xAAA)
#define FLASH_ADR2 (0x90000000+0x555)
#define Sourceaddr 0x90000000
#define Toggle_Bit 0x40 /* d6 = 1 */
#define Hangup_Bit 0x20 /* d5 = 1 */
#define Pass_Flag 0
#define Fail_Flag 1
#define ramstart 0x00000000
unsigned long ramaddr=ramstart;
Uint8 flash[1024];
Uint8 ram[1024];
Uint8 Tempdata[720];
Uint8 Tempdata2[740];
unsigned char Tempdata1;
unsigned char Data_to_write[240];
unsigned char Data_from_flash[1024];
char filename[128];
long codelength;
long datalength;
long lengthtemp;
unsigned long processaddr=Sourceaddr;
unsigned int counter=0;
void flash_chip_erase()
{
*(unsigned volatile char*)FLASH_ADR1=0xaa;
*(unsigned volatile char*)FLASH_ADR2=0x55;
*(unsigned volatile char*)FLASH_ADR1=0x80;
*(unsigned volatile char*)FLASH_ADR1=0xaa;
*(unsigned volatile char*)FLASH_ADR2=0x55;
*(unsigned volatile char*)FLASH_ADR1=0x10;
}
int Toggle_Bit_Check(unsigned char *addr)
{
unsigned char toggle_data,read_data;
toggle_data = *addr&Toggle_Bit;
do{
if(((read_data = *addr) &Toggle_Bit) == toggle_data)
break;
toggle_data = read_data & Toggle_Bit;
}while((read_data&Hangup_Bit) != Hangup_Bit);
toggle_data = *addr & Toggle_Bit;
if(((read_data = *addr)&Toggle_Bit) != toggle_data)
return (Fail_Flag);
return (Pass_Flag);
}
int Write_Flash_Word(unsigned char *data,unsigned char *address)
{
*(unsigned volatile char *)FLASH_ADR1=0xaa;
*(unsigned volatile char *)FLASH_ADR2=0x55;
*(unsigned volatile char *)FLASH_ADR1=0xa0;
*address=*data;
return(Toggle_Bit_Check(address));
}
int Read_Flash_Word(unsigned char *data,unsigned char *address)
{
*(unsigned volatile char *)FLASH_ADR1=0xaa;
*(unsigned volatile char *)FLASH_ADR2=0x55;
*(unsigned volatile char *)FLASH_ADR1=0xf0;
*data=*address;
return(Toggle_Bit_Check(address));
}
void Write_Flash(unsigned char Data_to_write[],unsigned char *write_address)
{
int j;
for(j=0;j<240;j++)
Write_Flash_Word(&Data_to_write[j],write_address++);
}
void Read_Flash(unsigned char Data_from_flash[],unsigned char *read_address)
{
int i;
for(i=0;i<1024;i++)
Read_Flash_Word(&Data_from_flash[i],read_address++);
}
/********************************************************************************/
/********************************************************************************/
void main()
{
FILE *stream;
long int datalength1;
long codelength1;
int i,k;
int Conditionback=1;
CSL_init();
/* Initialize DEC6713 board. */
DEC6713_init();
/*Read_Flash(flash,(unsigned char *)Sourceaddr);
for(i=0;i<1024;i++)
{
ram[i]=*(unsigned char *)ramaddr;
ramaddr++;
}
for(k=0;k<1024;k++)
{
if(flash[i]!=ram[i])
printf("data %d is error\n",i);
}*/
puts("Please Input your file\n");
scanf("%s",filename);
flash_chip_erase();
puts(" erasing the Flash\n");
stream=fopen(filename,"rb");
fseek(stream,0,SEEK_END); /* the end address of the file */
codelength1 = (long)ftell(stream);
fseek(stream,0,SEEK_SET); /* the start address of the file */
datalength1 = (long)ftell(stream);
codelength = codelength1-datalength1;/* calculate the length of the file */
if(stream != NULL)
{
while(Conditionback)
{
if(codelength>740)
{
datalength = 740;
codelength -= 740;
lengthtemp = 740;
}
else
{
datalength = codelength;
lengthtemp = codelength;
Conditionback = 0;
}
fread(Tempdata2,sizeof(unsigned char),datalength,stream);
/************************/
/************************/
if(datalength<740)
{
for(i=datalength;i<740;i++)
{
Tempdata2[i]='F';
}
}
/************************/
/************************/
for(k=0;k<10;k++)
{
for(i=0;i<72;i++)
{
Tempdata[72*k+i]=Tempdata2[74*k+i];
}
}
/************************/
/************************/
for(i=0;i<720;i++)
{
switch(Tempdata[i])
{
case'0':Tempdata[i]=0x00;break;
case'1':Tempdata[i]=0x01;break;
case'2':Tempdata[i]=0x02;break;
case'3':Tempdata[i]=0x03;break;
case'4':Tempdata[i]=0x04;break;
case'5':Tempdata[i]=0x05;break;
case'6':Tempdata[i]=0x06;break;
case'7':Tempdata[i]=0x07;break;
case'8':Tempdata[i]=0x08;break;
case'9':Tempdata[i]=0x09;break;
case'A':Tempdata[i]=0x0A;break;
case'B':Tempdata[i]=0x0B;break;
case'C':Tempdata[i]=0x0C;break;
case'D':Tempdata[i]=0x0D;break;
case'E':Tempdata[i]=0x0E;break;
case'F':Tempdata[i]=0x0F;break;
default:break;
}
}
for(i=0;i<240;i++)
{
//Data_to_write[i]=(Tempdata[i*6+3]<<12)|(Tempdata[i*6+4]<<8)|(Tempdata[i*6]<<4)|Tempdata[i*6+1];
//Data_to_write[i]=(Tempdata[i*6]<<12)|(Tempdata[i*6+1]<<8)|(Tempdata[i*6+3]<<4)|Tempdata[i*6+4];
Data_to_write[i]=(Tempdata[i*3]<<4)|(Tempdata[i*3+1]);
}
Write_Flash(Data_to_write,(unsigned char *)processaddr);
Read_Flash_Word(&Tempdata1,(unsigned char *)Sourceaddr);
if(Tempdata1!=0xC2)
{
*(unsigned volatile char *)FLASH_ADR1=0xaa;
*(unsigned volatile char *)FLASH_ADR2=0x55;
*(unsigned volatile char *)FLASH_ADR1=0xa0;
*(unsigned char *)Sourceaddr =0xC2;
}
processaddr += 240;
printf("%s,%d\n","Writing FLASH is in progress",counter++);
}
fclose(stream);
*(unsigned char *)Sourceaddr = 0xF0;
puts(" End of writting the Flash\n");
puts(" Now Please reset your system\n");
}
else
puts("the file is empty\n");
}
/********************************************************************************\
\* End of DEC6713_FLASH.C *\
\********************************************************************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -