在C中设置C54x的XPC值.doc
上传人:sy****28 上传时间:2024-09-14 格式:DOC 页数:2 大小:28KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

在C中设置C54x的XPC值.doc

在C中设置C54x的XPC值.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

在C中设置C54x的XPC值本文原为TI的应用报告SPRA513,由hitajian翻译。一、问题的提出:在支持扩展寻址的TMS320C54x器件中,有时候需要在C语言代码下设置XPC寄存器的值,以指向存在于扩展内存中的表。C55x有双MAC单元;C54x有单MAC单元二、问题的解决:使用C语言进行数据寻址的正常方式是使用指针。但缺省条件下,TMS320C54x的C编译器仅提供16bits来存指针,因为地址空间被局限于64K。然而,像TMS320C548/9这样的器件需要23bits来进行扩展寻址。当工作于far模式下时,TMS320C54x的C编译器为函数提供一个32bits的指针(使用-mf编译选项)。此指针用来支持对存在于扩展存储空间的函数进行远程调用。尽管这种指针是为函数产生的,但其可以通过与Ccast操作符连用来对扩展存储区中任何地址的数据进行存取。例如,下面的C代码为函数指针申明类型定义://Typedefforfunctionpointertypedefvoid(*FPTR)(void);typedef将FPTR定义为指向无参数、无返回值的函数的指针。TMS320C54x的C编译器将为FPTR类型指针提供32bits,这样就可以寻址任意地址的数据。下面的例子显示了如何访问扩展存储区里表。//GetaddressofexternalsymbollocatedinextendedmemoryexternunsignedintEXT_TABLE[];unsignedlongext_addr;ext_addr=(unsignedlong)((FPTR)&EXT_TABLE);上述代码将EXT_TABLE的23bits地址存于长型变量ext_addr中。如果必须通过设置XPC寄存器的值来指向外部存储区页面中的数据,则cast可用在一个表达式中。//ObtainpagewhereexternalsymbolresidesandsetXPCunsignedshort*XPC=(unsignedshort*)0x1e;*XPC=(unsignedshort)((((unsignedlong)\((FPTR)&EXT_TABLE))>>16)&0x007f);如果XPC需要为多个数据设置值,则可以把此表达式放在C的宏定义中。//DefineCmacrotoobtainextendedmemorypage,//wheresymbolislocated#defineGET_PAGE(symbol)\(unsignedshort)((((unsignedlong)\((FPTR)&symbol))>>16)&0x007f)..*XPC=GET_PAGE(EXT_TABLE);此解决方案需要编译器是1.20以上版本,同时使用-mf和-v548选项参数。