EDA365电子论坛网

标题: 基于仿真器的程序加载与烧写——TMS320F2837x [打印本页]

作者: Tronlong小分队    时间: 2020-9-14 10:16
标题: 基于仿真器的程序加载与烧写——TMS320F2837x
基于仿真器的程序加载与烧写1.查看仿真器是否安装成功如下TMS320F2837x的开发,均以TL-XDS200仿真器为例。开发板断电,连接好仿真器和开发板,并将仿真器的USB口插进电脑USB插槽,开发板上电。右击计算机图标,点击“设备->通用串行总线控制器”或者“设备->端口”,查看是否有对应的仿真器的选项出现,如有说明仿真器驱动已经正常安装,否则请先正确安装CCS。
% B7 G4 [" k5 M3 ]1 ~, H
图 1
CCS集成开发环境自带XDS100及XDS200系列仿真器驱动。如果仿真器无法正常使用,请检查是否存在驱动冲突,XDS100系列仿真器使用FTDI芯片,请检查是否与已经安装使用FTDI的USB转串口驱动冲突,如使用XDS200仿真器,请检查计算机中是否正确安装USB转串口驱动或者尝试重新安装计算机主板芯片组驱动。
/ _* {# ]4 {6 ^2 r9 P; \% _3 v, A" e1 T% @; }7 X* U0 V' V/ \  V, i
2.设置工程配置文件信息请先按照相关软件安装文档安装CCS,然后打开CCS集成开发环境,点击菜单"File->New->Target Configuration File",如下图所示:
; k6 x7 n" \/ }- O
图 2
在弹出的界面中输入工程配置文件名字,然后点击Finish。如下图所示:) x) _7 [  F8 U. K
图 3
在弹出的对话框的"Connection"下拉框中选择对应的仿真器类型(如使用TL-XDS200仿真器请选择"Texas Instruments XDS2xx USB Onboard Debug Probe"),在"Board or Device"下拉框中选择对应的CPU型号:TMS320F2837xS,并点击保存。如果CPU是双核,请选择:TMS320F2837xD,如下图所示:3 b* t& o" D7 e1 b. _
! g( J3 P! X" ?/ e8 e
​图 4

3 w6 ~1 A% n  E1 @/ h. c& n仿真器连接开发板,上电后,点击"Test Connection",测试仿真器是否连接成功。如下图所示:8 t# w# D$ N+ q! k# {
图 5

  O) a0 b7 a/ l% p* P( j6 z9 d3.加载GEL文件GEL文件主要用于在仿真调试的过程中对CPU进行初始化,如PLL、DDR等,还可以执行一些调试操作。CCS集成开发环境自带"f2837xs.gel"文件,为默认选项,可在Advanced界面配置。
/ E, B& j- P$ e9 _. v5 @
图 6
) A, y$ s6 `$ H! U/ F
点击CCS菜单"Run->Debug",弹出以下类似界面,可以看到C28xx核,是可以加载GEL文件和程序镜像的。
! a1 M/ }- K6 c. ^; z
图 7

& j! x) a7 x4 w$ Y右击对应的DSP核,在弹出的界面中选择"Open GEL Files View"选项,右下角会弹出"GEL Files(TMS320C28xx)"对话框。& x; A6 e/ n2 X
1 X1 }) _; `0 }
图 8
( Z0 i2 g& A: }
若前面没配置,可在对话框内点击右键,在弹出的界面中选择"Load GEL"。选择对应目录下的GEL文件,再点击确定,接着右下角的"GEL Files(TMS320C28xx)"对话框会出现Success提示语句,如上图。  B7 K2 i* Y, u6 Z1 Z. m) c5 K

