首 页       用户登录  |  用户注册
设为首页
加入收藏
联系我们
按字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
按声母检索 A B C D E F G H J K L M N O P Q R S T W X Y Z 数字 符号
您的位置: 5VAR论文频道论文中心理工论文电子通信
   TMS320C6000DSP自动引导的方法和编程实现      ★★★ 【字体: 】  
TMS320C6000DSP自动引导的方法和编程实现
收集整理:佚名    来源:本站整理  时间:2009-01-10 22:46:38   点击数:[]    

代码必须连接到应用程序中,这样在系统加电复位后,用户的引导程序才能被合适地加载和执行;只有通过编写自己的引导代码用户才能正确地从ROM中拷贝COFF格式的段;在程序连接时,只有通过合理编写命令文件(.cmd),使这些段被合理地连接后,才能实现从ROM中加载,从DSP内部RAM中执行。在这个过程中,命令文件和用户引导代码编写对于程序能否正确地执行起着非常重要的作用。在某软件无线电工程的开发中,笔者就是在C语言环境下,成功地开发了TMS320C6701的自引导程序。下面就针对这两个方面加以详细说明,以供大家借鉴。

3.1 命令文件

利用TI的代码产生工具,可以按照图2所示的步骤生成可执行文件(.out)。

汇编器接收汇编优化器或编译器产生的.asm文件,经过汇编后产生可重新分配地址的COFF格式的目标文件.obj。该格式文件包含了汇编器所生成的各个段(如表1所示),命令文件就是指导连接器如何将各段分配到相应的存储器中。编写命令文件时,有一点需要注意,那就是在很多情况下需要对某段说明两个不同的地址:加载地址和运行地址。加载地址决定了二进制程序代码的存储位置和程序的引导地址,但在运行过程中对于该段的任何引用则是以它的运行地址作为参考的。因此,当用户对某段分别说明了加载地址和运行地址时,只有将该段从加载地址复制到运行地址上,该段才可以被访问。

表1 编译器产生的默认代码段和数据段

段  名段数据段说明建议分配方法
.text代码段程序代码Load=ROM,Run=RAM
.switch初始化数据段Switch语句跳转表Load=ROM,Run=RAM
.bss,.far未初始化数据段c变.运行时从.cinit中自动初始化Load=Run=RAM
.cinit,.pinit初始化数据段C变量和函数初始化表Load=Run=ROM
.const初始化数据段常量Load=Run=ROM
.data,.cio,.sysmem未初始数据段其它的.data段Load=Run=RAM

在命令文件中,合理地分配.cinit段对于整个程序的正确运行起到关键的作用。在TI可查阅的文档和相关网站上,很少有涉及这方面内容的文章。经过反复实践,笔者取得了处理.cinit段的一些经验,请大家在下面的命令文件和用户引导程序中注意该段的处理过程。

下面是在实践中编写的命令文件(.cmd)

-c ;说明复位后的初始化方式

-stack 0x5000 ;说明堆的大小

-heap 0x400 ;说明栈的大小

-l rts6701.lib ;说明程序中引用的库文件

MEMORY ;将整个存储器分成具有不同名称的存储区域

{

VECS: origin = 0x00000000, len = 0x00000200

PMEM: origin = 0x00000200, len = 0x0000d000

PCINIT: origin = 0x0000d200, len = 0x00001e00

CE1VECS: origin=0x01400000, len = 0x00000200

CE1PMEM:origin = 0x01400200, len = 0x0000d000

CE1INIT: origin = 0x0140d200, len = 0x00001e00

CE3: origin = 0x03000000, len = 0x01000000

DRAM: origin = 0x80000000, len = 0x00010000

}

SECTIONS ;说明目标文件中各段的加载地址和运行地址

{

.myBootCode :load=CE1VECS, run=VECS

;用户的引导代码段

.text : load=CE1PMEM, run=PMEM

.cinit : load=CE1INIT, run=DRAM

;装载到ROM中,在片内数据区运行

.const > DRAM

.data > DRAM

.bss > DRAM

.sysmem > DRAM

.stack > DRAM

.far > CE3

}

