积分规则 网站地图 帮助中心    
嵌入式软件 单 片 机 DSP 存储器 传感控制 光电显示
嵌入式硬件 CPLD/FPGA SOPC AD/DA 接口电路 模拟设计
I C设计 通信产品 汽车电子 电源产品 消费电子 数控系统
工业控制 军工/航天 安防产品 医疗电子 计算机外设 测试测量
供应 I C
求购 公司库

  IC 求购 销售 公司 论文 DATASHEET 参考设计 论坛
当前位置: 电子技术 >> 单片机 >> 应用论文
  相关分类: 相关文章 | 应用论文 | 新产品 | 下载 |
TMS320VC5410 DSP的DSP/BIOS扩展寻址的实现
 
作者:唐冰 周勇 骆云志   来源:电子技术应用    点击数:79   更新时间:2008-7-14
您可以添加到网摘 让更多人关注此文章:

    

摘要: TMS320VC5410的程序空间通常被限制在64K地址空间内, 当应用程序超出64K, 则需增加目标系统存储区和附加逻辑, 实现对系统的扩展。介绍了如何配置及使用DSP/BIOS接口来实现扩展寻址功能, 分析了API函数调用和中断触发过程, 并以DSP并行自举引导方式实现程序的脱离仿真运行

关键词 DSP/BIOS 扩展寻址 API 并行自举引导

1 DSP/BIOS 接口

DSP/BIOS 接口提供了基本的运行服务如应用程序实时分析功能时钟周期函数、I/O模块优先级的任务调度等DSP/BIOS 接口提供支持汇编语言和C语言的API 接口函数这些API 函数绝大部分都是用汇编语言实现的因此汇编语言可以直接调用APIC语言调用API 则要通过DSP/BIOS C封装器应用程序通过调用API 函数来使用DSP/BIOS 接口,如软件中断背景线程和中断服务程序等都可以调用DSP/BIOS 的函数DSP/BIOS 要调用用户的C语言函数时则要通过函数链接器如图1所示

2 扩展程序空间

TMS320VC5410 的16位地址空间被划分为两块低地址块定义为公共区(或未映射区),高地址块定义为映射区(或扩展区)。这两块的地址由目标系统的外部寄存器和存储区决定。值得注意的是,TMS320VC5410 的数据区没有扩展存储区

用户可以在映射区上定义多个物理存储区它们覆盖整个映射区但彼此间不重叠当使用存储区的扩展页时内部16 位地址空间被扩展为32 位的地址进行寻址16 位代表扩展页的数目16 位代表局部的16 位地址如使用扩展程序映射存储器XPC)存放扩展页码,则XPC 存放在数据空间地址为0x1E 的位置它的值要与.CMD链接文件中定义的扩展页码保持一致2 所示的是一个扩展3 页的程序区结构图公共区的范围是0x0000-0x7FFF;映射区的范围是0x8000-0xFFFF;映射区为第一页XPC 要为0才能访问该区映射地址空间存放两个扩展页扩展程序映射寄存器限定了映射地址,使得每个扩展页的每个单元具有唯一的地址当访问扩展页时,映射区将被覆盖

TMS320VC5410 DSP/BIOS 不仅支持64K 程序页内的访问模式而且支持扩展程序的访问模式只需设置DSP/BIOS 的属性即可实现扩展程序的访问要注意的是汇编语言写的API 只能在PAGE0 页调用,而C语言写的API 可以在任何页面调用

3 中断

当中断产生时,DSP 的内部结构机制只能保存低16位页内的局部地址,而扩展寻址时程序地址需要23 这就意味着调用和返回时将超出64K(16位地址)的范围因此必须考虑怎样保存和恢复扩展地址解决的方法是用中断服务程序(ISR)保存XPC的值确保能正确计算中断向量,为此中断向量表必须放在公共区或映射区的64K 程序页面上DSP/BIOS 在公共区上时ISR 可以放在任何位置;如果不在公共区上,则ISR 必须放在PAGE0

