|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
编写DSP程序时,由于代码较长,超过片内RAM空间,所以改为烧写flash/ {+ N) b* n5 w! O
开始烧写代码,运行程序,结果均正常;然后在此基础上添加一段代码(代码内容类似,没有错误),结果运行程序后,程序跳入非法中断 interrupt void ILLEGAL_ISR(void),不知为何。仅仅是添加一段代码,结果出现非法中断,百思不得其解,请高手指点一下。多谢多谢。
* Q, K5 ?$ N: E, Q& Y p+ [) f5 T 程序中cmd文件如下:* A' m b* d2 I/ ~* o, G5 x5 w2 |
MEMORY
, ^+ y' I! i" s7 G: i{
0 D- Q% n. O# r! |$ fPAGE 0: /* Program Memory */
4 l8 P# A( q6 V# p/ w1 j( X R /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */1 m4 d* O0 g( l3 h$ p, r' Z) ?, r
0 j, B9 ?- |+ [+ e6 M$ t$ }
ZONE0 : origin = 0x004000, length = 0x001000 /* XINTF zone 0 */
/ Y' L* N' G: X RAML0 : origin = 0x008000, length = 0x005000 /* on-chip RAM block L0 */0 P6 L+ x$ Z b* U7 \6 e8 K9 ]$ ^- q
/*RAML1 : origin = 0x009000, length = 0x001000*/ /* on-chip RAM block L1 */9 r; L7 v' I# C/ t
/*RAML2 : origin = 0x00A000, length = 0x001000*/ /* on-chip RAM block L2 *// i: G& E2 g8 Y: `
/*RAML3 : origin = 0x00B000, length = 0x001000*/ /* on-chip RAM block L3 */
2 Y. c( g" B, H ZONE6 : origin = 0x0100000, length = 0x100000 /* XINTF zone 6 */
; E+ Y$ n2 G6 q+ S3 q ZONE7A : origin = 0x0200000, length = 0x00FC00 /* XINTF zone 7 - program space */
& j7 v1 F4 ?( w+ g# S; T FLASHH : origin = 0x300000, length = 0x008000 /* on-chip FLASH */- ^% m& p; v% z! s) U/ S9 s, U
/*FLASHG : origin = 0x308000, length = 0x008000*/ /* on-chip FLASH */
+ o5 Y8 ]2 b8 I& _, y3 X8 N8 l /*FLASHF : origin = 0x310000, length = 0x008000*/ /* on-chip FLASH */3 H7 ?9 S, P& o& j) R- o t
/*FLASHE : origin = 0x318000, length = 0x008000*/ /* on-chip FLASH */
% _' t" F4 j% e7 o; L /*FLASHD : origin = 0x320000, length = 0x008000*/ /* on-chip FLASH */
3 ?* B0 E8 F; l /*FLASHC : origin = 0x328000, length = 0x008000*/ /* on-chip FLASH */
$ `% ~2 B3 a2 }* ?) ~( S FLASHA : origin = 0x308000, length = 0x012000 /* on-chip FLASH */7 ]5 E" O: A% _1 G
CSM_RSVD : origin = 0x33fF80, length = 0x000076 /* Part of FLASHA. Program with all 0x0000 when CSM is in use. */
, e S# F; S) }3 d! C BEGIN : origin = 0x33FFF6, length = 0x000002 /* Part of FLASHA. Used for "boot to Flash" bootloader mode. */
# X) L9 U" p/ |* z" }+ v CSM_PWL : origin = 0x33FFF8, length = 0x000008 /* Part of FLASHA. CSM password locations in FLASHA */4 `% s/ S" B5 O5 T; p* T
OTP : origin = 0x380400, length = 0x000400 /* on-chip OTP */4 Z& x$ [) `) c4 _$ O6 T
ADC_CAL : origin = 0x380080, length = 0x000009 /* ADC_cal function in Reserved memory */
) f6 e( I2 T) k. ?& Z% b( Y3 p. M- i( U
IQTABLES : origin = 0x3FE000, length = 0x000b50 /* IQ Math Tables in Boot ROM */
8 \1 V' q0 y `8 M% d: t% j IQTABLES2 : origin = 0x3FEB50, length = 0x00008c /* IQ Math Tables in Boot ROM */ 6 g2 `! w% F) h# B* Q' D
FPUTABLES : origin = 0x3FEBDC, length = 0x0006A0 /* FPU Tables in Boot ROM */
8 G/ S+ n* g0 C ROM : origin = 0x3FF27C, length = 0x000D44 /* Boot ROM */
; f0 u( m j J& R# |5 o RESET : origin = 0x3FFFC0, length = 0x000002 /* part of boot ROM */
# _% C, S" _0 e8 N. n7 W+ D3 d VECTORS : origin = 0x3FFFC2, length = 0x00003E /* part of boot ROM */% L+ q3 o7 K7 N3 S/ @
& |" J, s5 ?0 E, N% s, sPAGE 1 : /* Data Memory */
^. [$ ^% h% G$ D5 { /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE0 for program allocation */
4 m' O# H# E6 v1 N& b /* Registers remain on PAGE1 */
% k! `. x4 K4 u0 O, C
% H8 p* N* X5 R BOOT_RSVD : origin = 0x000000, length = 0x000050 /* Part of M0, BOOT rom will use this for stack */
! f- r5 _% X( R2 O RAMM0 : origin = 0x000050, length = 0x0003B0 /* on-chip RAM block M0 */) S: b ?7 Z5 y& b
RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */
9 _4 H, u9 L( | o /*RAML4 : origin = 0x00C000, length = 0x001000*/ /* on-chip RAM block L1 */
5 }) t C' I; i1 i RAML5 : origin = 0x00D000, length = 0x001000 /* on-chip RAM block L1 */+ s* h/ y1 Z l1 h# t6 {
RAML6 : origin = 0x00E000, length = 0x001000 /* on-chip RAM block L1 */, u7 Z, ]# U* ]$ t& O
RAML7 : origin = 0x00F000, length = 0x001000 /* on-chip RAM block L1 */+ V! f$ I4 A" _2 k/ L5 [6 @
ZONE7B : origin = 0x20FC00, length = 0x000400 /* XINTF zone 7 - data space */! F \6 ]- h" `
ZONE7A : origin = 0x210000, length = 0x010000
& A3 Y/ w9 A. R* c2 p /*FLASHB : origin = 0x330000, length = 0x008000*/ /* on-chip FLASH */4 j0 `$ Q* ^; T1 |6 S5 E- e% ?1 k; C+ |
}
9 ~* B" _3 [5 q' e0 c
' F1 N" S/ ?* X. e; R/* Allocate sections to memory blocks.
8 U7 U7 M" |7 }5 z# u! A Note:/ p# j' t. G& y) a) {1 X
codestart user defined section in DSP28_CodeStartBranch.asm used to redirect code
6 t2 ]0 x. C1 m. ^$ ^2 K4 p execution when booting to flash; b6 V( l* o: \7 Z) K
ramfuncs user defined section to store functions that will be copied from Flash into RAM
4 F, Y5 C: P8 L/ n1 Y4 ~0 o*/
* \! v( B. z0 {1 X" Q% w/ ~$ I7 D4 X8 ^ G# o7 F
SECTIONS$ h5 A/ t" |( n/ m5 e- T/ U; u
{
! {+ T. `/ X/ e0 S- c. G w8 E, }3 m, b- E/ u
/* Allocate program areas: */, N: w* u( H5 M+ t+ \
.cinit : > FLASHA PAGE = 0
! V: z0 F: j+ m7 r1 G- m .pinit : > FLASHA, PAGE = 0
, W1 z, z1 d- p8 z .text : > FLASHA PAGE = 0' m4 [$ M; f& H; G4 n
codestart : > BEGIN PAGE = 0
1 X6 n* L& Z& u ramfuncs : LOAD = FLASHA,+ |9 X% ~0 R# m- r' K* }
RUN = RAML0,7 r" K- S6 u- L6 f2 `
LOAD_START(_RamfuncsLoadStart),2 I0 h5 z# k; r2 o+ Y+ x
LOAD_END(_RamfuncsLoadEnd),
5 p5 U% _4 `7 m* q RUN_START(_RamfuncsRunStart),* T2 T$ }' x# L5 X# W4 z' ^) [9 G
PAGE = 0
- e& J* r' o, r0 \, P9 M# c) Q; `
+ b3 q' u6 U& a, y$ g csmpasswds : > CSM_PWL PAGE = 0, ]5 e* R/ @/ r+ \
csm_rsvd : > CSM_RSVD PAGE = 07 }. M$ W1 D* J- p2 u
1 v6 g Y: a( q6 }, P$ O, p /* Allocate uninitalized data sections: */( v `! B( \6 y' g" q) D3 X
.stack : > RAMM1 PAGE = 1
+ M5 j6 A9 T/ m! _2 F .ebss : > RAML5 PAGE = 1
& [8 ]+ u% m# y. g$ t& N .esysmem : > RAMM1 PAGE = 1: `6 L! k3 X5 W6 x4 W
+ Y8 D; O/ Q) i- @' L6 Q* M4 V1 {6 [+ ?
/* Initalized sections go in Flash */
1 [9 u: X9 g- R5 x/ M /* For SDFlash to program these, they must be allocated to page 0 */
" G Y0 Z/ u4 }5 K* f# @ .econst : > FLASHA PAGE = 0
0 F& g6 O- t" g) B .switch : > FLASHA PAGE = 0 # D. Q4 V. S+ a! H8 I
+ j c- O% ~- }* y0 P& N /* Allocate IQ math areas: */
1 j6 H% k+ }, Q4 ?" r% k IQmath : > FLASHA PAGE = 0 /* Math Code */
% d# {) ~) }: @$ \4 H. p IQmathTables : > IQTABLES, PAGE = 0, TYPE = NOLOAD
+ J! ^4 z9 ]- m/ F# q) E: Q1 R) ] IQmathTables2 : > IQTABLES2, PAGE = 0, TYPE = NOLOAD0 D- l6 t! z4 w
FPUmathTables : > FPUTABLES, PAGE = 0, TYPE = NOLOAD
- b/ {- z ]5 v
* m7 R# E* S' `/ a& S& v9 _+ N8 u /* Allocate DMA-accessible RAM sections: */
3 q; F5 ^3 T" j( Q$ h DMARAML4 : > RAML5, PAGE = 1, E" {: L: P+ [4 x
DMARAML5 : > RAML5, PAGE = 1
# B2 n& o6 J' E! C DMARAML6 : > RAML6, PAGE = 1) }% F1 x+ O( Y* b. b6 _ B& X7 n* H
DMARAML7 : > RAML7, PAGE = 10 X5 k: \* B7 H3 D
8 p1 b, a. v1 T( ~3 ? /* Allocate 0x400 of XINTF Zone 7 to storing data */
Z3 S+ x. e' d2 r( f j# | data : > ZONE7A, PAGE = 1
) A; {, q& H7 ^, y0 | ZONE7DATA : > ZONE7B, PAGE = 1
3 z9 }; k: i: J6 U! \/ x: S- Q' t' ^" a5 W
/* .reset is a standard section used by the compiler. It contains the */9 m7 J: }+ i& g& q+ F
/* the address of the start of _c_int00 for C Code. /* l0 Q$ i4 J7 F2 M e* A; Y
/* When using the boot ROM this section and the CPU vector */
7 C( r4 Y- R7 S* K$ @3 q/ | /* table is not needed. Thus the default type is set here to */% {* H( Q8 s# B
/* DSECT */, S `& g" d# ^4 f
.reset : > RESET, PAGE = 0, TYPE = DSECT" P7 }0 Y9 h$ |9 E5 ]9 [ S5 I
vectors : > VECTORS PAGE = 0, TYPE = DSECT- @2 Z" c( o9 B
3 P$ a. S- z5 x5 \2 { /* Allocate ADC_cal function (pre-programmed by factory into TI reserved memory) */
" `9 Y7 y! v6 r' `3 F .adc_cal : load = ADC_CAL, PAGE = 0, TYPE = NOLOAD: v/ P j7 [0 q2 \ C5 X# a
9 H( Z H# d1 F: z; S; B
}& M+ _/ d$ u: z- ?7 @" f! G
|
|