DSP28335—启动过程 dsp28335

文章来自:http://blog.csdn.net/cherishlei/article/details/8045294

补充

图1BootROM函数的流程图

对于内部flash启动,如图



图2 跳转到Flash启动的流程图

在0x3F7FF6必须放置一个跳转指令,该指令跳转到你自己的启动代码或者应用程序。



1.DSP reset后运行的起始地址是多少?

0x3FFFC0

2.仿真器烧写程序的步骤是?

根据cmd文件把程序烧到指定位置,然后执行。

3.DSP的Flash启动过程是什么?

首先硬件配置GPIO84~87上拉为1,即处于Flash启动过程。当DSP复位后,会从复位向量0x3FFFC0处取得复位向量,并跳转到InitBoot处开始执行,InitBoot会读GPIO84~87的值发现全为1判断为Flash启动方式。然后会跳到0x33FFF6处执行。在CCS5.2工程的cmd文件中有如下代码:

MEMORY
{
PAGE 0 :
BEGIN : origin = 0x33FFF6, length =0x000002

...
DSP28335—启动过程 dsp28335
}

SECTIONS
{...

codestart :> BEGIN PAGE = 0

...}

即表示把codestart段放到0x33FFF6位置处,文件“DSP2833x_CodeStartBranch.asm”中有codestart段的定义,实际上codestart段只是包含了一个跳转指令,是程序跳转到_c_int00处,_c_int00在boot.asmin RTS library中有定义,_c_int00的代码最终会调用c的main函数,之后就是main函数的执行。

4.F28335如何烧写代码到flash中并运行?

首先使用添加C:ticontrolSUITEdevice_supportf2833xv133DSP2833x_commoncmdF28335.cmd。此文件即为配置代码到flash中的TI官方配置文件。

然后参考C:ticontrolSUITEdevice_supportf2833xv133DSP2833x_examples_ccsv4flash_f28335。添加以下代码:

MemCopy(&RamfuncsLoadStart,&RamfuncsLoadEnd,&RamfuncsRunStart);将一些在内存中运行的代码从flash复制到内存中,然后程序才能正常运行。

5.写好的代码再ram中能正常运行但是烧写到flash中后,函数DSP28x_usDelay()不能正常运行为什么?

因为在DSP2833x_usDelay.asm中有.sect"ramfuncs",即把该函数定义在段"ramfuncs"中,而此段需要在内存中运行,故需要使用函数

MemCopy(&RamfuncsLoadStart,&RamfuncsLoadEnd,&RamfuncsRunStart);将ramfuncs段复制到内存中然后运行。只算以这样设计是因为函数DSP28x_usDelay()精准运行对运行速度有要求故必须放在段"ramfuncs"中。参考:http://blog.sina.com.cn/s/blog_9388c4140100vs0r.html

6.cmd中以下代码如何解释?

ramfuncs : LOAD = FLASHD,
RUN = RAML0,
LOAD_START(_RamfuncsLoadStart),
LOAD_END(_RamfuncsLoadEnd),
RUN_START(_RamfuncsRunStart),
PAGE = 0

第1行表示该段的装载在PAGA0的FLASHD中
第2行表示该段的运行地址在PAGE0的RAML0中
LOAD_START(_RamfuncsLoadStart)令编译器创建了一个变量RamfuncsLoadStart,该变量指向段ramfuncs的装载地址的首地址(LOAD_START为编译伪指令,请见CCS的帮助文档);
LOAD_START(_RamfuncsLoadEnd)令编译器创建了一个变量RamfuncsLoadEnd,该变量指向段ramfuncs的装载地址的末地址(LOAD_END为编译伪指令,请见CCS的帮助文档);
RUN_START(_RamfuncsRunStart)令编译器创建了一个变量RamfuncsRunStart,该变量指向段ramfuncs的运行地址的首地址(LOAD_START为编译伪指令,请见CCS的帮助文档);
从第1和2行可以看出,段ramfuncs中的函数DSP28x_usDelay()的装载地址和运行地址是不同的,本程序中装载在Flash的块FLASHD中,而在SARAML0中运行,这只是目标,实际运行时DSP并不会自动将Flash中的代码拷贝到SARAM中,因此需要手动添加代码来完成。
在C函数中,为了使用变量RamfuncsLoadStart、RamfuncsLoadEnd和RamfuncsRunStart,必须先声明,本工程在文件DSP2833x_GlobalPrototypes.h中做了如下声明:
extern Uint16 RamfuncsLoadStart;
extern Uint16 RamfuncsLoadEnd;
extern Uint16 RamfuncsRunStart;
然后就可以使用了。在Main.c中,使用MemCopy()函数将段ramfuncs中的函数DSP28x_usDelay()的代码从装载地址RamfuncsLoadStart—RamfuncsLoadEnd拷贝到RamfuncsRunStart开始的SARAM空间中。之后在程序运行时,只要调用DSP28x_usDelay()函数,都会自动地指向SARAM中相应的函数入口地址,这一点是自动完成的。MemCopy()函数原型在MemCopy.c中,DSP2833x_GlobalPrototypes.h声明。

7.如何将一个函数放到ram中运行?

参考TI公司头文件中自带InitFlash函数,这些函数会以CODE_SECTION申明。如:#pragmaCODE_SECTION(InitFlash,“ramfuncs");

  

爱华网本文地址 » http://www.aihuau.com/a/25101014/217541.html

更多阅读

空调内机正常外机不工作维修 空调室内机滴水维修

空调故障:?空调内机正常运行外机不工作。可能有的故障:1、电路板故障。2、元件故障。3、系统故障。处理办法:一:电路故障外机到电的启动过程。? (市电380V外机同时引220V到内机,内机的220V通过变压器后输出24V交流低压给电路板检测,检测

如何使用u深度u盘修复系统无法启动现象 u深度修复系统

如何使用u深度u盘修复系统无法启动现象——简介用户在操作电脑过程中,可能由于修改硬件或软件,从而遇到开机无法启动进入系统的情况。碰到这种情况需要如何解决呢?本次小编就教大家运用u深度u盘启动盘修复Windows无法启动的问题。如何

bios设置光驱启动 华硕主板bios设置图解

bios设置光驱启动——简介当我们利用光盘安装系统时,通常都要通过在BIOS里设置从光盘启动才能正常进行系统的安装过程。下面就来看一下设置光驱启动的方法。bios设置光驱启动——方法/步骤bios设置光驱启动 1、打开计算机电源,在电脑

教你如何禁用U盘、屏蔽USB端口的三种方法 游戏端口被屏蔽

在企业里面,有时候我们处于电脑自身安全、商业机密保护的需要,常常要禁用电脑USB接口,尤其是禁用带有USB存储功能的设备,如U盘、移动硬盘和手机存储卡等,但同时又不能完全屏蔽USB接口的使用,因为现在很多的鼠标和键盘都是USB端口。这种情

声明:《DSP28335—启动过程 dsp28335》为网友我是悍将分享!如侵犯到您的合法权益请联系我们删除