OVLY=0 时,为了能保证中断正确执行必须在每一个页面上都要有中断向量表的拷贝OVLY=1 只需在公共页面上0x7F80)作一份中断向量表的拷贝就可以了

4 程序实例

下面通过一个简单的例子介绍DSP/BIOS 如何实现程

序地址的扩展。本例中有三个软中断时钟中断PRD_POST_SWI, 每100ms 触发SWI_PAGE1(或SWI_PAGE2)一次SWI_PAGE1 完成置XF 高;SWI_PAGE2完成置XF 三个软中断执行的函数分别放在程序空间的不同页面上即PRD_POST_SWI 放在公共页面上(XPC=0), Page1Func Page2Func 分别放在扩展程序页面1和2 (XPC12)。

5 DSP/BIOS 的配置

如要把DSP/BIOS 的程序映射到扩展程序空间需要对其进行配置步骤如下

(1) 建立一个新配置文件。启动仿真软件(Code Composer Studio), 建立testfar.pjt 工程,通过File 中的New--DSP/BIOS Config 创建配置文件, 选用sd54.cdb (54X EVM)配置

(2) 添加软件中断右键打开软件中断管理器(Software Interrupt Manager), 选择Insert SWI, 创建SWI_PAGE1, 属性配置为:function:_Page1Func;priority2。用同样的方法

创建function_Page2FuncSWI_PAGE2。右键打开定

时器功能管理器(Periodic Function Manage), 选择Insert PRD, 创建PRD_POST_SWI, 属性配置为:period(ticks):50, function:_PRD_Post_SWI, mode:continuous。

(3) 设置OVLY 位为1。打开System中的Global Settings 的属性页, PMST(6-0) 项中填入使第5位为1的值, MP=1, 填入0x60。

(4) 指定“远”调用模式。在Global Settings 属性页面的Function Call Model 选项中选择far, 使全局变量Callmodel 设置为far。

(5) 在公共区中重新分配中断向量表双击System中的MEM, 右键打开VECT 的属性页, base 项中填入新的基地址, 0x7F80。

(6) 配置扩展程序地址段对于54X EVM 评估板, 已经有了两个扩展程序段EPROG0EPROG1(如果没有的话, 则需添加这两个段, 选择Insert MEM, 添加两个扩展程序段, 重命名为EPROG0EPROG1)。EPROG0属性为base:0x8000, len:0x4000, 勾去create a heap in this memory 选项, space:code;EPROG0EPROG1的属性不同之处为base:0x18000。加入一个新的扩展程序段EPROG2,属性为base:0x28000, len:0x4000, space:code。

(7) 将目标代码链接到扩展程序段。 pragma 伪指令告诉编译器的预处理器如何处理函数语法为#pragma CODE_SECTION(Page1Func,“.FarPage1”), 在名为“.FarPage1”的段中分配Page1Func的程序空间这样目标代码Page1Func 就被链接到.FarPage1 段的区域

(8) 创建一个新的链接命令文件(testfar.cmd)其主要功能是把testfarcfg.cmd 链接进去,并且告诉链接器把不同目标函数放在不同的扩展页面上

(9) 保存配置文件为testfar.cdb, 然后将testfar.cdb、testfar.cmd、testfar.c 文件加入工程中

(10) 配置编译器和汇编器支持远模式代码打开菜单Project 中的Build Options 窗体, 选择Compiler 属性页, 点击Category 中的Advanced 选项, 勾选Use Far Calls(-mf)(C548 and higher)。此选项指定产生远调用代码模式

(11) 在调试器内描述并激活扩展寻址功能仿真器的调试软件需要激活扩展寻址功能才能支持长指令的执行和扩展存储区的读/ 写方便地对使用扩展寻址的程序进行调试。所以使用通用扩展函数GEL_XMDef() 来定义映射寄存器(如XPC)和映射扩展空间的首地址如当OVLY=1, 扩展程序区从0x8000开始, 7 XPC 放置在数据空间的0x1E 单元中, 并把下面两条语句加入到C5410.gel 文件的C5410_Init() 函数中