/ j. ~( [; q/ }  j4.CCS连接开发板CPU右击对应的DSP核,选择"Connect Target"选项,会显示Suspended状态。这说明CCS已经和开发板CPU正常连接起来了。
' f, c; B7 e* g  U: F, t) J+ t6 j, P7 ]; N) d, s3 N
图 9
  I$ w' r  t9 Q% M' ?/ ^8 |8 q
备注:如果此处提示"No source****"的信息,不是错误信息,可以将其忽视。
- ~7 i2 E! E; c( t5 K; n  d" r2 X, f- \4 y1 o5 k$ u; K" C
5.加载程序镜像文件点击"Run->Load->Load Program",选择程序镜像文件(光盘"Demo"目录下有用于演示的LED.out文件,现象为底板LED灯被循环点亮),可选择并点击OK。接着点击绿色三角启动按键,程序即可正常运转起来。
* \/ W8 l- M1 v$ E2 {" g/ n* {8 V3 k* x" c  U
图 10

! ?+ _9 j1 F0 I$ j
图 11
: `  N7 q* z) B6 l/ x1 [" J2 S
6.烧写程序到FLASH6.1烧写单核裸机程序到FLASHCMD文件是编译完成之后链接各个目标文件时,用来指示各个数据、符号等是如何分配到各个段,以及每个段所使用的存储空间的,通过CMD文件可以实现将编译生成的.out程序烧写到FLASH。具体烧写步骤如下:9 j& a% ?3 k' B
右键工程点击"Add Files…",在弹出的对话框中选到"2837xS_Generic_FLASH_lnk"文件,路径为光盘"Demo\F2837xS\NonOS\F2837xS_common\cmd"目录下。# W5 w' J( {' \! w& B
图 12
. f3 @1 O# f9 p4 ], X0 X+ _' t2 T
图 13

7 W( {2 G8 u. J在弹出的对话框中,选择"Copy files",然后点击OK。  ~: \4 d! `5 s2 \* `& E
7 p3 A& o/ H5 M+ s+ x
图 14

5 k% e2 _1 e" I6 H* d2 r) c先右击工程中"2837xS_Generic_RAM_lnk"文件,点击"Exclude from Build",再右击工程,点击"Build Project",即可对当前工程编译。
3 l9 e# f6 @9 _& Z2 A" [: B3 u5 C6 z; W' c% w# Z
图 15

, ^- m, T( f* M( k+ {点击"Run->Load->Load Program",选择刚生成的程序镜像文件并点击OK。加载完成即烧写完成,重新上电就可以运行程序。
2 `6 H7 C$ f5 z4 T) [  ]3 r
( ]1 f& D' {3 o' k8 P; P$ i
图 16
* x% F- X! u7 ]3 Z
如果遇到烧写效果与仿真效果不一致,则有可能为例程中存在延迟函数,导致运行效果延迟较大(几百秒以上)或无法运行,解决办法如下:
" X. a7 A8 Q9 Y( F+ K) C. n请双击工程里的main.c文件,在文件里查找是否有"DELAY_US"函数,如下图:+ x+ P0 ?" I; t# ?' A! ?. `2 r, D
- D, p# E5 r& J+ [3 L' c
图 17
图 18
  n1 O3 I0 C( f
将其注释即可。! m5 ~% b" v. H( ?& s
如有,请在文件里加入外部定义和复制内存地址代码,并重新烧写,添加位置如下图。
6 b0 ?+ P  L" ?0 l: e外部定义代码:
  g+ r% _& `, c" xextern Uint16 RamfuncsLoadStart;/ G" @6 A: d" L3 K/ D
extern Uint16 RamfuncsLoadSize;
' f8 L2 Q9 y' w  O' b. A/ ]- bextern Uint16 RamfuncsRunStart;6 b' p- s* R% h2 i7 q
复制内存地址代码:- }2 B8 `" U& U5 H. l; j9 L
memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);5 J- N  P! r- s  x$ p+ `/ Q

4 {& C6 h; T+ \) M1 C6 L8 @; j+ t
图 19

0 o* B1 ?+ M! k, o:如果遇到烧写不成功,请按以下流程进行操作:& }, ]1 F# }" n3 f
重启完成后,Debug Server Flash版本会变成Debug Server Flash 6.1.0.1425。
5 _8 M; I  @) e' A
; `( |0 O7 R1 S, u6.2烧写双核裸机程序到FLASHCMD文件是编译完成之后链接各个目标文件时,用来指示各个数据、符号等是如何分配到各个段,以及每个段所使用的存储空间的,通过CMD文件可以实现将编译生成的.out程序烧写到FLASH。! o2 T7 t' R9 y+ m# Z3 q
以双核工程led_flash为例,具体烧写步骤如下:
& K' ]- q! s/ F" U9 j' V按照工程文件的导入步骤,将led_flash_cpu01和led_flash_cpu02的工程,导入到CCS的Project Explorer窗口,如图所示。1 X1 V8 X' k* O6 d* D

/ e" O; ?, W  @3 N' H7 E* X
图 20
# U6 \) S/ [& d5 I& E  d$ q/ V2 x+ B* W
打开led_flash_cpu01的工程目录,右键点击"2837xD_RAM_lnk_cpu1.cmd",左键点击"Exclude from Build"选项。" M, P7 R' [( |4 I. ^
4 U" z9 Z6 \" B0 z$ q- b
图 21
3 N3 _/ V. {& N# u! l, C2 V
然后,在led_flash_cpu01的工程目录下,右键点击"2837xD_FLASH_lnk_cpu1.cmd",左键点击"Exclude from Build",取消该选项。2 N" [! n' _  Y7 _$ h; H% U

! h+ l$ E8 d2 c! F! `% E
图 22

" W; b1 O4 A  w) e; V在main.c文件的定义中,添加以下代码,如图所示:- b( g5 |. G+ {" E1 `
#define _STANDALONE
& i$ T7 u" K) o( n+ P5 P#define _FLASH
% `( V, w$ w$ x2 @% z#ifdef _FLASH
! q% {9 p9 u+ E) j$ Y5 eextern Uint16 RamfuncsLoadStart;
3 |. m/ W! e3 N3 H7 C* H. |" Textern Uint16 RamfuncsLoadSize;) }- C" L, F! Y$ P' ^6 T
extern Uint16 RamfuncsRunStart;
$ Y- N( c' @  t* t5 Z9 b) P, J#endif0 e" t/ R9 {5 a8 Q2 i
图 23
; a9 l0 A) S; m: D2 C( T0 T- M7 P
在主函数中,添加以下代码,如图所示:* o! `1 z# Y( C4 R
#ifdef _FLASH& a2 }6 k; U$ Z
memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);7 R7 Z7 a" b3 ]1 {7 u
#endif
) \7 d2 ]$ P  S9 _6 p7 _  Q; y: j' \  }8 e
#ifdef _STANDALONE
9 k* C5 y8 k/ G0 z4 c' a( C#ifdef _FLASH% R! D# Y/ D+ h; t3 I) H. ?
//发送 boot 命令,允许 CPU2 开始执行应用程序4 F2 {, E1 U. S9 _* g# {& |
IPCBootCPU2(C1C2_BROM_BOOTMODE_BOOT_FROM_FLASH);6 R6 {5 g$ k' j
#else/ u- x2 J6 F# H9 |
// 发送 boot 命令,允许 CPU2 开始执行应用程序/ h' k# N& j  G  O
IPCBootCPU2(C1C2_BROM_BOOTMODE_BOOT_FROM_RAM);3 k, R* ?% B% x- Q+ l
#endif
: @3 `0 c9 T5 E  l  }. W#endif6 j! I* P: {* z; X
5 {7 \7 h& k5 G! a
// 片上 Flash 初始化
0 j, o5 h0 }! q( C$ d7 L#ifdef _FLASH* k% Z0 ^: z% F7 `, K
   InitFlash();
$ q, y- U& S2 w0 H; A& f* r( H#endif
  g1 i7 c  F2 n8 h
6 J# b# Z% y- r' G( M" v3 P
图 24
& v2 G& R! W7 H$ A
保存修改,点击"Rebuild Project"选项,重新编译工程。
) q. H0 X0 L9 Z; D7 p+ s# o1 a( x5 G0 a% E
图 25

; `& c2 g( m- d4 }1 Y4 x7 O# g打开led_flash_cpu02的工程目录,右键点击"2837xD_RAM_lnk_cpu2.cmd",左键点击"Exclude from Build"选项。
, e( X7 w4 r  l1 P3 |" U
3 s; T1 f0 z6 I8 r% L+ g
图 26
: P: Z/ `5 }* M2 X% k4 ^
然后,在led_flash_cpu02的工程目录下,右键点击"2837xD_FLASH_lnk_cpu2.cmd",左键点击"Exclude from Build",取消该选项。
' Z% V+ ^9 r! S0 Z6 ?/ ?
  O0 i. R, C# F) k7 f, T
