加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

将程序代码烧到F28335的片上FLASH的调试记录

发布时间:2020-12-15 18:18:46 所属栏目:百科 来源:网络整理
导读:实现将程序代码烧到F2812的片上FLASH中,然后复位后程序从FLASH中的代码执行(运行当中不将FLASH中的代码或部分代码载入到RAM区内),要做这么几个工作: ? ? ? ? ? ? 修改CMD文件 ? ? ? ? ? ? 添加指令跳转代码 ? ? ? ? ? ? 烧写FLASH ? (一)修改CMD文件
实现将程序代码烧到F2812的片上FLASH中,然后复位后程序从FLASH中的代码执行(运行当中不将FLASH中的代码或部分代码载入到RAM区内),要做这么几个工作:

?????? 修改CMD文件

?????? 添加指令跳转代码

?????? 烧写FLASH

?

(一)修改CMD文件

?????? 相对于调试时的SRAM.CMD文件来说,要修改这么几部分:

1、? 将程序部分(PAGE0)对应到FLASH空间;

2、? 分别在SECTINS和MEMORY中添加起始段(用户自定义的codestart)和相应的存储空间名(设定为BEGIN),实现的代码如下:

BEGIN???? : origin = 0x3F7FF6,length = 0x000002

codestart??????? : > BEGIN,????? PAGE = 0

(二)添加指令跳转代码

???????直接使用开发包中的源码DSP281x_CodeStartBranch.asm文件,代码如下:

?

***********************************************************************

WD_DISABLE?? .set??? 1?????? ;set to 1 to disable WD,else set to 0

??? .ref _c_int00

***********************************************************************

* Function: codestart section

*

* Description: Branch to code starting point

***********************************************************************

??? .sect "codestart"

code_start:

??? .if WD_DISABLE == 1

??????? LB wd_disable?????? ;Branch to watchdog disable code

??? .else

??????? LB _c_int00???????? ;Branch to start of boot.asm in RTS library

??? .endif

;end codestart section

***********************************************************************

* Function: wd_disable

*

* Description: Disables the watchdog timer

***********************************************************************

??? .if WD_DISABLE == 1

??? .text

wd_disable:

??? SETC OBJMODE??????? ;Set OBJMODE for 28x object code

??? EALLOW????????????? ;Enable EALLOW protected register access

??? MOVZ DP,#7029h>>6? ;Set data page for WDCR register

??? MOV @7029h,#0068h? ;Set WDDIS bit in WDCR to disable WD

??? EDIS??????????????? ;Disable EALLOW protected register access

??? LB _c_int00???????? ;Branch to start of boot.asm in RTS library

??? .endif

;end wd_disable

.end

; end of file CodeStartBranch.asm

?

(三)烧写FLASH

?????? 烧写FLASH有两种方式:用代码操作,用CCS插件(这只是我了解的,可能有更多的方法)。对于第一种方法可以看看这上面的文章,(http://article.ednchina.com/CPUDSP/20090110090607.htm)

我觉得写得很好,下面我主要记录下我用CCS插件来烧的过程:

?????? 首先,给安装CCS烧写插件,这个网上很多,可以很容易找到,不过网上有些人说安装的插件版本要和芯片的一样,也就是要用最新的版本,我下了两个版本,用的却是相对老的版本,结果当然也烧写进去了。

?????? 在以上工作都做好后,就可以点击烧写菜单选项了,如果此时弹出的菜单大部分是灰色的话,很有可能是你的GEL文件不大对,当然也有可能是DSP被锁了。我也与到这样的情况,查看我的GEL文件,发现F2812_Memory_Map()中的Program和Data memory maps模块中有部分代码被注释了,然后去掉注释就OK了。

?????? 在点击excute前要设置PLLCR和烧写配置,在插件安装的路径中有两个文件,开始时我也不知选哪个,挨个试,后来发现FlashAPIInterface2812V2_10.out能用。在做完这些后就可以excute了,这中间可能会出现两个问题(总能遇到各种怪问题的我也只有出现两个,相信幸运的你肯定好运),一是提示Code Composer could not locate: boot28.inc;我选了“是”,用工程目录lib下的rts2800.lib满足它,它竟然没报错,真怪!然后就erase/program/verify succeed。在最后它又弹出一个提示:“

Warning: This program contains initialized RAM data.

It may run successfully under Code Composer Studio

but not as a standalone system because of this. If

your Flash program requires initialized data in RAM,

you will need to write Flash code to initialize RAM memory.”

我没管它(不是我不管,是我看不懂它是什么意思),后来也没发现有什么不对的,也有可能我还没调到那步吧,希望你也不会调到那步。

?????? 最后,重新上电就OK了。当然,就是程序烧到FLASH中,还是可以在CCS里进行单步调试的。

后来发现出现这个警告的原因是在初始化的时候用到了一些需要在RAM里面运行的函数,比如DSP28x_usDelay()函数。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读