完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
本帖最后由 sundonga 于 2014-10-29 10:36 编辑
各位大侠,我仿照别人的烧写程序改写了一个自己的hex文件烧写程序,DSP是DSP6713,Flash是AM29LV160D,程序是从hex文件中每次读取10行,对这10行进行处理主要是去掉空格和换行符等,然后将其烧写进FLASH,之后再读取10行,循环进行直到读完整个hex文件。现在的问题是:我的进行完第一次10行的读取烧写后,到第二次就会挂死在那里,始终没找到原因,希望大家帮忙看看这是怎么回事? 下面是程序代码: —————————————————————————————————————————— #include "Sun6713_config.h" #include #include #define Sourceaddr 0x90000000 Uint8 Tempdata[720]; Uint8 Tempdata2[740]; Uint16 Tempdata1; unsigned short Data_to_write[120]; unsigned char Data_from_flash[1024]; char filename[128]; long codelength; long datalength; long lengthtemp; unsigned int processaddr=Sourceaddr; unsigned int counter=0; /********************************************************************************/ volatile Uint16* FLASH_ADR1 = (volatile Uint16 *)(0x90000000+(0x555<<1)); volatile Uint16* FLASH_ADR2 = (volatile Uint16 *)(0x90000000+(0x2AA<<1)); #define Pass_Flag 0 #define Fail_Flag 1 #define FLASH_UL1 0x012a;//0xAA #define FLASH_UL2 0x0095;//0x55 #define FLASH_UL3 0x0100;//0x80 #define FLASH_UL4 0x012a;//0xAA #define FLASH_UL5 0x0095;//0x55 #define FLASH_SECTOR_UL6 0x30 #define FLASH_CHIP_UL6 0x0010;//0x10 #define FLASH_PROGRAM 0x0120;//0xA0 #define SECTOR_SIZE 0x8000 #define BLOCK_SIZE 0x8000 #define CHIP_SIZE 0x40000 void flash_chip_erase() { *FLASH_ADR1=FLASH_UL1;//0xaa; (volatile Uint16*) *FLASH_ADR2=FLASH_UL2;//0x55;(volatile Uint16*) *FLASH_ADR1=FLASH_UL3;//0x80;(volatile Uint16*) *FLASH_ADR1=FLASH_UL4;//0xaa;(volatile Uint16*) *FLASH_ADR2=FLASH_UL5;//0x55;(volatile Uint16*) *FLASH_ADR1=FLASH_CHIP_UL6;//0x10; (volatile Uint16*) } int Write_Flash_Word(Uint16 *data,Uint16 *address) { *(volatile Uint16 *)FLASH_ADR1=FLASH_UL1;//0xaa; *(volatile Uint16 *)FLASH_ADR2=FLASH_UL2;//0x55; *(volatile Uint16 *)FLASH_ADR1=FLASH_PROGRAM;//0xa0; (*address)=*data; //return(Toggle_Bit_Check(address)); return Pass_Flag; } int Read_Flash_Word(Uint16 *data,Uint16 *address) { *(volatile Uint16 *)FLASH_ADR1=FLASH_UL1;//0xaa; *(volatile Uint16 *)FLASH_ADR2=FLASH_UL2;//0x55; *(volatile Uint16 *)FLASH_ADR1=0x01b0;//0xf0; *data=(*address); //return(Toggle_Bit_Check(address)); return Pass_Flag; } void Write_Flash(Uint16 Data_to_write[],Uint16 *write_address) { int j; for(j=0;j<120;j++) Write_Flash_Word(&Data_to_write[j],write_address++); } /********************************************************************************/ main() { /*******************************************************/ /*** hex文件下载到Flash ***/ FILE *stream; long int datalength1; long codelength1; int i,k; int Conditionback=1; /* Initialize DEC6713 board. */ DSP6713_Init(); puts("Please Input your filen"); scanf("%s",filename); flash_chip_erase(); puts(" erasing the Flashn"); 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='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) { case'0':Tempdata=0x00;break; case'1':Tempdata=0x01;break; case'2':Tempdata=0x02;break; case'3':Tempdata=0x03;break; case'4':Tempdata=0x04;break; case'5':Tempdata=0x05;break; case'6':Tempdata=0x06;break; case'7':Tempdata=0x07;break; case'8':Tempdata=0x08;break; case'9':Tempdata=0x09;break; case'A':Tempdata=0x0A;break; case'B':Tempdata=0x0B;break; case'C':Tempdata=0x0C;break; case'D':Tempdata=0x0D;break; case'E':Tempdata=0x0E;break; case'F':Tempdata=0x0F;break; default:break; } } for(i=0;i<120;i++) { Data_to_write=(Tempdata[i*6]<<12)|(Tempdata[i*6+1]<<8)|(Tempdata[i*6+3]<<4)|Tempdata[i*6+4]; } Write_Flash(Data_to_write,(Uint16 *)processaddr); processaddr += 120; printf("%s,%dn","Writing FLASH is in progress",counter++); } fclose(stream); *(unsigned char *)Sourceaddr = 0xF0; puts(" End of writting the Flashn"); puts(" Now Please reset your systemn"); } else puts("the file is emptyn"); } /*******************************************************/ |
|
相关推荐
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
基于 DSP5509 进行数字图像处理中 Sobel 算子边缘检测的硬件连接电路图
2328 浏览 0 评论
680 浏览 0 评论
普中科技F28335开发板中,如何使用aic23播放由代码生成的正弦波
2765 浏览 0 评论
3525 浏览 1 评论
1192 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 06:00 , Processed in 0.402887 second(s), Total 43, Slave 36 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号