|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
编写DSP程序时,由于代码较长,超过片内RAM空间,所以改为烧写flash* G, {$ S& {, T7 m- Q. u
开始烧写代码,运行程序,结果均正常;然后在此基础上添加一段代码(代码内容类似,没有错误),结果运行程序后,程序跳入非法中断 interrupt void ILLEGAL_ISR(void),不知为何。仅仅是添加一段代码,结果出现非法中断,百思不得其解,请高手指点一下。多谢多谢。
% E& |/ c- F: s7 n% c. N. b 程序中cmd文件如下:
4 L9 K+ E' X$ A' VMEMORY$ M1 E& f, I- o
{
! s$ q# ~" ?* T0 PPAGE 0: /* Program Memory */
6 p% t1 s: X4 x. g4 _ /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */5 E/ _' x) c: g' R- Z3 `
0 ]4 y5 a }/ y/ I: V9 v- K
ZONE0 : origin = 0x004000, length = 0x001000 /* XINTF zone 0 */
. n2 I# l! X8 p+ Q# S, x RAML0 : origin = 0x008000, length = 0x005000 /* on-chip RAM block L0 */# ^: T% F; M1 c) j
/*RAML1 : origin = 0x009000, length = 0x001000*/ /* on-chip RAM block L1 */
$ ^4 {+ n: W6 @& O, x8 ] /*RAML2 : origin = 0x00A000, length = 0x001000*/ /* on-chip RAM block L2 */
; k) W, C t% [- n$ b$ W/ s# b3 E8 n /*RAML3 : origin = 0x00B000, length = 0x001000*/ /* on-chip RAM block L3 */
( j7 t. X% ] v& p ZONE6 : origin = 0x0100000, length = 0x100000 /* XINTF zone 6 */
8 s; z: \$ H$ m& K. f$ _, E ZONE7A : origin = 0x0200000, length = 0x00FC00 /* XINTF zone 7 - program space */
2 i* x* B1 ~; O+ j! n# e FLASHH : origin = 0x300000, length = 0x008000 /* on-chip FLASH */: r. d& A$ P ?$ r/ f. g
/*FLASHG : origin = 0x308000, length = 0x008000*/ /* on-chip FLASH */* K- r V+ F6 m
/*FLASHF : origin = 0x310000, length = 0x008000*/ /* on-chip FLASH */3 C' [% n d1 ~+ c; s
/*FLASHE : origin = 0x318000, length = 0x008000*/ /* on-chip FLASH */- W, ?; q* z* ^/ Z9 K1 q' F$ v
/*FLASHD : origin = 0x320000, length = 0x008000*/ /* on-chip FLASH */3 p- D) Z5 T: z. z# B F# w+ b
/*FLASHC : origin = 0x328000, length = 0x008000*/ /* on-chip FLASH */
& K/ k% x( |( e: a& p FLASHA : origin = 0x308000, length = 0x012000 /* on-chip FLASH */
) U$ v( X5 Q* b% { CSM_RSVD : origin = 0x33fF80, length = 0x000076 /* Part of FLASHA. Program with all 0x0000 when CSM is in use. */
9 l6 A |* v' t6 n& ^ BEGIN : origin = 0x33FFF6, length = 0x000002 /* Part of FLASHA. Used for "boot to Flash" bootloader mode. */
- G0 ?! H" n, P( n CSM_PWL : origin = 0x33FFF8, length = 0x000008 /* Part of FLASHA. CSM password locations in FLASHA */! R4 |' x5 b$ _% L: S5 I& l
OTP : origin = 0x380400, length = 0x000400 /* on-chip OTP */
; O8 H1 }- c7 b# \) ] ADC_CAL : origin = 0x380080, length = 0x000009 /* ADC_cal function in Reserved memory */
6 H2 P- d; k, `3 H! n/ I ~$ e! o% |# V4 J6 [" g9 y( U
IQTABLES : origin = 0x3FE000, length = 0x000b50 /* IQ Math Tables in Boot ROM */& z7 {1 [! U" p1 V$ T7 L
IQTABLES2 : origin = 0x3FEB50, length = 0x00008c /* IQ Math Tables in Boot ROM */
, y* ^2 D6 G' D FPUTABLES : origin = 0x3FEBDC, length = 0x0006A0 /* FPU Tables in Boot ROM */- G; r+ i$ B! A# I5 H
ROM : origin = 0x3FF27C, length = 0x000D44 /* Boot ROM */ - G; o- j+ J! U- j( Q+ l2 ]
RESET : origin = 0x3FFFC0, length = 0x000002 /* part of boot ROM */
1 y/ X# P2 `& J: ~1 E1 w VECTORS : origin = 0x3FFFC2, length = 0x00003E /* part of boot ROM */+ R% l6 t$ |1 Z# D! F! w- ~' n
' \) I) P& D$ ` \
PAGE 1 : /* Data Memory */
0 C( Z# `9 w1 x: t7 O4 h( v /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE0 for program allocation */
3 u1 ]4 r; Q# F8 d /* Registers remain on PAGE1 */9 a, Q7 E; x7 v* m. x
8 s: p ~6 S- ^
BOOT_RSVD : origin = 0x000000, length = 0x000050 /* Part of M0, BOOT rom will use this for stack */
' M8 V! |% F; s RAMM0 : origin = 0x000050, length = 0x0003B0 /* on-chip RAM block M0 */
8 ?; ?0 Y& ~" X3 u0 n% J% V RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */3 K+ v f1 T/ O0 B" L0 u" L* q5 A
/*RAML4 : origin = 0x00C000, length = 0x001000*/ /* on-chip RAM block L1 */7 v# K% D) ~; h2 I& J0 e. Z
RAML5 : origin = 0x00D000, length = 0x001000 /* on-chip RAM block L1 */
" d V5 A9 n* s) o) ^ RAML6 : origin = 0x00E000, length = 0x001000 /* on-chip RAM block L1 */# {4 ^" r2 d* n* j
RAML7 : origin = 0x00F000, length = 0x001000 /* on-chip RAM block L1 */
* l1 h6 o$ z, E ZONE7B : origin = 0x20FC00, length = 0x000400 /* XINTF zone 7 - data space */$ M. e2 @' c ^. \7 U
ZONE7A : origin = 0x210000, length = 0x010000
, Q% G5 Z% t: A /*FLASHB : origin = 0x330000, length = 0x008000*/ /* on-chip FLASH */
! o4 v/ {! M/ e( h) z}/ O' {1 m. P$ }/ `+ l
) E2 X& z& } s% H$ b3 J/* Allocate sections to memory blocks.# p3 z. M" ]- m. E
Note:! \" N4 F1 R9 M( U1 c
codestart user defined section in DSP28_CodeStartBranch.asm used to redirect code u& T' v: g2 N+ j$ P2 @1 b
execution when booting to flash
9 f1 z- j7 t* |! \ ramfuncs user defined section to store functions that will be copied from Flash into RAM
5 a- n. F2 l9 k W' h*/- f5 N9 i" }9 o, i( }7 I
" I) [& Y# v3 N+ vSECTIONS% K7 C' Q! w' O U% T3 L; |6 U
{: d5 F& i% o, B M; }4 G* c8 O3 Q
/ N( Y+ _' v' Z, ?& J /* Allocate program areas: */
5 _* {1 S% y7 c3 i& ?4 b) { .cinit : > FLASHA PAGE = 0
# e, D# G* p6 t: |8 [8 V. O; h .pinit : > FLASHA, PAGE = 0+ a% w1 o+ n1 W2 y) D5 x- b2 M
.text : > FLASHA PAGE = 0
& u+ z% Y- O4 `+ _ F Z codestart : > BEGIN PAGE = 0& t1 Z N. J. u( V( f( W R
ramfuncs : LOAD = FLASHA,* @. r! R* t3 D! }1 J
RUN = RAML0,
6 s" Z/ `+ a' Q8 \3 M, C/ a, w" N LOAD_START(_RamfuncsLoadStart),
& d* ]8 |5 f; J LOAD_END(_RamfuncsLoadEnd), {( L% e7 ]! `; J2 w$ O8 Q0 m
RUN_START(_RamfuncsRunStart),
' U+ ~# h" J; q$ m: h PAGE = 02 p( g; G c6 N# o
6 L. \3 e! C& ^ g) Y
csmpasswds : > CSM_PWL PAGE = 05 A: s, k/ R7 r9 y
csm_rsvd : > CSM_RSVD PAGE = 0
& V6 |( Z8 w3 h5 I2 ^
/ Y$ `$ F( M- e! |! \! P /* Allocate uninitalized data sections: */
6 v* q7 ^ x6 x/ } .stack : > RAMM1 PAGE = 1
5 Y/ C$ |$ A6 W& l& ^6 l .ebss : > RAML5 PAGE = 1
- ^2 q, f4 @$ H6 G/ F .esysmem : > RAMM1 PAGE = 1
# O: z& F2 F K2 P3 l' G$ ^8 u6 Y3 D/ o3 `& V: B
/* Initalized sections go in Flash */1 l* q" \* ^ O$ [# B
/* For SDFlash to program these, they must be allocated to page 0 */
0 O4 l+ f! v) }1 q" y .econst : > FLASHA PAGE = 0
: U$ Y1 l, u, B3 l( \ .switch : > FLASHA PAGE = 0 & ^" E |' P# C: m |2 }4 m
1 }: \2 a0 Y0 G% J( w /* Allocate IQ math areas: */& `0 Z* D' S- @& V
IQmath : > FLASHA PAGE = 0 /* Math Code */
! i6 C; ~ J+ A+ b& Z, \! H IQmathTables : > IQTABLES, PAGE = 0, TYPE = NOLOAD8 |: q; D! @- E
IQmathTables2 : > IQTABLES2, PAGE = 0, TYPE = NOLOAD
7 S, s \% U1 Z1 c0 l FPUmathTables : > FPUTABLES, PAGE = 0, TYPE = NOLOAD
+ _* g: T7 D; n* t/ t. `* g' w9 t2 p0 A# _0 @8 k% h( U9 b: ^* e
/* Allocate DMA-accessible RAM sections: */ C: l9 Y/ o5 a4 G- [* v* Q2 S
DMARAML4 : > RAML5, PAGE = 14 U* A9 ~) Q4 o* V" W" j7 p
DMARAML5 : > RAML5, PAGE = 1
) K2 g$ `# D1 D$ a0 m DMARAML6 : > RAML6, PAGE = 1
- [ Z+ _9 n, ~% K DMARAML7 : > RAML7, PAGE = 18 P4 e# Z( C/ F
8 g. W2 Y5 k) M
/* Allocate 0x400 of XINTF Zone 7 to storing data */
5 e$ Y6 |5 u7 [, K data : > ZONE7A, PAGE = 1+ y% X: f4 K! s% }$ K, o- ~# {( z
ZONE7DATA : > ZONE7B, PAGE = 14 W4 K9 b( ~ Z: V1 p2 f
7 w% \4 @; y! A6 C' L
/* .reset is a standard section used by the compiler. It contains the */
$ j, w9 u/ n5 V/ ?! c5 }* Y /* the address of the start of _c_int00 for C Code. /*
/ u) g8 D/ s' u& l4 H( S /* When using the boot ROM this section and the CPU vector */% }8 N9 v0 f W* K5 _8 G. Z
/* table is not needed. Thus the default type is set here to */) O/ G+ p% A9 }9 C5 ?8 @
/* DSECT */
! ]2 m! j* ]( u) D .reset : > RESET, PAGE = 0, TYPE = DSECT
& @8 n8 B5 T& f4 {& V vectors : > VECTORS PAGE = 0, TYPE = DSECT7 K/ I5 y5 i. B
0 v" U) \- C' x0 H4 x' l2 m
/* Allocate ADC_cal function (pre-programmed by factory into TI reserved memory) */
7 ]& F1 b: o9 p5 S. [0 f .adc_cal : load = ADC_CAL, PAGE = 0, TYPE = NOLOAD. g* X$ [- X/ w" k4 h& R* j( W) `8 O) Y. Y
, H `* v q- B/ Y
}
2 ^- J8 _. g+ _2 n; ^ |
|