GEL_XMDef(0,0x1e,1,0x8000,0x7f);

//0:映射程序空间;0x1e:XPC 的地址;XPC 在数据空间中

//0x8000:映射首地址;0x7f:XPC 的大小,128

GEL_XMOn();// 使能扩展地址映射

6 DSP/BIOS 函数调用和中断触发过程

6.1 DSP/BIOS 函数调用过程

DSP/BIOS API 调用过程如图3 中的实线所示具体过程如下

(1) 产生PRD_F_swi, 短调用C 语言封装器的PRD_F_swi(), XPC=0。

(2)C 语言封装器触发PRD_POST_SWI 时钟软中断, 然后检测SWI_PAGE1, 产生执行DSP/BIOS调度表的分支

(3)DSP/BIOS 调度表保存当前PRD_POST_SWI上下文信息调用函数链接器以触发SWI_PAGE1。

(4)函数链接器远调用SWI_PAGE1,执行相应的函数(Page1Func),XPC=1。

(5)SWI_PAGE1 执行结束远返回函数链接器

(6)函数链接器又返回到DSP/BIOS 调度表

(7)DSP/BIOS 调度表恢复PRD_POST_SWI 信息返回到C 语言封装器

(8)执行上述(1)(2),(3)步触发SWI_PAGE2函数链接器远调用SWI_PAGE2,执行函数(Page2Func),XPC=2。

(9)SWI_PAGE2 执行结束远返回函数链接器然后顺序执行上述的第(6)(7)。

6.2 中断触发过程

中断触发过程如图3中的虚线所示

(1)PRD_F_swi 发生,CPU 把当前的16PC 指针压入堆栈,在中断向量表中取指令

(2)中断向量程序把当前的XPC 压入堆栈产生一个配置中断服务程序的分支指令执行中断服务程序,XPC=0。

(3)中断服务程序调用HWI_enter, 触发PRD_POST_SWI 软中断接着调用HWI_exit 检测到SWI_PAGE1准备好, 开始调用DSP/BIOS 调度表

(4)DSP/BIOS 调度表保存当前的上下文信息,调用函数链接器以触发SWI_PAGE1。

(5)函数链接器远调用SWI_PAGE1,执行相应的函数此时XPC=1。SWI_PAGE1 执行完远返回调用函数链接器再到DSP/BIOS调度表调度表恢复上下文信息,把程序指针交给PRD_POST_SWI 软中断。PRD_POST_SWI 结束

(6)执行上述(1)、(2)步后,第(3)步检测到SWI_PAGE2 准备好第(4)步触发SWI_PAGE2,(5)步函数链接器远调用SWI_PAGE2,XPC=2,顺序执行下去直到PRD_POST_SWI 结束

7 并行自举引导的实现

TMS320VC5410 上电复位后,检查到DSP 处于MC(微计算机)工作方式, 从片内ROM 0FF80h 起执行程序0FF80h 地址存放的是中断向量表它实为一条分支转移指令(BD 0F800h),使程序跳转至0F800h执行

自举引导程序(BootLoader)。并行自举引导是DSP 自举引导常用的一种方式, BootLoader 首先从地址为0FFFFh I/O 口读取自举表首地址的内容, 如果此内容不符合8位或16位的引导方式, 就从地址为0FFFFh的数据存储器读取, 进行8位或16位并行自举引导若要完成自举引导功能必须建立正确的自举表

自举表的内容不仅包括欲加载的各段代码而且包括各段代码的长度各代码段存放的目标地址程序入口地址等信息自举表可由hex500 格式转换器自动生成hex500 是一个通用程序它将公共目标文件格式——COFF 文件转换成各种FLASH(或EPROM)的编程格式因此在使用hex500 工具之前首先把testfar.pjt 进行编译链接生成COFF 格式的testfar.out 文件然后再通过设置适当的选项生成用户所要求的自举表如转换文件的格式外部数据存储器的字宽等选项testfar.out 转换为testfar.hex 文件后, 再使用C 语言编写一个转换程序, hex 文件转换为DSP 烧写FLASH 程序能识别的文件格式根据文件信息就可以完成自举表的内容如表1 所示最后使用FLASH 的擦除读写等操作指令把表1 的内容烧入FLASH DSP 上电复位便可完成并行自举引导

