打印

DSP 烧写程序 进入非法中断

[复制链接]
5814|30
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Rollo|  楼主 | 2017-6-30 16:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
编写dsp程序时,由于代码较长,超过片内RAM空间,所以改为烧写flash
     开始烧写代码,运行程序,结果均正常;然后在此基础上添加一段代码(代码内容类似,没有错误),结果运行程序后,程序跳入非法中断 interrupt void ILLEGAL_ISR(void),不知为何。仅仅是添加一段代码,结果出现非法中断,百思不得其解,请高手指点一下。多谢多谢。
      程序中cmd文件如下:
MEMORY
{
PAGE 0:    /* Program Memory */
           /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */

   ZONE0       : origin = 0x004000, length = 0x001000     /* XINTF zone 0 */
   RAML0       : origin = 0x008000, length = 0x005000     /* on-chip RAM block L0 */
   /*RAML1       : origin = 0x009000, length = 0x001000*/     /* on-chip RAM block L1 */
   /*RAML2       : origin = 0x00A000, length = 0x001000*/     /* on-chip RAM block L2 */
   /*RAML3       : origin = 0x00B000, length = 0x001000*/     /* on-chip RAM block L3 */
   ZONE6       : origin = 0x0100000, length = 0x100000    /* XINTF zone 6 */
   ZONE7A      : origin = 0x0200000, length = 0x00FC00    /* XINTF zone 7 - program space */
   FLASHH      : origin = 0x300000, length = 0x008000     /* on-chip FLASH */
   /*FLASHG      : origin = 0x308000, length = 0x008000*/     /* on-chip FLASH */
   /*FLASHF      : origin = 0x310000, length = 0x008000*/     /* on-chip FLASH */
   /*FLASHE      : origin = 0x318000, length = 0x008000*/     /* on-chip FLASH */
   /*FLASHD      : origin = 0x320000, length = 0x008000*/     /* on-chip FLASH */
   /*FLASHC      : origin = 0x328000, length = 0x008000*/     /* on-chip FLASH */
   FLASHA      : origin = 0x308000, length = 0x012000     /* on-chip FLASH */
   CSM_RSVD    : origin = 0x33FF80, length = 0x000076     /* Part of FLASHA.  Program with all 0x0000 when CSM is in use. */
   BEGIN       : origin = 0x33FFF6, length = 0x000002     /* Part of FLASHA.  Used for "boot to Flash" bootloader mode. */
   CSM_PWL     : origin = 0x33FFF8, length = 0x000008     /* Part of FLASHA.  CSM password locations in FLASHA */
   OTP         : origin = 0x380400, length = 0x000400     /* on-chip OTP */
   ADC_CAL     : origin = 0x380080, length = 0x000009     /* ADC_cal function in Reserved memory */

   IQTABLES    : origin = 0x3FE000, length = 0x000b50     /* IQ Math Tables in Boot ROM */
   IQTABLES2   : origin = 0x3FEB50, length = 0x00008c     /* IQ Math Tables in Boot ROM */  
   FPUTABLES   : origin = 0x3FEBDC, length = 0x0006A0     /* FPU Tables in Boot ROM */
   ROM         : 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 :   /* Data Memory */
           /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE0 for program allocation */
           /* Registers remain on PAGE1                                                  */

   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 */
   /*RAML4       : origin = 0x00C000, length = 0x001000*/     /* on-chip RAM block L1 */
   RAML5       : origin = 0x00D000, length = 0x001000     /* on-chip RAM block L1 */
   RAML6       : origin = 0x00E000, length = 0x001000     /* on-chip RAM block L1 */
   RAML7       : origin = 0x00F000, length = 0x001000     /* on-chip RAM block L1 */
   ZONE7B      : origin = 0x20FC00, length = 0x000400     /* XINTF zone 7 - data space */
   ZONE7A      : origin = 0x210000, length = 0x010000
   /*FLASHB      : origin = 0x330000, length = 0x008000*/     /* on-chip FLASH */
}