3.2 编写用户引导代码

DSP加电复位后,自动从CE1空间中拷贝64K数据(程序代码)到地址0处,然后从0地址处开始执行指令。由于在命令文件中,将.cinit装载到外部ROM中,但其运行地址却在片内数据区,所以采用下面这段程序,其主要作用是将Cinit从外部ROM中搬到片内数据区,使其能在C编程环境下进行正确的初始化工作,保证程序的顺利进行。

.sect “.myBootCode”

;将用户引导代码分配到

myBootCode段中

.global myBootCode

.ref _c_int00

;C程序的入口地址

myBootCode

......

;EMIF寄存器和DMA寄存器初始化

;使用DMA方式将以原地址0x0000d200开始的0x380长的存储空间拷贝到目标地址上

mvkl DMA0_SRA ,A5 ;装载原地址0xd200

mvkl 0x0000d200, B4

mvkh DMA0_SRA ,A5

mvkh 0x0000d200m B4

stw B4,*A5

mvkl DMA0_DSA, A5 ;装载目标地址0x80000000

mvkl 0x80000000, A4

mvkh DMA0_DSA, A5

mvkh 0x80000000, A4

stw A4,*A5

mvkl DMA0_CNT A5 ;装载数据长度0x380(这个长度可以通过查看.map文件中.cinit的长度获得)

mvkl 0x00000380, B1

mvkh DMA0_CNT ,A5

mvkh 0x00000380, B1

;启动DMA开始传输

wait:

mvkl DMA0_PCR ,A5

mvkh DMA0_PCR ,A5

ldw *A5 ,B2

mvkl 0x0000000c,A5

mvkh 0x0000000c ,A5

and A5,B2,B2

b2 b wait

nop 5

;传输结束后,跳转到C程序的入口地址c_int00处,

开始执行程序

mvkl .s2 _c_int00B0

mvkh .s2 _c_int00B0

B .s2 B0

nop 5




上一页  [1] [2] 


Tags:


文章转载请注明来源于:5VAR论文频道 http://paper.5var.com。本站内容整理自互联网,如有问题或合作请Email至:support@5var.com
或联系QQ37750965
提供人:佚名
  • 上一篇文章:利用TMS320C6201芯片进行图像压缩

  • 下一篇文章:基于DSP的汽车减震弹簧故障诊断仪的设计
  • 返回上一页】【打 印】【关闭窗口
    中查找“TMS320C6000DSP自动引导的方法和编程实现”更多相关内容 5VAR论文频道
    中查找“TMS320C6000DSP自动引导的方法和编程实现”更多相关内容 5VAR论文频道
    最新热点 最新推荐 相关新闻
  • ››嵌入式系统的通信规约管理平台设计...
  • ››一种基于七号信令的局间话单采集系...
  • ››对于变频器的制动技术分析
  • ››电子文件管理元数据宏观结构多维分...
  • ››浅论卫星电视接收机的常见故障的检...
  • ››信息时代网络用户信息检索焦虑的心...
  • ››论GIS在高校房产管理中的实际应用
  • ››关于电力通信发展战略的思考 金李莎...
  • ››2G、3G切换精细化优化分析思路探讨...
  • ››光纤自动化生产的需求与时机
  • ››TMS320C2XX开发设计中应注意的问题...
  • ››TMS320C32DSP的中断编程方法及BOOT...
  • ››TMS320VC5402外部并行引导装载方法...
  • ››TMS320C6701在电离层垂直探测系统中...
  • ››TMS320C6711的FLASH引导装载系统研...
  • ››TMS320C6201在MPEG-4视频解码器中的...
  • ››TMS320C54x和ADSP218x性能比较
  • ››TMS320F206的中断技术及其实现
  • ››TMS320C55x的指令流水线及其效率的...
  • ››TMS320C32扩展异步串口的方法
  •   文章-网友评论:(评论内容只代表网友观点,与本站立场无关!)
    关于本站 - 网站帮助 - 广告合作 - 下载声明 - 网站地图
    Copyright © 2006-2033 5Var.Com. All Rights Reserved .