整个引导过程为上电复位后判断MP/MC=0 处于微计算机工作方式从片内ROM 的0FF80h 处执行中断向量表的分支转移指令(BD 0F800h), 使程序跳转至0F800h 处执行自举引导程序自举引导程序完成初始化后读取数据空间的OFFFFh 地址的内容, 找到自举表首地址8000h, 8000h 处开始读取内容, 首先是16位自举标记(10AA), 然后分别是寄存器SWWSR BSCR的内容程序入口地址代码段长度存放代码段的目标地址等信息根据这些信息把FLASH 中的8008H-A594H的程序搬运到片内RAM, 然后把Page1FuncPage2Func 的代码搬运到0x18000 0x28000, 最后跳转至片内RAM26FDH, PC 26FDH, XPC 0, 开始执程序这样即完成程序的并行自举过程

使用DSP/BIOS 可以很好地实现扩展寻址功能, 把程序烧写入FLASH , 复位DSP 使其处于MC 工作方式, 便可使用示波器测试XF引脚, 观察程序运行正确与否



相关文章
· DSP/BIOS在电能质量监测终端中的应用[278]
· 美芯PICDEM LCD 2驱动器解决方案[225]
· 基于NDK的数字电视传输流网络采集系统[287]
热门评论排行
·VHDL设计中电路简化问题的
·江苏嵌入式Linux教育培训
·锐极LINUX驱动培训班定于
·基于实时操作系统μC/OS-
·ARM嵌入式系统基础教程(N

文章评论
    没有任何评论
*只显示最新10条评论。评论内容只代表网友观点,与本站立场无关。更多评论
发表评论
  * 请先[登陆]再进行评论,谢谢。
评分: 1分 2分 3分 4分 5分
内容: *
发帖须知:
一.所发文章必须遵守《互联网电子公告服务管理规定》;
二.严禁发布供求代理信息,公司介绍,产品信息等广告宣传信息;
三.严禁恶意重复发帖;
四.严禁对个人,实体,民族,国家等进行漫骂,污蔑,诽谤。
 
热点新闻 [更多]
 
赛普拉斯为用于机器视觉与运动分析应用
赛普拉斯针对机器视觉与全息数据存储应
金融危机来袭 台湾LED产
半导体市场环境恶化 安森美
Vishay 的新型&nb
Intersil推出采用小尺寸QFN
富士通微电子携手西安电子科技大学成立
纤巧和高压的 LDO&nb
华为计划收购北电业务 华为
华为计划收购北电业务 华为
 
热门下载 [更多]
 
[ PCB设计] Protel99教程下载
[ ] 手把手学单片机20个例
[ ] 单片机做的智能台灯
[ ] 单片机入门书
[ ] linux系统移植开发文档
[ ] IC卡的读写程序
[ ] 8051单片机C语言彻底应用
[ 常用软件] 555定时器电路设计软件V1.2
[ 常用软件] 51定时器计算软件
[ ] ARM处理器应用开发4步骤
 
论坛新帖 [更多]
 
四折批发各种数码相机,摄相机等...
最低价销售各种品牌手机...
震撼出售各种品牌笔记本电脑等!...
IC design 的流程...
电子工程师,别拿一分钱不当回事...
新款安全多用途非接触式芯片(T...
关于ARM启动的一篇文章!...
Linux网络设备驱动编程...
linux文件系统基础知识...
求奇想达QXD-DM642开发...

 
赞助商 [更多]
 

ICP许可证号:[粤 05056597]
联系电话:010-82517432 82517615 传真: 010-82517615

版权所有 Copyright © 2006 嵌入式技术网