标题: DSP入门知识大全(转载) [打印本页] 作者: wu68aq 时间: 2017-1-10 14:53 标题: DSP入门知识大全(转载) Link的cmd文件的作用是什么? " X3 N% ^; d1 Y! y, ]/ C- m% Y( r/ l. Y" e8 [4 R5 j [
Link的cmd文件用于DSP数字信号处理代码的定位。由于DSP的编译器的编译结果是未定位的,DSP没有操作系统来定位执行代码,每个客户设计的DSP系统的配置也不尽相同,因此需要用户自己定义代码的安装位置。以C5000为例,基本格式为: * m2 ] i4 r8 ^, M-o sample.out ) H% {% W* @% ` t% W4 M -m sample.map : W' o, Q7 T* c& R6 M% i% D -stack 1008 q1 \# P) I1 n5 a" C) t0 {: q2 @
sample.obj meminit.obj, l% G5 H8 _* A. R2 E, Y
-l rts.lib 2 u; Z1 _' Z. ^2 D; h2 I MEMORY {* a1 M* t4 J* \: X
PAGE 0: VECT: origin = 0xff80, length 0x80- m5 M: \( F/ s; l |# C# L, P+ C
PAGE 0: PROG: origin = 0x2000, length 0x400 3 Z$ g4 i& y" _1 a0 q PAGE 1: DATA: origin = 0x800, length 0x400 , ~& t# C# f2 D* L4 o/ v } ; Z; X- e- c' Z4 `* G4 h SECTIONS {7 P3 V5 e5 E: X8 h+ S8 n8 ~8 A
.vectors : {} >ROG PAGE 0! I C0 g" E8 i1 r
.text : {} >ROG PAGE 0* A; l. s+ l; F5 k
.data : {} >ROG PAGE 0+ p; |4 I2 d2 l2 O
.cinit : {} >ROG PAGE 0 0 l/ y1 m4 W& Z1 y2 g( x .bss : {} >DATA PAGE 1 / M, R# N9 I0 B' T4 T) q9 T, N }3 s! t8 G& Y1 I3 S
3 ]* b6 j: c% d
如何将OUT文件转换为16进制的文件格式? $ y. l" Q! u* i ?5 j# ? 3 S! i _1 H" j1 ~7 v# P( lDSP 数字信号处理的开发软件集成了一个程序,可以从执行文件OUT转换到编程器可以接受的格式,使得编程器可以用次文件烧写EPROM或Flash。对于 C2000的程序为DSPHEX;对于C3x程序为HEX30;对于C54x程序为HEX500;对于C55x程序为HEX55;对于C6x程序为 Hex6x。以C32为例,基本格式为: I, p; X# C( Csample.out% p5 {; E: ?3 O2 i7 \" x$ j
-x ! f8 R2 n9 [9 z% E) L* s2 V -memwidth 81 |! b( O, A) z/ C8 I* |
-bootorg 900000h t9 f* t) q" f& h
-iostrb 0h " Z! ^: Z0 z- |- ]8 C -strb0 03f0000h7 b- W1 g/ i1 h1 J% I2 \
-strb1 01f0000h % Y: T6 k& L( {# J -o sample.hex9 Q# E3 Z: W9 ~( S( b) s
ROMS { & k( }( S6 z1 s9 W4 S' X EPROM: org = 0x900000,len=0x02000,romwidth=82 c( ~+ ?7 r1 K( \5 |3 a
}" [; ?% \' [3 i9 E* g" E
SECTIONS { 9 N8 V2 Q% j1 }/ Z .text: paddr=boot 7 X, k" g. ^/ N4 n) j: P .data: paddr=boot ) V, d+ n# m2 A. @( l) ~ } ) W0 }* o- D! }& h* D+ Z% v5 y% C! E% t# {0 I3 N1 K0 c( W7 l. J
DSP仿真器为什么必须连接目标系统(Target)?+ G9 I( S6 @" _
DSP 数字信号处理的仿真器同单片机的不同,仿真器中没有DSP,提供IEEE标准的JTAG口对DSP进行仿真调试,所以仿真器必须有仿真对象,及目标系统。目标系统就是你的产品,上面必须有DSP。仿真器提供JTAG同目标系统的DSP相接,通过DSP实现对整个目标系统的调试。 1 h* T, n) J" d) T3 Z 9 \$ ?, @, T* }, i) |; B1 E 仿真工作正常对于DSP的基本要求 0 H6 W5 Q5 d, X, C/ a1) DSP电源和地连接正确。 2)DSP时钟正确。 3)DSP的主要控制信号,如RS和HOLD信号接高电平。 4)C2000的watchdog关掉。 5)不可屏蔽中断NMI上拉高电平。 - M( a& k. I: @2 ?; x: E * V8 @/ B" i+ V: O: A# GCCS或Emurst运行时提示“Can't Initialize Target DSP” 5 @6 Q' o8 u' L" M- N# |; [1) 仿真器连接是否正常? 2)仿真器的I/O设置是否正确? 3)XDSPP仿真器的电源是否正确? 4)目标系统是否正确? 5)仿真器是否正常?6)DSP工作的基本条件是否具备。# O: g; o; V6 W* R/ J
建议使用目标板测试。: [5 k) }! H, |4 u! K; u
9 f# c3 b6 R. y8 }4 L- L
为什么CCS需要安装Driver?$ P& i+ V, q; {
CCS是开放的软件平台,它可以支持不同的硬件接口,因此不同的硬件接口必须通过标准的Driver同CCS连接。, d% h- O9 Y4 F. y
$ m, V. k3 s, _ 为什么在CCS下编译工具工作不正常? ' R% V! ~) c, i- X/ Y 在CCS 下有部分客户会碰到编译工具工作不正常,常见错误为: 1)autoexec.bat的路径“out of memory”。修改autoexec.bat,清除无用的PATH路径。 2)编译的输出文件(OUT文件)写保护,无法覆盖。删除或修改输出文件的属性。 3)Windows有问题。重新安装windows。 4)Windows下有程序对CCS有影响。建议用一“干净”的计算机。. D, |4 j8 P" i, W
# E8 b' H$ Y0 f1 N! v7 u7 { 在CCS下,如何选择有效的存储器空间? / P& ?3 [, S4 l9 U- |8 b2 r: H. GCCS 下的存储器空间最好设置同你的硬件,没有的存储器不要有效。这样便于调试,CCS会发现你调入程序时或程序运行时,是否访问了无效地址。 1)在GEL文件中设置。参见CCS中的示例。 2)在Option菜单下,选择Memory Map选项,根据你的硬件设置。注意一定要将Enable Memory Mapping置为使能。 6 d" c, U: D7 k, V& a: g: u4 y 2 u2 y& p! b* v9 C 在CCS下,OUT文件加载时提示“Data verification failed...”的原因? 2 ?5 _' `6 k4 F; SLink的CMD文件分配的地址同GEL或设置的有效地址空间不符。中断向量定位处或其它代码、数据段定位处,没有RAM,无法加载OUT文件。解决方法: 1)调整Link的CMD文件,使得定位段处有RAM。 2)调整存储器设置,使得RAM区有效。 ! V: h1 D# e& L' Q; _- k c$ x* r) g9 A, ^8 @
为什么要使用BIOS? $ t2 d8 T, @* c( t% n" {1) BIOS是Basic I/O System的简称,是基本的输入、输出管理。 2)用于管理任务的调度,程序实时分析,中断管理,跟踪管理和实时数据交换。 3)BIOS是基本的实时系统,使用BIOS可以方便地实现多任务、多进程的时间管理。 4)BIOS是eXpress DSP的标准平台,要使用eXpress DSP技术,必须使用BIOS。 j1 I' i/ p$ |8 H* `% {: j1 m/ V( s
- n1 W2 M0 J" ?3 C6 _/ k
DSP发展动态1 w- E' J: @7 ~+ y
1.TMS320C2000 TMS320C2000系列包括C24x和C28x系列。C24x系列建议使用LF24xx系列替代C24x系列,LF24xx系列的价格比C24x便宜,性能高于C24x,而且LF24xxA具有加密功能。 C28x系列主要用于大存储设备管理,高性能的控制场合。, l' J7 t/ _# Q4 i
2.TMS320C3x TMS320C3x系列包括C3x和VC33,主要推荐使用VC33。C3x系列是TI浮点DSP的基础,不可能停产,但价格不会进一步下调。5 |# d) i$ X* L( j9 D9 o) m
3.TMS320C5x TMS320C5x系列已不推荐使用,建议使用C24x或C5000系列替代。. ]' D# X; M% {# H! y- X) s
4.TMS320C5000 TMS320C5000系列包括C54x和C55x系列。其中VC54xx还不断有新的器件出现,如:TMS320VC5471(DSP+ARM7)。 C55x系列是TI的第三代DSP,功耗为VC54xx的1/6,性能为VC54xx的5倍,是一个正在发展的系列。 C5000系列是目前TI DSP的主流DSP,它涵盖了从低档到中高档的应用领域,目前也是用户最多的系列。, Z# \0 z, Q- U* f6 H
5.TMS320C6000 TMS320C6000系列包括C62xx、C67xx和C64xx。此系列是TI的高档DSP系列。其中C62xx系列是定点的DSP,系列芯片种类较丰富,是主要的应用系列。 C67xx系列是浮点的DSP,用于需要高速浮点处理的领域。 C64xx系列是新发展,性能是C62xx的10倍。8 t* }0 R6 V7 f! c' |
6.OMAP系列 是TI专门用于多媒体领域的芯片,它是C55+ARM9,性能卓越,非常适合于手持设备、Internet终端等多媒体应用。4 `& h- }, G2 P$ s o
: E3 C7 V6 k! Z5V/3.3V如何混接?" S2 G- D5 A; e$ ~
TI DSP的发展同集成电路的发展一样,新的DSP数字信号处理都是3.3V的,但目前还有许多外围电路是5V的,因此在DSP系统中,经常有5V和3.3V 的DSP混接问题。在这些系统中,应注意: 1)DSP输出给5V的电路(如D/A),无需加任何缓冲电路,可以直接连接。 2)DSP输入5V的信号(如A/D),由于输入信号的电压>4V,超过了DSP的电源电压,DSP的外部信号没有保护电路,需要加缓冲,如 74LVC245等,将5V信号变换成3.3V的信号。 3)仿真器的JTAG口的信号也必须为3.3V,否则有可能损坏DSP。作者: wu68aq 时间: 2017-1-10 14:53
为什么要片内RAM大的DSP效率高? % x. p' z. W) @) L 目前DSP发展的片内存储器RAM越来越大,要设计高效的DSP数字信号处理系统,就应该选择片内 RAM较大的DSP。片内RAM同片外存储器相比,有以下优点: 1)片内RAM的速度较快,可以保证DSP无等待运行。 2)对于C2000/C3x/C5000系列,部分片内存储器可以在一个指令周期内访问两次,使得指令可以更加高效。 3)片内RAM运行稳定,不受外部的干扰影响,也不会干扰外部。 4)DSP片内多总线,在访问片内RAM时,不会影响其它总线的访问,效率较高。( h" F. G+ R3 t @
& i. q- n, m @使用TI公司模拟器件与DSP结合使用的好处。7 X, z8 \6 _+ C9 ]2 k2 o# k Y
1) 在使用TI公司的DSP数字信号处理的同时,使用TI公司的模拟可以和DSP进行无缝连接。器件与器件之间不需要任何的连接或转接器件。这样即减少了板卡的尺寸,也降低了开发难度。) P. z8 d3 _+ k- X$ y8 c
2)同为TI公司的产品,很多器件可以固定搭配使用。少了器件选型的烦恼. e# {1 N6 E) A7 n. m
3)TI在CCS中提供插件,可以用于DSP和模拟器件的开发,非常方便。' K7 q, D( i, g( N& a
. Z1 G7 [" j5 I1 fC语言中可以嵌套汇编语言? % y, \3 h; D! Z( D+ k5 ?$ Z/ l 可以。在ANSI C标准中的标准用法就是用C语言编写主程序,用汇编语言编写子程序,中断服务程序,一些算法,然后用C语言调用这些汇编程序,这样效率会相对比较高8 i u1 m A5 B6 B$ ?* |
6 g* C3 l8 [; h8 C8 ` 在定点DSP系统中可否实现浮点运算2 ~) |: j$ ?8 g0 V" U5 S3 i
当然可以,因为DSP都可以用C,只要是可以使用c语言的场合都可以实现浮点运算。 $ ~6 g, m% {. P1 c+ t7 y, c7 A( R3 R* @* I( Z& U, A" u4 D( C/ i
JTAG头的使用会遇到哪些情况 6 I0 E& n- H/ Z% e9 A1) DSP的CLKOUT没有输出,工作不正常。1 k8 r$ E4 W& T( p) {! R0 Q2 G8 w
2)Emu0,Emu1需要上拉。 # }! c! ~, Q/ H: E( A3)TCK的频率应该为10M。 9 r: B. V, }2 p8 h V8 m1 p1 g4)在3.3V DSP中,PD脚为3.3V 供电,但是仿真器上需要5V电压供电,所以PP仿真器盒上需要单独供电。 & R1 G2 L# C2 s) U4)仿真多片DSP。在使用菊花链的时候,第一片DSP的TDO接到第二片DSP数字信号处理的TDI即可。注意当串联DSP比较多的时候,信号线要适当的增加驱动。7 B0 [2 d) W z, r4 K q+ b
& ^3 ^6 I# _" w7 \include头文件(.h)的主要作用* K2 S/ F2 s1 j. s
头文件,一般用于定义程序中的函数、参数、变量和一些宏单元,同库函数配合使用。因此,在使用库时,必须用相应的头文件说明。 $ ]' t1 h1 ^! H1 q# u$ h" O* c. Z& W8 ]4 g
DSP中断向量的位置! V- C! f. p. t: w/ B
1) 2000系列dsp的中断向量只能从0000H处开始。所以在我们调试程序的时候,要把DSP选择为MP(微处理器方式),把片内的Flash屏蔽掉,免去每次更改程序都要重新烧写Flash工作。. G: k# D2 H( }( P0 |* l( b2 r9 M* d
2)3x系列dsp的中断向量也只能在固定的地址。 F$ `% m& b+ f" \% a; U3)5000,6000系列dsp的中断向量可以重新定位。但是它只能被重新定位到Page0范围内的任何空间。0 O/ {$ h2 l8 ~
7 r9 p0 v( s) L6 E7 r
有源晶振与晶体的区别,应用范围及用法 % ?) b( h+ f* T# p1) 晶体需要用DSP片内的振荡器,在datasheet上有建议的连接方法。晶体没有电压的问题,可以适应于任何DSP,建议用晶体。 2)有源晶振不需要DSP的内部振荡器,信号比较稳定。有源晶振用法:一脚悬空,二脚接地,三脚接输出,四脚接电压。 p) t5 g1 |8 T! L* ?5 J. y
" S7 ]- p$ _& k' L/ |& ^ 程序经常跑飞的原因& Z1 \3 _# I _7 u
1) 程序没有结尾或不是循环的程序。 7 t$ a9 C4 o V8 d/ `2)nmi管脚没有上拉。6 _8 H) v( D2 x' L
3)在看门狗动作的时候程序会经常跑飞。$ G. o8 e% ]" e5 j2 B, S+ T/ |
4)程序编制不当也会引起程序跑飞。 / [) {) y6 U) G( t1 J& W5)硬件系统有问题。2 g, F) f! ^0 Q; {& v8 E3 H
" k6 p; D7 U/ `/ \8 @ 并行FLASH引导的一点经验-阿哲 : ]9 ~/ {8 j) ~4 U K' }/ B 最近BBS上关于FLASH和BOOT的讨论很活跃,我也多次来此请教。前几天自制的DSP板引导成功,早就打算写写这方面的东西。我用的 DSP是5416,以其为核心,做了一个相对独立的子系统(硬件、软件、算法),目前都已基本做好。下面把在FLASH引导方面做的工作向大家汇报一下,希望能对大家有所帮助。本人经验和文笔都有限,写的不好请大家谅解。 硬件环境:" ^$ A$ z) K+ I2 B: }5 k
DSP:TMS320VC5416PGE160 , P# w7 y# W7 _' r6 c1 V0 M! t FLASH:SST39VF400A-70-4C-EK 都是贴片的,FLASH映射在DSP数据空间的0x8000-0xFFFF2 k) w: l% t, Y' J; E% ?
软件环境: CCS v2.12.01 ; l1 y' B' y6 W4 ^" s主程序(要烧入FLASH的程序): DEBUG版,程序占用空间0x28000-0x2FFFF(片内SARAM),中断向量表在0x0080-0x00FF(片内DARAM),数据空间使用0x0100-0x7FFF(片内DARAM)。因为FLASH是贴片的,所以需要自己编一个数据搬移程序,把要主程序搬移到FLASH中。在写入 FLASH数据时,还应写入引导表的格式数据。最后在数据空间的0xFFFF处写入引导表的起始地址(这里为0x8000)。& \+ G I: E( x* S, U. S$ q5 V) H
搬移程序: DEBUG版,程序空间0x38000-0x3FFFF(片内SARAM),中断向量表在0x7800-0x78FF(片内DARAM),数据空间使用 0x5000-0x77FF(片内DARAM)。搬移程序不能使用与主程序的程序空间和中断向量表重合的物理空间,以免覆盖。烧写时,同时打开主程序和搬移程序的PROJECT,先LOAD主程序,再 LOAD搬移程序,然后执行搬移程序,烧写OK! 附:搬移程序(仅供参考)- ]; D8 ^" z2 A2 e8 J8 @8 W: |* s
volatile unsigned int *pTemp=(unsigned int *)0x7e00; unsigned int iFlashAddr;! W& \( z' |3 g: r: Z
int iLoop; /* 在引导表头存放并行引导关键字 */ % L2 I- H, Z3 W' EiFlashAddr=0x8000; ) m6 b$ O6 C+ k# T' F WriteFlash(iFlashAddr,0x10aa);6 v; T4 I# ]+ }, \; k6 C
iFlashAddr++; /* 初始化SWWSR值 */8 G/ Z W% C* X$ Q8 h, {# ?- Y9 `
WriteFlash(iFlashAddr,0x7e00); + a+ C9 p( ?6 ~' ]5 y; D4 u iFlashAddr++; /* 初始化BSCR值 */ 8 S4 ?) H2 `% W+ r! V4 O5 |0 j5 qWriteFlash(iFlashAddr,0x8006);, I& m4 D% u9 H0 c( l2 W
iFlashAddr++; /* 程序执行的入口地址 *// s- M% L' r3 J$ i8 f7 b1 _2 H. r* k4 z8 H
WriteFlash(iFlashAddr,0x0002); ' i* u% C i' u" [5 Z% ] iFlashAddr++;2 \/ M" U0 \7 m5 l8 ~* _- f O% W
WriteFlash(iFlashAddr,0x8085);6 v3 u; {2 }- o# m
iFlashAddr++; /* 程序长度 */, x/ o- T' K+ @8 b/ o/ Q
WriteFlash(iFlashAddr,0x7f00);. s8 W7 K" l3 i7 V# @
iFlashAddr++; /* 程序要装载到的地址 */ 4 F8 i4 }8 j; W9 f+ vWriteFlash(iFlashAddr,0x0002); 8 t* `, ]) h/ ?( O iFlashAddr++; 4 m) y# ^& t- G8 [0 h' ?/ D WriteFlash(iFlashAddr,0x8000);: s `+ G& H; K+ h( P" ? W7 a' s
iFlashAddr++;4 } p2 i0 G# P4 [0 c) N
for (iLoop=0;iLoop<0x7f00;iLoop++), H8 I& g" R5 z+ k$ h; M6 P# `5 P
{ /* 从程序空间读数据,放到暂存单元 */4 e; N3 p! t/ L3 b! |- C T5 H0 }
asm(" pshm al");! V) Z+ `1 i' R, |# [4 F$ ~8 @
asm(" pshm ah");9 V. z6 }/ V$ p3 a4 _
asm(" rsbx cpl"); ) ?) i9 a7 p9 O M- M asm(" ld #00fch,dp");; A: g. W; j3 u$ ?
asm(" stm #0000h, ah");& h' x. ]- b {2 `. }! p7 s# Y
asm(" MVDM _iLoop, al");9 Q5 N/ Z- U/ w2 D6 V
asm(" add #2800h,4,a");, `7 s* _' i2 c- ]/ }+ L, U
asm(" reada 0h");5 ~! Y- b9 Z4 y. r7 ~
asm(" popm ah");$ U, q, J; ^3 ^0 d5 d
asm(" popm al"); ' W/ T' S, H5 L3 a. v; Q asm(" ssbx cpl"); /* 把暂存单元内容写入FLASH */ 1 L( s& s- F }, y$ `0 }- W- ` WriteFlash(iFlashAddr,*pTemp); 3 n. i; z7 a) X) e/ D iFlashAddr++; } /* 中断向量表长度 */ ; l6 l7 A* d/ {5 sWriteFlash(iFlashAddr,0x0080); ) E+ p8 u. ]9 Y5 s, N$ A1 y iFlashAddr++; /* 中断向量表装载地址 */ - o" U2 f; d) YWriteFlash(iFlashAddr,0x0000); 4 c1 U8 j% G5 H) m+ p9 s iFlashAddr++; , X& z! m. t5 l3 R; h+ @ WriteFlash(iFlashAddr,0x0080); 0 R7 h, E3 | b+ l8 N9 O iFlashAddr++;" K e( o5 W5 d
for (iLoop=0;iLoop<0x0080;iLoop++) { /* 从程序空间读数据,放到暂存单元 */$ I* E m: V8 f" a" b& W$ _
asm(" pshm al"); 6 ~/ Y# q6 E, |* B: I' a6 x! X asm(" pshm ah"); $ ^( |3 C! C* e- ]- T asm(" rsbx cpl"); ( D" H. E0 V2 x7 f, b asm(" ld #00fch,dp"); ( {9 l |* v2 Q4 c p asm(" stm #0000h, ah"); 7 \4 b& f* x- t, z) b- f. ?- ^$ g asm(" MVDM _iLoop, al");6 o$ P' E( W, d( D- i8 U1 T
asm(" add #0080h,0,a");* ~2 S0 p1 J: S! M
asm(" reada 0h"); * n. D( V/ a7 S% Z. u% ?" X. p8 a( P asm(" popm ah");7 p% V1 }- v v
asm(" popm al");! x( m2 C* `4 d
asm(" ssbx cpl"); /* 把暂存单元内容写入FLASH */$ V8 ]3 c+ P0 c" T+ r
WriteFlash(iFlashAddr,*pTemp);6 V+ Y% \! z: @2 ]: Z
iFlashAddr++; * v# @6 a. f2 c8 J0 @3 K } /* 写入引导表结束标志 */ 2 ]0 C9 Q b* r( o6 W1 @( m GWriteFlash(iFlashAddr,0x0000); 4 c. L6 A; E2 W% T9 B- f iFlashAddr++; ! d* t; Z3 G8 _9 k. x! | WriteFlash(iFlashAddr,0x0000); /* 在数据空间的0xFFFF写入引导表起始地址 */ ; l3 a2 h9 |$ F$ Z. U7 n5 `: `iFlashAddr=0xffff; 7 w, ^* }$ g* b5 a/ g2 K+ r5 { WriteFlash(iFlashAddr,0x8000);作者: wu68aq 时间: 2017-1-10 14:54
关于LF2407A的FLASH烧写问题的几点说明 , a& i/ j. G& {* C bTI现在关于LF24x写入FLASH的工具最新为 c2000flashprogsw_v112。可以支持LF2407、LF2407a、 LF2401及相关的LF240x系列。建议使用此版本。在http: //focus.ti.com/docs/tool/toolfolder.jhtml?PartNumber=C24XSOFTWARE上可以下载到这个工具。我们仿真器自带的光盘中也有此烧写程序。 在使用这个工具时注意: : _# x8 w. L( b 一,先解压,再执行setup.exe。8 C# F$ O/ P4 \9 [, U
二、进入cc中,在tools图标下有烧写工具;3 [+ y! p6 R! m, X9 B) J
1、关于FLASH时钟的选择,此烧写工具默认最高频率进行FLASH的操作。根据目标系统的工作主频重新要进行PLL设置。方法:先在advance options下面的View Config file中修改倍频。存盘后,在相应的目录下(tic2xx\algos\相应目录)运行buildall.bat就可以完成修改了。再进行相应的操作即可。 5 \5 t8 E# B/ e/ Q6 s+ `2、若是你所选的频率不是最高频率,还需要设定你自已的timings.xx来代替系统默认的最高频率的timings.xx。例如 LF2407a的默认文件是timings.40。Timings.xx可以利用include\timings.xls的excel工作表来生成。然后在advance options下面的View Config file中修改相应的位置。存盘后,在相应的目录下运行buildall.bat就可以完成修改了。 * F- }, S7 E( o; z- b4 X4 e7 Q4 Y3、对于TMS320LF240XA系列,还要注意:由于这些DSP的FLASH具有加密功能,加密地址为程序空间的0x40-0X43H,程序禁止写入此空间,如果写了,此空间的数据被认为是加密位,断电后进入保护FLASH状态,使FLASH不可重新操作,从而使DSP报废,烧写完毕后一定要进行Program passwords的操作,如果不做加密操作就默认最后一次写入加密位的数据作为密码。 8 v+ v N% y6 m: B+ n4、2407A不能用DOS下的烧写软件烧写,必须用c2000flashprogsw_v112软件烧写; ; M0 k) v) _7 h+ M. U9 [+ @5、建议如下:* U5 b+ n) @/ o
1)、一般调试时,在RAM中进行; p, j- A; h) w7 c) a2)、程序烧写时,避开程序空间0x40-0x43H加密区,程序最好小于32k; * B# `3 j* {2 `7 z2 O P3)、每次程序烧写完后,将word0,word1,word2,word3分别输入自己的密码,再点击 Program password,如果加密成功,提示Program is arrayed,如果0x40-0x43h中写入的是ffff,认为处于调试状态,flash不会加密;* p6 \: o/ T0 X& |1 d
4)、断电后,下次重新烧写时需要往word0~word3输入已设的密码,再unlock,成功后可以重新烧写了; * b4 m0 M+ h, ?, j6、VCPP管脚接在+5V上,是应直接接的,中间不要加电阻。" s) ~1 \' \# ]
7、具体事宜请阅读相应目录下的readme1,readme2帮助文件。* z! x, Q9 ^) e* s. |
8.注意*.cmd文件的编写时应该避开40-43H单元,好多客户由于没有注意到这里而把FALSH加密。 s0 R% U+ N4 O) y# A5 |1 c& J0 d; G2 f2 x7 {' I* x9 d
如何设置硬件断点? ( l) |- y; B5 I& e 在profiler ->profile point -> break point# j* h* [% Q% f7 ^( M, Z$ ~
7 f: ^4 L u! \7 X9 d/ ]- j c54x的外部中断是电平响应还是沿响应? # n$ t0 ?4 V+ ~' A% s 是沿响应,准确的说,它要检测到100(一个clk的高和两个clk的低)的变化才可以。$ d, T4 w: c, Z) I
8 x( t$ V- q% i3 Q6 Q' W( e
参考程序,里面好象都要 dISAble wachdog,不知道为什么? , ~2 h7 J0 p/ C6 l* T; R$ Mwatchdog是一个计数器,溢出时会复位你的DSP,不dISAble的话,你的系统会动不动就reset。 ! s. H: i9 c" X ' W* q6 u; L J3 l0 C! Z; O. @& u 时钟电路选择原则1 r; J+ w& J/ h) I8 t
1,系统中要求多个不同频率的时钟信号时,首选可编程时钟芯片; 7 z9 i4 s6 q) {0 }" Y3 w2,单一时钟信号时,选择晶体时钟电路;& Z3 d6 Z) t" ^9 E! _
3,多个同频时钟信号时,选择晶振; / l3 D$ @, M! E1 \4,尽量使用DSP片内的PLL,降低片外时钟频率,提高系统的稳定性;4 F* N6 \/ U/ v. a9 q
5,C6000、C5510、C5409A、C5416、C5420、C5421和C5441等DSP片内无振荡电路,不能用晶体时钟电路; ; F2 x) m) |4 y, o; ]. i$ C$ f0 t2 j6,VC5401、VC5402、VC5409和F281x等DSP时钟信号的电平为1.8V,建议采用晶体时钟电路 8 _4 e. m$ N& p% J- N& O1 d6 K% y6 N: g3 ~7 U
C程序的代码和数据如何定位 % X1 z6 W1 k6 U5 Y7 u/ N1,系统定义:/ ? Z8 B) O+ N" e$ t
.cinit 存放C程序中的变量初值和常量; ( w6 p h# R' X6 Q$ _# |7 V .const 存放C程序中的字符常量、浮点常量和用const声明的常量; 8 ]$ C+ C3 D. p( U/ K .switch 存放C程序中switch语句的跳针表;" B1 T* X% }2 _" m
.text 存放C程序的代码; 6 ^: J( G* i" \" B' ` .bss 为C程序中的全局和静态变量保留存储空间; 3 v9 q( x* j5 R+ ^ X, w. q .far 为C程序中用far声明的全局和静态变量保留空间;% { h( f" p V7 O. Q+ `0 p
.stack 为C程序系统堆栈保留存储空间,用于保存返回地址、函数间的参数传递、存储局部变量和保存中间结果; 2 q+ {4 i3 U# U8 F .sysmem 用于C程序中malloc、calloc和realloc函数动态分配存储空间! _5 ?: k; g2 Y' P- I! V
2,用户定义:/ o+ B1 D& l: S2 H! }9 R: ~1 b
#pragma CODE_SECTION (symbol, "section name"); ( F1 P* }2 C0 ]! K; R #pragma DATA_SECTION (symbol, "section name") ; k+ q7 z0 V1 d5 i4 p# l+ P# m" I( W 8 u5 @+ ^; v( c cmd文件" O& O2 i* P2 ^, q+ O; P) z
由3部分组成: $ N! p6 q: c8 Z% @* [1)输入/输出定义:.obj文件:链接器要链接的目标文件;.lib文件:链接器要链接的库文件;.map文件:链接器生成的交叉索引文件;.out文件:链接器生成的可执行代码;链接器选项3 ]- _7 m, m Q& x
2)MEMORY命令:描述系统实际的硬件资源 5 e* ]8 W& B% _' r( ^6 ~3)SECTIONS命令:描述“段”如何定位 % F( S7 q2 p# `! ]# [ x4 \6 l; |( [* u4 z, Z; C$ w& `
为什么要设计CSL?% u+ T2 \7 V; t& N8 r
1,DSP片上外设种类及其应用日趋复杂 ( q _7 G* `1 R* W f2,提供一组标准的方法用于访问和控制片上外设 9 J# ^- `6 {& J3 e3 H$ v# _3,免除用户编写配置和控制片上外设所必需的定义和代码% U) O2 t+ i1 Q3 S! b. Y% E
3 b' I5 o9 P( Y' d. v5 o" c 什么是CSL? 6 m6 l' m7 ]; u3 L6 q 1,用于配置、控制和管理DSP数字信号处理片上外设 8 s/ n; d F/ n* f, }2,已为C6000和C5000系列DSP设计了各自的CSL库$ [& C* k q4 H C8 d4 g$ ` p7 H
3,CSL库函数大多数是用C语言编写的,并已对代码的大小和速度进行了优化 * T+ f3 }* Y3 {* ]9 m- H4 {: F4,CSL库是可裁剪的:即只有被使用的CSL模块才会包含进应用程序中 R V/ c l' }$ f/ D* O! L, H, l
5,CSL库是可扩展的:每个片上外设的API相互独立,增加新的API,对其他片上外设没有影响 # u7 t e& f9 M# x8 K/ y8 k4 Y- i, s: }5 r5 s. A5 \
CSL的特点 " \3 W3 w) Q7 `& R8 L b4 w1,片上外设编程的标准协议:定义一组标准的APIs:函数、数据类型、宏; 7 Z& \8 P- L' {9 Z2 Q* j2,对硬件进行抽象,提取符号化的片上外设描述:定义一组宏,用于访问和建立寄存器及其域值6 H6 B8 X/ v5 C0 ^
3,基本的资源管理:对多资源的片上外设进行管理;" [/ b3 \ D e3 M0 h: c
4,已集成到DSP/BIOS中:通过图形用户接口GUI对CSL进行配置; . O! N3 S3 }0 h0 \2 y% s+ a5,使片上外设容易使用:缩短开发时间,增加可移植.3 T8 w8 X4 J) h. j* p' L& }! V9 @. ^/ j
1 [- H9 l, I H" _& b为什么需要电平变换?* v$ E. P0 l2 F+ o1 A0 Q6 g
1) DSP系统中难免存在5V/3.3V混合供电现象;( p) _" z2 z1 t
2)I/O为3.3V供电的DSP,其输入信号电平不允许超过电源电压3.3V;& `8 ^3 d" E9 O; I- K) s- T
3)5V器件输出信号高电平可达4.4V; - P( F$ e! [9 }5 z. m 4)长时间超常工作会损坏DSP器件;) P. n' G6 P+ T4 H& y3 ^
5)输出信号电平一般无需变换 2 N+ [% R, ?# G5 N# q, t( H3 i3 U& e7 D! A
电平变换的方法; T' w, F, z6 D' C
1,总线收发器(Bus Transceiver): / N& n% }3 F: s 常用器件: SN74LVTH245A(8位)、SN74LVTH16245A(16位) : a: p3 K8 t d# P J! N/ g1 _: l/ b 特点:3.3V供电,需进行方向控制,' O7 x2 {# q- d! C
延迟:3.5ns,驱动:-32/64mA, 7 R7 G+ Q( D# R 输入容限:5V , b! ~* E# Q! Y' g3 m3 [应用:数据、地址和控制总线的驱动 3 S* M& U2 B- }; f! g: z- F3 h7 C2,总线开关(Bus Switch)- l3 n. h4 n' r+ W/ c) @
常用器件:SN74CBTD3384(10位)、SN74CBTD16210(20位) ) X' J4 }0 l( E- I9 ~. t' v/ y" L1 T 特点:5V供电,无需方向控制 & C/ @& _% c9 Q 延迟:0.25ns,驱动能力不增加, ], j3 R% v6 a- T1 ~! f- z; a! j% j
应用:适用于信号方向灵活、且负载单一的应用,如McBSP等外设信号的电平变换 , x) _0 M( T7 I- `3,2选1切换器(1 of 2 Multiplexer) 4 s1 W( P' u' @ c1 O M 常用器件:SN74CBT3257(4位)、SN74CBT16292(12位)- J5 p3 \- S( G( T( V+ f" o0 l7 `# S
特点:实现2选1,5V供电,无需方向控制 4 x' N) j# _6 n 延迟:0.25ns,驱动能力不增加 & P# K5 Q& X; Z, ^8 o 应用:适用于多路切换信号、且要进行电平变换的应用,如双路复用的McBSP 6 o( g/ U8 \3 P v4 L 4,CPLD* P+ s: j* D2 [
3.3V供电,但输入容限为5V,并且延迟较大:>7ns,适用于少量的对延迟要求不高的输入信号 0 y q p3 W1 n7 L- o& D5,电阻分压# H6 f+ M! g" ~: Q) Y+ H. d( x. n$ N
10KΩ和20KΩ串联分压,5V×20÷(10+20)≈3.3V ' I4 h- H5 D* `3 k+ n/ z: j$ p9 N* K2 j
未用的输入/输出引脚的处理 / X" V$ \& W8 a, ^7 \1,未用的输入引脚不能悬空不接,而应将它们上拉活下拉为固定的电平6 e" U& |/ C) O
1)关键的控制输入引脚,如Ready、Hold等,应固定接为适当的状态,Ready引脚应固定接为有效状态,Hold引脚应固定接为无效状态 : @% m$ G) S, ^- `2)无连接(NC)和保留(RSV)引脚,NC 引脚:除非特殊说明,这些引脚悬空不接,RSV引脚:应根据数据手册具体决定接还是不接 + i1 N5 P2 H3 j; J9 l3)非关键的输入引脚,将它们上拉或下拉为固定的电平,以降低功耗* S$ U% R) \7 G' n
2,未用的输出引脚可以悬空不接1 u; k. U6 v/ x7 n5 ~6 E
3,未用的I/O引脚:如果确省状态为输入引脚,则作为非关键的输入引脚处理,上拉或下拉为固定的电平;如果确省状态为输出引脚,则可以悬空不接