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.
我的程序在flash里运行正常,我将部分程序copy到H0SARAM里后只要运行到H0SARAM里的程序就会进入非法中断(中断如下所示),但如果把同样的程序copy到L0SARAMA就没有这问题可以顺利运行。H0里不能移植程序么?请教高手帮忙解答一下,谢谢!
interrupt void ILLEGAL_ISR(void) // Illegal operation TRAP
{
// Insert ISR Code here
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
asm(" ESTOP0");
for(;;);
}
您好,附件中是我程序的CMD文件如下,
/*==================================================================
注:在flash烧写之前,应将程序载入ram(load program)后,检查CsmRegs
(0x000AE0)的八个寄存器的内容,其对应于dsp芯片安全密码,该值不能全
部为0x0000,当密码不设置时,该值全部为0xFFFF。当任何一个内部flash段
被烧写时,CsmRegs中内容将被同时烧写。
==================================================================*/
MEMORY
{
PAGE 0 :
RAML0 : origin = 0x008000, length = 0x001800
EXTRAM0 : origin = 0x100000, length = 0x004000
OTP : origin = 0x3D7800, length = 0x000800
FLASHJ : origin = 0x3D8000, length = 0x002000
FLASHI : origin = 0x3DA000, length = 0x002000
FLASHH : origin = 0x3DC000, length = 0x004000
FLASHG : origin = 0x3E0000, length = 0x004000
/* FLASHF : origin = 0x3E4000, length = 0x004000*/
/* FLASHE : origin = 0x3E8000, length = 0x004000*/
FLASHEF : origin = 0x3E4000, length = 0x008000
/* FLASHD : origin = 0x3EC000, length = 0x004000 */
FLASHCD : origin = 0x3EC000, length = 0x008000
FLASHB : origin = 0x3F4000, length = 0x002000
FLASHA : origin = 0x3F6000, length = 0x001F80
CSM_RSVD : origin = 0x3F7F80, length = 0x000076 /* Part of FLASHA. Program with all 0x0000 when CSM is in use. */
BEGIN : origin = 0x3F7FF6, length = 0x000002
PASSWDS : origin = 0x3F7FF8, length = 0x000008
PRAMH0 : origin = 0x3F8000, length = 0x002000 /*used as program segment*/
ROM : origin = 0x3FF000, length = 0x000FC0
RESET : origin = 0x3FFFC0, length = 0x000002
VECTORS : origin = 0x3FFFC2, length = 0x00003E
PAGE 1 :
/* SARAM */
RAMM0 : origin = 0x000040, length = 0x0003c0
RAMM1 : origin = 0x000400, length = 0x000400
RAML1 : origin = 0x009800, length = 0x000800
EXTRAM1 : origin = 0x104000, length = 0x01c000
/*-------------------------------------------------------------*/
DEV_EMU : origin = 0x000880, length = 0x000180 /* device emulation registers */
PIE_VECT : origin = 0x000D00, length = 0x000100 /* PIE Vector Table */
FLASH_REGS : origin = 0x000A80, length = 0x000060 /* FLASH registers */
CSM : origin = 0x000AE0, length = 0x000010 /* code security module registers */
XINTF : origin = 0x000B20, length = 0x000020 /* external interface registers */
CPU_TIMER0 : origin = 0x000C00, length = 0x000008 /* CPU Timer0 registers (CPU Timer1 and Timer2 are reserved for BIOS)*/
CPU_TIMER1 : origin = 0x000C08, length = 0x000008
CPU_TIMER2 : origin = 0x000C10, length = 0x000008
PIE_CTRL : origin = 0x000CE0, length = 0x000020 /* PIE control registers */
ECANA : origin = 0x006000, length = 0x000040 /* eCAN control and status registers */
ECANA_LAM : origin = 0x006040, length = 0x000040 /* eCAN local acceptance masks */
ECANA_MOTS : origin = 0x006080, length = 0x000040 /* eCAN message object time stamps */
ECANA_MOTO : origin = 0x0060C0, length = 0x000040 /* eCAN object time-out registers */
ECANA_MBOX : origin = 0x006100, length = 0x000100 /* eCAN mailboxes */
SYSTEM : origin = 0x007010, length = 0x000020 /* System control registers */
SPIA : origin = 0x007040, length = 0x000010 /* SPI registers */
SCIA : origin = 0x007050, length = 0x000010 /* SCI-A registers */
XINTRUPT : origin = 0x007070, length = 0x000010 /* external interrupt registers */
GPIOMUX : origin = 0x0070C0, length = 0x000020 /* GPIO mux registers */
GPIODAT : origin = 0x0070E0, length = 0x000020 /* GPIO data registers */
ADC : origin = 0x007100, length = 0x000020 /* ADC registers */
EVA : origin = 0x007400, length = 0x000040 /* Event Manager A registers */
EVB : origin = 0x007500, length = 0x000040 /* Event Manager B registers */
SCIB : origin = 0x007750, length = 0x000010 /* SCI-B registers */
MCBSPA : origin = 0x007800, length = 0x000040 /* McBSP registers */
CSM_PWL : origin = 0x3F7FF8, length = 0x000008 /* Part of FLASHA. CSM password locations. */
/*--------------------------------------------------------------*/
}
SECTIONS
{
PieVectTableFile : > PIE_VECT, PAGE = 1
/*** Peripheral Frame 0 Register Structures ***/
DevEmuRegsFile : > DEV_EMU, PAGE = 1
FlashRegsFile : > FLASH_REGS, PAGE = 1
CsmRegsFile : > CSM, PAGE = 1
XintfRegsFile : > XINTF, PAGE = 1
CpuTimer0RegsFile : > CPU_TIMER0, PAGE = 1
CpuTimer1RegsFile : > CPU_TIMER1, PAGE = 1
CpuTimer2RegsFile : > CPU_TIMER2, PAGE = 1
PieCtrlRegsFile : > PIE_CTRL, PAGE = 1
/*** Peripheral Frame 1 Register Structures ***/
SysCtrlRegsFile : > SYSTEM, PAGE = 1
SpiaRegsFile : > SPIA, PAGE = 1
SciaRegsFile : > SCIA, PAGE = 1
XIntruptRegsFile : > XINTRUPT, PAGE = 1
GpioMuxRegsFile : > GPIOMUX, PAGE = 1
GpioDataRegsFile : > GPIODAT PAGE = 1
AdcRegsFile : > ADC, PAGE = 1
EvaRegsFile : > EVA, PAGE = 1
EvbRegsFile : > EVB, PAGE = 1
ScibRegsFile : > SCIB, PAGE = 1
McbspaRegsFile : > MCBSPA, PAGE = 1
/*** Peripheral Frame 2 Register Structures ***/
ECanaRegsFile : > ECANA, PAGE = 1
ECanaLAMRegsFile : > ECANA_LAM PAGE = 1
ECanaMboxesFile : > ECANA_MBOX PAGE = 1
ECanaMOTSRegsFile : > ECANA_MOTS PAGE = 1
ECanaMOTORegsFile : > ECANA_MOTO PAGE = 1
/*** Code Security Module Register Structures ***/
CsmPwlFile : > CSM_PWL, PAGE = 1
codestart : > BEGIN, PAGE = 0
.text : > FLASHCD, PAGE = 0
.cinit : > FLASHCD, PAGE = 0
.pinit : > FLASHCD, PAGE = 0
.switch : > FLASHCD, PAGE = 0
.reset : > RESET, PAGE = 0,TYPE = DSECT
.stack : > RAMM1, PAGE = 1
.ebss : > RAML1, PAGE = 1
.bss : > RAML1, PAGE = 1
.econst : > FLASHEF, PAGE = 0
.esysmem : > RAML1, PAGE = 1
FLASH_SET_FUNCS : LOAD = FLASHCD, PAGE = 0
RUN = PRAMH0, PAGE = 0
RUN_START(_FLASH_SET_FUNCS_runstart),
LOAD_START(_FLASH_SET_FUNCS_loadstart),
LOAD_END(_FLASH_SET_FUNCS_loadend)
ramfuncs : LOAD = FLASHCD, PAGE = 0
RUN = PRAMH0, PAGE = 0
LOAD_START(_RamfuncsLoadStart),
LOAD_END(_RamfuncsLoadEnd),
RUN_START(_RamfuncsRunStart)
MONISECT0 : > EXTRAM1, PAGE = 1
MONISECT1 : > EXTRAM1, PAGE = 1
MONISECT2 : > EXTRAM1, PAGE = 1
MONISECT3 : > EXTRAM1, PAGE = 1
MONISECT4 : > EXTRAM1, PAGE = 1
MONISECT5 : > EXTRAM1, PAGE = 1
MONISECT6 : > EXTRAM1, PAGE = 1
MONISECT7 : > EXTRAM1, PAGE = 1
MONISECT8 : > EXTRAM1, PAGE = 1
MONISECT9 : > EXTRAM1, PAGE = 1
MONISECT10 : > EXTRAM1, PAGE = 1
MONISECT11 : > EXTRAM1, PAGE = 1
MONISECT12 : > EXTRAM1, PAGE = 1
MONISECT13 : > EXTRAM1, PAGE = 1
MONISECT14 : > EXTRAM1, PAGE = 1
MONISECT15 : > EXTRAM1, PAGE = 1
MONISECT16 : > EXTRAM1, PAGE = 1
MONISECT17 : > EXTRAM1, PAGE = 1
MONISECT18 : > EXTRAM1, PAGE = 1
MONISECT19 : > EXTRAM1, PAGE = 1
MONISECT20 : > EXTRAM1, PAGE = 1
MONISECT21 : > EXTRAM1, PAGE = 1
MONISECT22 : > EXTRAM1, PAGE = 1
MONISECT23 : > EXTRAM1, PAGE = 1
MONISECT24 : > EXTRAM1, PAGE = 1
MONISECT25 : > EXTRAM1, PAGE = 1
MONISECT26 : > EXTRAM1, PAGE = 1
MONISECT27 : > EXTRAM1, PAGE = 1
MONISECT28 : > EXTRAM1, PAGE = 1
MONISECT29 : > EXTRAM1, PAGE = 1
MONISECT30 : > EXTRAM1, PAGE = 1
MONISECT31 : > EXTRAM1, PAGE = 1
MONISECT32 : > EXTRAM1, PAGE = 1
MONISECT33 : > EXTRAM1, PAGE = 1
MONISECT34 : > EXTRAM1, PAGE = 1
MONISECT35 : > EXTRAM1, PAGE = 1
MONISECT36 : > EXTRAM1, PAGE = 1
MONISECT37 : > EXTRAM1, PAGE = 1
MONISECT38 : > EXTRAM1, PAGE = 1
MONISECT39 : > EXTRAM1, PAGE = 1
}
只是将INIT_FLASH(void)COPY 到PRAMH0中,INIT_FLASH程序如下:EALLOW;
FlashRegs.FPWR.bit.PWR=3; //Flash运行于活跃模式
FlashRegs.FSTATUS.bit.V3STAT=1; //清除报警
FlashRegs.FBANKWAIT.bit.RANDWAIT=5; //随机存取时间
FlashRegs.FBANKWAIT.bit.PAGEWAIT=5; //页面存取时间
//FlashRegs.FOTPWAIT.bit.OPTWAIT=5; //OTP读等待时间
FlashRegs.FOPT.bit.ENPIPE=1; //启动管线模式以提高性能
EDIS;
asm(" RPT #7 || NOP ");
当单步运行进入INIT_FLASH程序中的第二条或者第三条都可能跳入
interrupt void ILLEGAL_ISR(void) // Illegal operation TRAP
{
// Insert ISR Code here
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
asm(" ESTOP0");
for(;;);
}
这个非法的中断中。
但如果吧INIT_FLASH copy到RAMM0中就不会出现进入非法中断的情况。
谢谢!