图 27

& e; f' F4 U3 `( Z, L. w/ m在main.c文件的定义中,添加以下代码,如图所示:% p/ X' F9 b; M+ o) J: |1 o
#define _FLASH
: c7 `; Q1 F5 H  t#ifdef _FLASH6 m3 Z- v6 h2 b* G* S
extern Uint16 RamfuncsLoadStart;5 Z! u+ O  M, F5 J
extern Uint16 RamfuncsLoadSize;
3 l: p) I6 _  d8 E! g* U: Y2 c' Wextern Uint16 RamfuncsRunStart;
: {2 A# u" |- z" a1 Z: `% d#endif
  N! D/ I' B! u$ ~& X; d9 [' q1 {: _
图 28
1 I4 Y6 m: V( ^7 O
在主函数中,添加以下代码,如图所示:% B8 s  l! ^* D# F* W7 P' A
#ifdef _FLASH
" D, F: X) n* X. ]memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);  u1 b. n, m3 G3 W( n# k
#endif
/ x- V) E4 ?7 m6 q$ Q3 Y$ `2 m- x. U4 y' N; w
// 片上 Flash 初始化
: q* Z6 ?: B3 f& E#ifdef _FLASH
5 A8 K: D5 ^8 s5 A  J' Q   InitFlash();
" I, [  E- m0 w/ ^: z  I#endif
  M) f- \- ^" O8 M# D- x- o9 v* x2 j' A2 [. X! Y
图 29

! T4 w8 N1 l4 S保存修改,点击"Rebuild Project"选项,重新编译工程。
" {1 U( U, M0 \. N$ }+ w) A* {- G5 U6 V) p( |
图 30

' y/ P9 n& e& J/ U! q5 s$ h; J按照工程导入步骤,将生成的led_flash_cpu01.out和led_flash_cpu02.out文件,分别加载到CPU1和CPU2。8 l0 Z  Q9 y- F* Q* ~+ d5 }
开发板断电,然后重新上电,就可以正常点亮,核心板上的LED流水灯。
  H$ `; ]5 U# s! @+ y6.3烧写双核SYSBIOS程序到FLASH以SYSBIOS的LED工程为例。
