This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我编写了一个程序,原来都在RAM里面跑都正常,后来程序大了,就想烧写到FLASH里面进行调试,不过无论怎么修改,当烧写成功后,重新上电都没法启动,不知道是什么原因,而且当烧写完之后,如果不下电,只是把仿真器拔掉是可以正常运行的。不知大家是否有遇到过这种问题?是不是只是在RAM里面运行,而程序没把代码烧写到FLASH里面?或者没调用?
附上CMD代码:
MEMORY
{
PAGE 0:
progRAM : origin = 0x008000, length = 0x001000 /* on-chip RAM (L0-L2)*/
OTP : origin = 0x3D7800, length = 0x000400 /* on-chip OTP */
FLASHH : origin = 0x3E8000, length = 0x002000 /* on-chip FLASH */
FLASHG : origin = 0x3EA000, length = 0x002000 /* on-chip FLASH */
FLASHF : origin = 0x3EC000, length = 0x002000 /* on-chip FLASH */
FLASHE : origin = 0x3EE000, length = 0x002000 /* on-chip FLASH */
FLASHD : origin = 0x3F0000, length = 0x002000 /* on-chip FLASH */
FLASHC : origin = 0x3F2000, length = 0x002000 /* on-chip FLASH */
FLASHA : origin = 0x3F6000, length = 0x001F80 /* on-chip FLASH */
CSM_RSVD : origin = 0x3F7F80, length = 0x000076 /* Part of FLASHA. Program with all 0x0000 when CSM is in use. */
BEGIN : origin = 0x3F7FF6, length = 0x000002 /* Part of FLASHA. Used for "boot to Flash" bootloader mode. */
CSM_PWL : origin = 0x3F7FF8, length = 0x000008 /* Part of FLASHA. CSM password locations in FLASHA */
IQTABLES : origin = 0x3FE000, length = 0x000B50 /* IQ Math Tables in Boot ROM */
IQTABLES2 : origin = 0x3FEB50, length = 0x00008C /* IQ Math Tables in Boot ROM */
IQTABLES3 : origin = 0x3FEBDC, length = 0x0000AA /* IQ Math Tables in Boot ROM */
BOOTROM : origin = 0x3FF27C, length = 0x000D44 /* Boot ROM */
RESET : origin = 0x3FFFC0, length = 0x000002 /* part of boot ROM */
VECTORS : origin = 0x3FFFC2, length = 0x00003E /* part of boot ROM */
PAGE 1 :
BOOT_RSVD : origin = 0x000000, length = 0x000050 /* Part of M0, BOOT rom will use this for stack */
RAMM0 : origin = 0x000050, length = 0x0003B0 /* on-chip RAM block M0 */
RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */
dataRAM : origin = 0x009000, length = 0x001000 /* data RAM (L3) */
FLASHB : origin = 0x3F4000, length = 0x002000 /* on-chip FLASH */
CLA_CPU_MSGRAM : origin = 0x001480, length = 0x000080 /* CLA-R/W, CPU-R message RAM */
CPU_CLA_MSGRAM : origin = 0x001500, length = 0x000080 /* CPU-R/W, CLA-R message RAM */
}
SECTIONS
{
/* Allocate program areas: */
.cinit : > FLASHA, PAGE = 0
.pinit : > FLASHA, PAGE = 0
.text : > FLASHA, PAGE = 0
codestart : > BEGIN PAGE = 0
ramfuncs : LOAD = FLASHA,
RUN = progRAM,
LOAD_START(_RamfuncsLoadStart),
LOAD_END(_RamfuncsLoadEnd),
RUN_START(_RamfuncsRunStart),
PAGE = 0
csmpasswds : > CSM_PWL PAGE = 0
csm_rsvd : > CSM_RSVD PAGE = 0
/* Allocate uninitalized data sections: */
.stack : > RAMM0, PAGE = 1
.ebss : > dataRAM, PAGE = 1
.esysmem : > dataRAM, PAGE = 1
/* Initalized sections go in Flash */
/* For SDFlash to program these, they must be allocated to page 0 */
.econst : > FLASHC PAGE = 0
.switch : > FLASHA PAGE = 0
/* Allocate IQ math areas: */
IQmath : > FLASHA PAGE = 0 /* Math Code */
IQmathTables : > IQTABLES PAGE = 0, TYPE = NOLOAD /* Math Tables In ROM */
Cla1ToCpuMsgRAM : > CLA_CPU_MSGRAM PAGE = 1
CpuToCla1MsgRAM : > CPU_CLA_MSGRAM PAGE = 1
.reset : > RESET, PAGE = 0, TYPE = DSECT
vectors : > VECTORS PAGE = 0, TYPE = DSECT
DLOG : > dataRAM, PAGE = 1
}
主程序为:
void main(void)
{
MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
InitFlash();
DINT;
InitSysCtrl(); //系统初始化
InitPieCtrl(); //外设初始化
InitGpio(); //IO初始化
InitEPwm1Gpio(); //PWM口初始化
InitEPwm3Gpio(); //PWM口初始化
InitSciaGpio(); //通信口初始化
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();//外部中断初始化
InitCpuTimers(); //CPU时钟初始化
InitAdc(); //init the ADC
InitSci(); //SCI通信初始化
......
}
Sam,
看起来确实像引导模式没有配置好,你应该确认一下GPIO34,GPIO37是否都是高电平,因为这两个引脚如果没有外接电路的话,默认上电时上拉使能的,因此可以自动引导到Flash,所以你要查看一下这两个引脚硬件的状态。另外你的工程里面应该有一个DSP2803x_CodeStartBranch.asm源代码,这是Flash入口地址时最开始执行的一些初始化的东西,才会跑到main。关于CMD,我的建议是可以先用TI提高的CMD文件,在controlSUITE中都有,是满足前提的开发的,避免一些错误。另外从TI提供的例程去开始你的项目,在上面做修改,在controlSUITE上也有28035_Flash的工程,你可以导入烧写。
所以肯定是可以烧写到Flash的,至于有没有烧写进入,可以在编译状态通过memory窗口查看。
新年快乐!万事如意!
Eric