1.DSP reset后运行的起始地址是多少?2.仿真器烧写程序的步骤是?3.DSP的Flash启动过程是什么?4.F28335如何烧写代码到flash中并运行?5.写好的代码再ram中能正常运行但是烧写到flash中后,函数DSP28x_usDelay()不能正常运行为什么?6.cmd中以下代码如何解释?7.如何将一个函数放到ram中运行? ### F28335如何烧写代码到Flash中并运行 #### 1. DSP Reset后运行的起始地址 F28335 DSP在Reset后运行的起始地址通常为0x3FFFC0。这个地址是硬件设计时预设的一个特殊地址,它指向了系统的复位向量表,即当DSP上电或复位时,CPU会从这个地址读取初始的指令指针,从而确定接下来应该从哪里开始执行程序。 #### 2. 仿真器烧写程序的步骤 使用仿真器烧写程序到F28335 DSP的具体步骤如下: 1. **准备编译后的目标文件**:确保程序已经经过编译链接,并且生成了可用于烧写的文件,如.out或者.hex格式。 2. **配置仿真器**:连接仿真器至开发板,并通过相应的软件(如Code Composer Studio)进行配置,选择正确的设备型号(F28335)以及烧写方式(Flash或RAM)。 3. **加载程序到指定位置**:根据CMD文件中的设置,将编译后的程序加载到DSP的指定位置。这通常涉及到对程序存储区的映射,确保程序能够被正确加载到Flash中。 4. **校验烧写结果**:烧写完成后,使用仿真器或专门的工具检查程序是否成功烧写到了预期的位置。 5. **运行程序**:如果一切顺利,可以在仿真器的控制下运行程序,观察其行为是否符合预期。 #### 3. DSP的Flash启动过程 F28335 DSP的Flash启动过程如下: 1. **硬件配置**:硬件上需要配置GPIO84~87上拉为1,指示系统采用Flash启动模式。 2. **复位向量读取**:当DSP复位后,会从复位向量0x3FFFC0处读取复位向量。 3. **启动方式识别**:系统读取GPIO84~87的状态,如果均为1,则判断为Flash启动方式。 4. **跳转到特定地址**:随后,系统会跳转到0x33FFF6地址处执行初始化启动代码。 5. **执行初始化启动代码**:在CCS工程的CMD文件中,定义了把codestart段放到0x33FFF6位置,该段包含了一个跳转指令,用于跳转到_c_int00处,最终调用C语言的main函数。 #### 4. F28335如何烧写代码到Flash中并运行 烧写代码到F28335的Flash并运行的具体步骤如下: 1. **配置CMD文件**:首先需要添加TI官方提供的配置文件`F28335.cmd`,该文件定义了如何将代码配置到Flash中。 2. **添加代码复制功能**:参考官方示例,添加以下代码以确保某些需要在RAM中运行的代码能够正常工作: ```c MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart); ``` 这段代码的作用是将指定的代码段从Flash复制到RAM中运行,确保函数能够正确执行。 #### 5. 函数DSP28x_usDelay()在Flash中不能正常运行的原因 函数`DSP28x_usDelay()`在RAM中可以正常运行但在Flash中出现问题的原因在于该函数被定义在了"ramfuncs"段中,这意味着它需要在RAM中运行才能保持其精度和性能。 1. **函数定义**:在`DSP2833x_usDelay.asm`中,该函数被定义在".sect "ramfuncs""段中。 2. **性能需求**:由于`DSP28x_usDelay()`函数对于运行速度有较高要求,为了保证其精确性,必须在RAM中运行。 3. **解决方法**:通过使用`MemCopy`函数将包含该函数的代码段从Flash复制到RAM中,以确保函数能够正常运行。 #### 6. CMD文件中代码的解释 在CMD文件中,针对"ramfuncs"段的定义如下: ```c ramfuncs : LOAD = FLASHD,RUN = RAML0,LOAD_START(_RamfuncsLoadStart),LOAD_END(_RamfuncsLoadEnd),RUN_START(_RamfuncsRunStart),PAGE = 0 ``` 1. **LOAD与RUN**:这里定义了"ramfuncs"段的LOAD地址为Flash中的FLASHD块,而RUN地址则位于RAM中的RAML0区域。 2. **变量创建**:通过LOAD_START和LOAD_END伪指令,CMD文件创建了三个变量:_RamfuncsLoadStart、_RamfuncsLoadEnd 和 _RamfuncsRunStart,分别表示段的加载起始地址、加载结束地址和运行起始地址。 3. **地址映射**:这样的配置意味着"ramfuncs"段中的函数(如DSP28x_usDelay())将在Flash中被加载,但在运行时会被复制到RAM中以确保高性能运行。 #### 7. 如何将一个函数放到RAM中运行 要将某个函数放在RAM中运行,可以通过以下几个步骤实现: 1. **定义函数段**:在汇编文件或C文件中,使用`.sect`关键字定义函数属于RAM中的某一段。 2. **CMD文件配置**:在CMD文件中明确指定该段的LOAD和RUN地址,确保LOAD地址位于Flash中,而RUN地址位于RAM中。 3. **使用MemCopy复制**:在程序的初始化阶段,通过调用`MemCopy`函数将该函数从Flash复制到RAM中。 4. **验证与测试**:确保函数在RAM中的行为与在Flash中一致,完成必要的验证和测试工作。
- 粉丝: 2
- 资源: 949
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助