第一范文网 - 专业文章范例文档资料分享平台

DSP28335—CMD文件解读(映射关系)

来源:用户分享 时间:2025/5/26 0:10:50 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

16. .endif

这个函数从the C/C++ Header Files and Peripheral Examples提供的CodeStartBranch.asm文件修改而来,只是第二个调用用copy_sections代替了_c_int00。这个调用仅仅在WD_DISABLE为0时执行。 上面的代码,WD_DISABLE 被设置为1。这使得wd_disable运行。wd_disable的代码如下:

1. *********************************************************************** 2. * Function: wd_disable 3. *

4. * Description: Disables the watchdog timer

5. *********************************************************************** 6. .if WD_DISABLE == 1 7. .sect \ 8. wd_disable:

9. SETC OBJMODE ;Set OBJMODE for 28x object code 10. EALLOW ;Enable EALLOW protected register access 11. MOVZ DP, #7029h>>6 ;Set data page for WDCR register 12. MOV @7029h, #0068h ;Set WDDIS bit in WDCR to disable WD 13. EDIS ;Disable EALLOW protected register access 14. LB copy_sections ;Branch to copy_sections 15. .endif

1. *********************************************************************** 2. * Function: wd_disable 3. *

4. * Description: Disables the watchdog timer

5. *********************************************************************** 6. .if WD_DISABLE == 1 7. .sect \ 8. wd_disable:

9. SETC OBJMODE ;Set OBJMODE for 28x object code 10. EALLOW ;Enable EALLOW protected register access 11. MOVZ DP, #7029h>>6 ;Set data page for WDCR register 12. MOV @7029h, #0068h ;Set WDDIS bit in WDCR to disable WD 13. EDIS ;Disable EALLOW protected register access 14. LB copy_sections ;Branch to copy_sections 15. .endif

这要求看门狗在copy_sections和c_int00函数运行期间被除能,否则,看门狗可能会在进入main()之前超时。这个函数也是从the C/C++ Header Files and Peripheral Examples提供的CodeStartBranch.asm文件修改而来,只是用copy_sections代替了_c_int00。

Copy_sections:

DSP28xxx_SectionCopy_nonBIOS.asm文件提供了copy_sections的代码,第一次运行到这里,看门狗是关闭的,段已经准备好被复制,段大小被存放在累加器,装载地址放在XAR6中,执行地址放在XAR7中,这个功能例子如下:

1. MOVL XAR5,#_text_size ; Store Section Size in XAR5 2. MOVL ACC,@XAR5 ; Move Section Size to ACC

3. MOVL XAR6,#_text_loadstart ; Store Load Starting Address in XAR6 4. MOVL XAR7,#_text_runstart ; Store Run Address in XAR7 5. LCR copy ; Branch to Copy

1. MOVL XAR5,#_text_size ; Store Section Size in XAR5 2. MOVL ACC,@XAR5 ; Move Section Size to ACC

3. MOVL XAR6,#_text_loadstart ; Store Load Starting Address in XAR6 4. MOVL XAR7,#_text_runstart ; Store Run Address in XAR7 5. LCR copy ; Branch to Copy

段的大小,装载开始标志,执行开始标志都由连接器产生,这是在内存分配 -链接器命令文件一节讨论。

在地址和段长度都被存放好之后,copy程序被调用来确定段是否被编译器产生,这由检测累加器是否为0来确定。

1. copy:

2. B return,EQ ; Return if ACC is Zero (No section to copy) 3.

4. RPT AL ; Copy Section From Load Address to 5. || PWRITE *XAR7, *XAR6++ ; Run Address 6. return:

7. LRETR ; Return 1. copy:

2. B return,EQ ; Return if ACC is Zero (No section to copy) 3.

4. RPT AL ; Copy Section From Load Address to

5. || PWRITE *XAR7, *XAR6++ ; Run Address 6. return:

7. LRETR ; Return

如果累加器为0,程序会返回到调用前的地址,如果累加器不为0,有段需要被复制。这用上面所示的PWRITE指令来实现,PWRITE复制XAR6指向的存储器的内容到XAR7指向的内容。在这里,就是复制装载代码的地址的内容到运行代码的地址。这样,一直到累加器为0,完成整个段的复制,当所有段都被复制完,程序就会跳到c_int00,如下:

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

到这里,C语言环境被建立,main()是可进去的。

完整的copy_sections程序请参见相关文件夹中的DSP28xxx_SectionCopy_nonBIOS.asm。

内存分配 - 连接命令文件(.cmd):

如第二节所述,连接命令文件(.cmd)是用来告诉连接器怎么分配编译器产生的段的。The C/C++ Header Files and Peripheral Examples提供了标准的连接命令文件(.cmd)。

相关代码文件中提供了三个链接器命令文件用于配置内存分配。

· F280xx_nonBIOS_flash.cmd · F281x_nonBIOS_flash.cmd · F2833x_nonBIOS_flash.cmd

每个文件一般都用相同的方法编写,只是在存储器方面有很小的一些差异(特殊设备)。连接命令文件(.cmd)的Memory部分是根据设备的内存空间来连接编译好的段的。详情参见具体控制器的数据手册。 下表展示TMS320F2808的存储器映射:

搜索更多关于: DSP28335—CMD文件解读(映射关系) 的文档
DSP28335—CMD文件解读(映射关系).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c85w7t9ta7f3uh255c6he20sz532alg00c8x_3.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top