/* Allocate sections to memory blocks.
   Note:
         codestart user defined section in DSP28_CodeStartBranch.asm used to redirect code
                   execution when booting to flash
         ramfuncs  user defined section to store functions that will be copied from Flash into 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 = RAML0,
                         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              : > RAMM1       PAGE = 1
   .ebss               : > RAML5       PAGE = 1
   .esysmem            : > RAMM1       PAGE = 1

   /* Initalized sections go in Flash */
   /* For SDFlash to program these, they must be allocated to page 0 */
   .econst             : > FLASHA      PAGE = 0
   .switch             : > FLASHA      PAGE = 0      

   /* Allocate IQ math areas: */
   IQmath              : > FLASHA      PAGE = 0                  /* Math Code */
   IQmathTables     : > IQTABLES,  PAGE = 0, TYPE = NOLOAD
   IQmathTables2    : > IQTABLES2, PAGE = 0, TYPE = NOLOAD
   FPUmathTables    : > FPUTABLES, PAGE = 0, TYPE = NOLOAD

   /* Allocate DMA-accessible RAM sections: */
   DMARAML4         : > RAML5,     PAGE = 1
   DMARAML5         : > RAML5,     PAGE = 1
   DMARAML6         : > RAML6,     PAGE = 1
   DMARAML7         : > RAML7,     PAGE = 1

   /* Allocate 0x400 of XINTF Zone 7 to storing data */
   data                                : > ZONE7A,    PAGE = 1
   ZONE7DATA        : > ZONE7B,    PAGE = 1

   /* .reset is a standard section used by the compiler.  It contains the */
   /* the address of the start of _c_int00 for C Code.   /*
   /* When using the boot ROM this section and the CPU vector */
   /* table is not needed.  Thus the default type is set here to  */
   /* DSECT  */
   .reset              : > RESET,      PAGE = 0, TYPE = DSECT
   vectors             : > VECTORS     PAGE = 0, TYPE = DSECT

   /* Allocate ADC_cal function (pre-programmed by factory into TI reserved memory) */
   .adc_cal     : load = ADC_CAL,   PAGE = 0, TYPE = NOLOAD

}

相关帖子

沙发
Rangar| | 2017-6-30 16:30 | 只看该作者
检查一下,新添加的代码是否在某个中断内不?原因是因为中断没有执行完,异常结束了。

使用特权

评论回复
板凳
Stannis| | 2017-6-30 16:51 | 只看该作者
看是不是cmd文件的问题。

使用特权

评论回复
地板
Brand2| | 2017-6-30 17:04 | 只看该作者
非法中断引起原因可能有哪些?

使用特权

评论回复
5
Soraka| | 2017-6-30 17:13 | 只看该作者
可以把你添加的代码和被添加的部分,粘出来,大家帮忙找错

使用特权

评论回复
6
Garen2| | 2017-6-30 17:23 | 只看该作者
之前也遇到相同问题,芯片是28035,也是加了一小段程序就进入非法中断,无法解决

使用特权

评论回复
7
kkzz| | 2017-7-1 22:02 | 只看该作者
烧写入Flash还不能正常运行的。

使用特权

评论回复
8
pixhw| | 2017-7-1 22:02 | 只看该作者
cmd分配正确吗

使用特权

评论回复
9
usysm| | 2017-7-1 22:03 | 只看该作者
程序运行的时候死机了。

使用特权

评论回复
10
typeof| | 2017-7-1 22:03 | 只看该作者
cmd文件有问题吗?

使用特权

评论回复
11
updownq| | 2017-7-1 22:03 | 只看该作者
程序编译之后有报错吗?

使用特权

评论回复
12
i1mcu| | 2017-7-1 22:04 | 只看该作者
程序跑飞 了吧。

使用特权

评论回复
13
mmbs| | 2017-7-1 22:04 | 只看该作者
DSP烧写的时候有错误吗

使用特权

评论回复
14
lzbf| | 2017-7-1 22:05 | 只看该作者
,超过片内RAM空间也不能正常运行。

使用特权

评论回复
15
lzbf| | 2017-7-1 22:05 | 只看该作者
程序就是先从Flash读取到ram里面的。

使用特权

评论回复
16
10299823| | 2017-7-1 22:05 | 只看该作者
看看楼主的代码,工程文件上传一下。

使用特权

评论回复
17
kkzz| | 2017-7-1 22:06 | 只看该作者
这个代码需要简化的。

使用特权

评论回复
18
pixhw| | 2017-7-1 22:06 | 只看该作者
interrupt void ILLEGAL_ISR(void)是怎么进入的?

使用特权

评论回复
19
usysm| | 2017-7-1 22:06 | 只看该作者
检查硬件代码是不是有问题

使用特权

评论回复
20
typeof| | 2017-7-1 22:06 | 只看该作者
这个烧写都是外部运行的问题。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

115

主题

730

帖子

1

粉丝