- r: C( C, R% P; v0 ]将光盘资料的Tools目录下的"TMS320F2837xD_BIOS.cmd"文件,拷贝到对应的工程目录下。1 @9 F& d, y: B$ f0 j. I  M5 ~
; o" ~  C' g* r0 m. g$ X  v* E
图 31
# ]3 b1 g% l# N5 l3 g
按照工程文件的导入步骤,将光盘资料中"Demo\DSP_F2837xD\SYSBIOS\Application"路径下的LED工程,导入到CCS的Project Explorer窗口,如图所示。
! C5 I7 ^  M1 N1 h9 R
图 32
打开sysbios_led的工程目录,右键点击"TMS320F2837xD.cmd",左键点击"Exclude from Build"选项。
5 }; ^, R- o0 E# j: q0 x
图33
双击工程目录下的app.cfg文件。
, L. r+ E8 m  s/ ]& W
图 34
' L8 a0 I& @, J# _  u! u
点击Boot选项。
9 @  j+ S0 J' s; Z: \8 y' F# h. x
图 35

$ K: I  a, [1 @) I, g& Z2 m确认Boot配置,如图所示。
: O7 o4 Q; I: M, j. v% B; V
图 36

5 @6 I. Z: q$ H( r* `保存退出,右键工程,选择"Rebuild Project"选项,重新编译工程,如图所示。7 R( h' y! s! j5 s0 \

2 L7 k# Z: {% Y) y1 W1 \" |9 ~. }
图 37
按照工程导入步骤加载sysbios_led.out文件,然后点击程序运行按钮。; n/ {9 L/ L/ \9 l1 M6 n7 p7 `
开发板断电重启,烧写到FLASH的流水灯程序,即可正常运行。
. f3 H* N6 h' v$ u3 |
- e# F& `# E6 p7 X! a* l* A: u
作者: fantasyqqq    时间: 2020-9-14 11:07
步骤很详细,小白都可以跟着练




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2