TMS320C54x系列DSP内部结构功能笔记_第1页
TMS320C54x系列DSP内部结构功能笔记_第2页
TMS320C54x系列DSP内部结构功能笔记_第3页
TMS320C54x系列DSP内部结构功能笔记_第4页
TMS320C54x系列DSP内部结构功能笔记_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

大家在阅读的时候使Word成折叠模式看着会更舒服些。

关于文档里边用到的中文参考资料,附F载地址:

http://bbs.21ic.com/icview-161578-1-1.html

刖B

DSP的本质还是单片机-微机,个人认为,微机类芯片,不论是MCUARM还是DSP甚

至是PC上的处理器,我仅在学习这类芯片的使用时,首先要学习的便是这些芯片的CPU核,

存储器组织和中断系统。只有把这几方面的内容掌握之后,你才能说根据其特点来使用这块

芯片,Debug时你心中才有数。至于片上外设,与芯片本身其实并没有太大关系,大可以要使

用时再去学习,而且不同芯片的外设其实还都是相通的。基于此,我把我在学习这类芯片时

对于这几块的学习的笔记摘录出来(这篇文档中对是对Ti的TMS320c54x系列的学习笔记),

以供大家参考。

我的笔记虽然可能次序,排版,没有市面上的书本组织得好,但我可以说,我决对是面

面向应用来写的,而不是为了出书来写的。市面上的技术类的书,大多数其实只是简单的把

官方的文档翻译过来而已、而且在翻译的过程中还省略了很多细节,这些细节其实对于我们

的理解和工程开发都是很重要的,另外很多翻译还不准确。在我的笔记中,中文资料我只是

作为一个参考,或者作为一种线索,真正有价值的信息都是来自于我对于官方文档的学习。

每一部分的记录都是以•个新手的态度来写的,这些问题都是新手在学习过程中很可能会

遇到或想到的.虽然排版不好,但当你遇到相关问题或想了解某一块时,把我写的这个Word

文档下载下来,然后使用Word文档的搜索功能搜索自己感兴趣的内容,相信一定会让你得

到较为满意的结果的。

不仅是DSP芯片方面的知识笔记,在我向信号处理工程师奋斗的路程上,我对我每一

天的学习都作了笔记记录,这些笔记记录都是面向新手,面向细节,面向工程的,都是自己

用心的体会。当有笔记成熟或自成一块时,我会把这些笔记都陆续分享给大家,以供大家在

学习或开发过程的参考,希望能为大家节省点时间。附•张目前自己的笔记文件夹的图。

几十年之后,我的肉体可能已经化为泥土或成为其它生物的一部分,所有我拥有的物质

都是带不走的,我能留给世人.后代子孙的也就是自己活着时的思想,精神。用心记录下自

己活着时可能对后人有用的东西,不为物质利益,把它上传到云端,我想这应该是我用心去

做的最有意义的事情之一。

在写这些笔记的过程中,我和我的女友虹虹正处在非常困难的时间,说来话长,愿意帮

帮我的大侠请慢慢往下看,小弟先谢过了。

我现在(2012年9月到2013年7月,研一)在北京的电信科学技术研究院上研一,即

大唐大信集团,研二回成都跟着导师学习。导师招生的方向写的是网络通信,但实际我跟了

他才知道是他要搞的是汽车电子,偏各种工业控制总线,并不是自己一直想从事的信号处理

的方向。导师给的任务也与信号处理没多大关系,与电信科学技术研究院的特色一一通信专

业就更没有关系了。我不是电信科学技术研究院的定向生,即以后大唐集团没有义务接I攵我,

以后还要拿着电信科学技术研究院的硕士学位证到社会上找工作,社会上对电信科学技术

研究院的承认还在于通信方面,如果我只是按他的要求做,显然自己在2015年找工作时是

完全处于劣势的。

作为学生,导师交代什么任务,我自然是会尽心去做,但这位导师手上真的没什么资源,

他主要的工作在于当A大学电子信息工程系的院长,没什么工程资源可以给我用,自己在做

任务的过程什么都要靠自己垫钱买,自己家里本来就很困难,生活费也紧张,我垫得很痛苦,

做起来也是各种资源没有,

最初选导师时并也不是想选他作导师的,我本来是想选另外一位导师的,那位导师的方

向是自己喜欢的,也有自己的公司,手上资源多。但在可选学生中,我是复试中是表现最好

的,这位导师就把我选了,另外那位我想选的导师也不好拒绝我现在导师的要求,因为我现

在的导师是院长,而我想选的那位导师只是A大学电子信息工程系的副院长。

这样的情况促使我除了完成现在导师交给我的任务,我还必须在信号处理,通信这些上

去发展,我现在除了每天不断丰富自己在信号处理,通信方面的知识,也在积极寻求能让自

己实践的机会。导师那里是不能了,我只能到社会上去寻找。2013年3月份,我在网上遇到

了一位成都的工程师,他们公司在成都做无线通信方面的军品,要用到很多信号处理和通信

方面的知识,他告知我,2013年6月I可成都可以过去面拭一下,感觉可以的话,就可以到他

们公司去兼职。我现在不要求什么报酬,也和那个工程师沟通得比较快乐,特别是技术方面,

所以去这家公司去做兼职问题也不大。

情况看来并不遭糕,但2013年出了一个变故让情况有了很大的变化,我的女友,和我是

成都同一所大学电子信息工程系的同班同学,2012年上当年,即大四下期她在成都找到了一

份Layout的工作,就这样一直在成都工作。

我2012年9月离开成都到北京的电信科学技术研究院上研一的理论课程,她一个人留

在了成都。虽然她一个人在成都很苦,但我们相信只要熬一年,研二我回成都就好了。我们

自认为一年我们撑得过去,但我们显然高估了女友耐一人人独处的能力,女友从小都在她父

亲和哥哥的保护下长大的,父亲和哥哥都是很Men的那种,所以导致她自己一个人是相当

不习惯一个人的独处生活.一个人的时候她也极度缺乏安全感。

熬到今年(2013年)三月份,女友实在是熬不过去了,辞职了,到深圳去找实习单位,这

样导致我们的情况发生了巨大的变化。

我2013年2月2()号过完寒假回到北京开始研一下半学期的学习。这段时间女友面临者

三座大山:

①从2012年2月工作到2013年3月女友所在的公司都没有一点加薪的动静,其实女友

也不是那么看重钱的人,只是我的家庭条件实在不好,家里的钱在成都连给首付的钱都不帔,

所以也只能靠我们俩努力挣房钱,所以自然就希望工资高一点。

②不加薪就算了,2012年12月份还新引进了一位大懂管理的管理者,用小学生式的管

理方法把公司管得一团乱.女友感到工作很压抑。

③2013年2月20号我离开成都到北京上学后的一段时间,女友是极度不适应我不在的

日子,特别希望我问成都咯陪她,但我想我还一个月的时间都没走到,就没有坐火车从北京

回成都去陪她,现在真是后悔,如果当时自己回去了陪陪她,女友后来也不会做出那样冲动

的决定。

④我的兼职有着落的时候,女友还没有做出后来的决定,但是我找的那份兼职工作在离

女友现在所做的公司很远、每天坐公交要坐很久。在女友工作的周围找(高新西区),又很

难找到跟信号处理与通信有关的兼职。成都本来兼职实习机会就很少,方向对口就很不容易

了。所以到时候我回成都后,如果我们要想在一起,很有可能又会遇到很多麻烦,说不定又

要搬家,2012年我们在成都就已经搬了两次家,女人都是很讨厌搬家这种事的。

以上四点压在女友的心上,都快使得她崩溃了,在这种情况下,没和我商量,她辞职了,

并且准备到深圳去发展,他哥在深圳那边工作了两年,工资还涨的挺快的。

我听说这个消息后,基于种种考虑,既然事情都已这样,还是只能让女友到深圳去工作

了。我想,她哥和嫂子在那边,他们在一起的话,女友应该不会害怕,也不会感到孤单。这两

天,女友到了深圳,这两天正在找Layout的工作(还没找着,有机会的大侠联系我下哈),才

发现她哥和嫂子每天也很忙,也没时间照顾她。她现在明白了自己希望的生活也并不是和她

哥和嫂子一起生活,而是希望自己所爱的人和她一起在那边租个小单间,一起工作,生活,

奋斗。同时也意识到两年的时间在我们俩的感情她肯定是挺不过去的,她肯定会先放弃我们

这段感情,虽然我们现在都很爱对方,但她相信,两年的时候,她对我的感情肯定会被磨灭,

这样的结果也是她不想发生的,想到这一点她就非常痛苦。

虽然两年的时候不会把我对她的感情磨灭,反而我会越来越爱她,但一个巴掌拍不响,

到时候别人乘虚而入,我也是无力回天。所以我现在就是特别想尽量保持住我们的感情。

现在的我要想保持住这份感情,想来想去,好点的办法就是我在成都上研二,研三的时

候尽量多去深圳,多陪陪她。

我希望能在深圳找一份数字信号处理偏通信方向的兼职工作,按理说,在深圳,找这种

兼职很好找,但是我相信大家也看了我上面的情况,也肯定能想到我这份兼职工作肯定是有

特殊要求的。总结起来,这份兼职工作应该有以下特点。

①能允许我将工作带到成都去做,因为我的导师在成都,所以按理我也应该呆在成都,

但我的导师很忙,我们也难得见一面,一般是1个月到2个月才见一面,但还是偶尔要见一

次才行吧!当我呆在成都的时候,我也想尽心心力完成贵公司交给我的任务,所以要允许我

将工作带到成都去做。当然当工作确实需要在深圳的公司完成的时候,比如需要借助某些硬

件平台或仪器调试测试的时候我也会到深圳来。

②我不要求报酬,也不要求什么福利,只希望公司能帮我报火车票的车费,我只坐硬坐,

所以还是不贵的,而且谁也不愿意整天坐火车成都-深圳的来回跑的,所以不到非要从深圳

到成都见导师面或从成都到深圳对实际的工作进行测试,调试的时候,我不会轻易去花费这

个火车费的,这点请公司放心。

③平时的时间我一周花四天的时间在兼职上,花三天的时间在导师交给的任务上。

④放暑假和寒假我都是可以每天呆在深圳的,也不要求什么报酬.给点生活费就可以

了。

⑤以后毕业之后我肯定会到深圳工作,所以请公司不用担心我以后毕业不来深圳了。

有机会的大侠请帮帮我,我真的很想保护好我和女友的爱情,也真的很想在信号处理与

通信的方向上有长远的方展,如果这次能得到某位大侠的帮助,小弟感激不尽。

笔记记录人:苏文昊(大地知心)

电信科学技术研究院(CATT)2012届研究生

联系方式:

QQ=278742825

Tel:

13693G51619(北京)

1582859433。(成者Q

更多相关专业文章请访问以下百度空间:

http://hi.baidu.com/dsp_suwenhao?page=l

必须知道这一点:

DSP复位后,首先执行FF80H的指令,而FF80~FFFFH是中断矢量表。具体是这样的:

在MP/MC管脚置低,这样上电复位后,程序自动从内部的FF80H(中断矢量表的起始地址)

地址开始运行。在FF80H处,有一条跳转到BOOT程序的指令,开始运行内部的BOOT程

序。BOOT程序的作用就是把外部FLASH存储器的程序搬移到RAM中去。

当DSP复位时,若检测到MP/荻管脚为低,则程序执行片内FF80h地址处的指令,

此地址处包含一个跳转到F800h的指令,则CPU接着执行F800B的引导程序.并将区分不

同的引导方式,把用户程序代码从外设读来耕装后放在用户指定的地址,然后跳转到用户

指定的程序入口处,

意外的惊喜:

哇口塞,官方文档上还有推荐的寄存器初始化顺序:

7.5.1RecommendedInstructionsforAccessingMemory-MappedRegisters

Unprotectedpipelineconflictscanoccurwhenanyoneofthefollowing

memory-mappedregistersisaccessed:

□Auxiliaryregisters(ARO-AR7)

□Blocksizeregister(BK)

□Stackpointer(SP)

□Temporaryregister(T)

□Processormodestatusregister(PMST)

□Statusregisters(STOandST1)

□Block-repeatcounterregister(BRC)

Memory-mappedaccumulatorregisters(AG,AH,AL,BG,BH,BL)

关于指令集:

20:50:49为了方便不懂指令的查询,我把《D5P的用系统设计实践+郑红等编著.pdf》

末尾附的汇编指令表给做成txt文档了(后来发现真的不如文档:spiul72cTMS320C54xDSP

ReferenceSetVolume2MnemonicInstructionSet.pdf来得快啊,来得好啊),如下:指令集

C54x指令集.txt

一、54x系列CPU核

《DSP程序开发:MATLAB调试及直接目标代码生成》30页(非电子书页数)开始有

详细叙述

2.1.2CPU核

先总体来看有哪些功能单元。

所有TMS320C54VC54xxDSP的CPU核都包含如下功能单元:40bit整术逻辑单元

(ALU),2个40bit嘉加器、桶形移位器、乘/加单元(包含一个17bitX17bit乘法器和一个

40bit加法器)、比较/选择/存储单元(CSSU)指数编码舞、寄存器和地址产生单元(包含一个

数据地址产生单元和一个程序地址产生单元)。

首先来看ALU

ALU执行基本的二进制补码港宣和殴逻辑操你ALU的输入可以为:16bit立

即数、数据存储器中的16bit字、宿后备豆器中的16bit宁、数据存储器中的两个16bit字、

数据存储甥中的32bit字或累加器中的40bit字.

当ALU的结果发生溢出时可以设置成饱和模式,由状态寄存器ST1的OVM位段来设

♦是否使能饱和模式,状态寄存器ST0的OVA(结果放入累加器A中)和OVB(结果放入累

加器B中)位段对溢出结果设置标志。

ALU单元有一个进位位(C),此位可以被大多数ALU的算术指令影响,包括旃转和A

位操作。进位位C对扩展精度算术操作的高效计算提供支持。两个条件探作码C和NC彳

用于条件跳转,调用、返回和条件计算,RSBX和于BX指令可以用来加载进位位。

ALU单元还可以作为两个16bitALU使用,能够在单周期内同时执行两个16bit操作。

状态寄存器STI的C16位段用来设置此模式。

这里面我有几个疑问:

1.饱和模式功能的效果和进位位所产生的效果有何区别?

2.条件操作码C和NC是怎么用的?

也许下面这段话能解释第I个问题,但是又存在另外的问题~

累加器中的值在存入存储器之前,还可以对其数值采取饱和处理,由PMST寄存器的

SST位段设置是否使能饱和处理.ST1寄存器的SXM设置馆和处理模式,当SXMM)时,

如果累加器的40bil数值超过FFFFFFFFh,则会饱和到FFFFFFFFh:当SXM=1时,如果

累加器的40成数值超过7由1^^,则会饱和到7FFFFFFFh,如果累加器的40b"数值

小于80000000b,则会饱和到8000OOOOhe,最后存储相应的字(商位字、低位字或整个的

32bit字),而累加相中原来的值不会发生变化。

要注意,上面的数值都只有32位哈,还有8位是保护位的。

我的疑问是:

1.符号位哪去了?

答:当SXM=0时,是没有符号位的;当SXM=1时,是有符号位的。

理解了这个,第2问就好理解了。

2.80000000h应该是一个很大的数啊,怎么小于它的数还要饱和到它?哦,懂了,这个

是用补码表示的最小负数,那说明最高是符号位啦!

再来看累加器:

2.累加器A和B

累加器A和B月来存储ALU或乘/加单元的输出结果,它们也可以作为ALU单元的第

二个(Y)输入数。累加器A还可以作为乘/加单元的输入数。每一累加器都可分为如下三部分:

保护位(bit39〜32)、高位字(bit31〜16)和低位字(bitl5R),分别对应寄存器AG(BG).AH(BH)

和AL(BL)o

这段话好明白。

利用STH、STL、STLM和SACCD指令或并行存储指令在数据存储器中保存累加器的

内容。其中,STH、SACCD或并行存储指令用来存储累加器的高位字(AH或BH),STL指

令用来存储累加器的低位字(AL或BL).

例假定累加器A的值为A=FF43211234h,则带移位的累加器存储结果为:

STHA,8JEMP;TEMP=2112h

STHA.-8.TEM?;TEMP«=FF43h

STLA,8.TEMP:TEMP=3400h

STLA,-8.TEMP;TEMP»=2112h

美键是要把这个例子为结果为什么是那么多搞清楚।

相关的指令我作的索引里也没有,光有下STST也不带中间的参数,所以我弄不懂

这个简单撒,全部转化成二进制就好看了。

FF43211234

»dec2bin(hex2dec('ff432l1234,))

ans=

1111111101000011001000010001001000110100

»dec2bin(hex2dec('2112,))

ans=

10000100010010

可见,取得是其中我用绿色标出的那段,可是绿色前面的那段除去保护位还有10位啊!

这个就是问题的所在了!

再看第二条吧~

»dec2bin(hex2dec(,ff43'))

11111111010()(X)11

对比:

111111110100(X)11CO10(X)010001001(X)()II()1()0

还是不知道怎么移的、这个根本就没移过啊!

强烈建议明天去下:

[5]9Pmi31TMS320c54xDSPReferenceSetVolumeLCPUandPyipherals

[6]sprul72一—TMS32OC54xDSPReferenceSetVolume2:MnemonicInstructionSet

»pru173一一TMS32OC54xDSPReferenceSetVolume41ApplicationsGuide

wsprul79一-TMS320C54xDSPReferenceSetVolume3:AlgebraicInstructionSet

[9]spru302一-TMS32OC54xDSPReferenceSetVolume5:EnhancedPeripherals

好了,今天就到这里,先睡了吧!

后来查到了,原来是这样的:

Execution1:(src)«(-16)-*Smem

2:(src)«(ASM-16)-*Smem

3:(src)«(SHFT-16)-*Xmem

4:(src)«(SHIFT-16)-*Smem

这里是第3种情况,所以

STHA,8,TEMP:

中,移位量是8-16=-8即向右移8位,正数的情况下是向左移8位的。

知道了这个之后,我们再来对比:

»dec2bin(hex2dec('ff43211234,))

ans=

llllilll01000011001000010001001000110100

»dcc2bin(hcx2dcc('2112'))

ans=

1(X)()()10001(X)10

显然情况还是不对的,这种情况显然是向左移了10位的。这个该怎么办?只好把这个

问题留在这里,等我能写实际的汇编程序的时候再写一个程序测试一下就OK了。

继续昨天的,先去把上图中的5个文档都下载下来吧!

spru131172173179302

10:23:24下我完成了,也查到了。如下:

Syntax1:STHsrc,Smem

2:STHsrc,ASM,Smem

3:STHsrc,SHFT,Xmem

4:STHsrc[,SHIFT],Smem

Operandssrc:A(accumulatorAi

B(accumulatorB)

Smem:Singledata-memoryoperand

Xmem:Dualdata-memor/operand

0sSHFTs15

-16sSHIFTs15

Execution1:(src)«(-16)->Smem

2:(src)«(ASM-16)-*Smem

3:(src)«(SHFT-16)-*Xmem

4:(src)«(SHIFT-16)-*Smem

DescriptionThisinstructionstoresthehighpartofsrc(bits31-16)indata-memorylocation

Smem.Thesrcisshiftedleft(asspecifiedbyASM,SHFT,orSHIFT)and

bits31-16oftheshiftedvaluearestoredindatamemory(SmemorXmem).

IfSXM=0,bit39ofsrciscopiecintheMSBsofthedata-memorylocation.

IfSXM=1,thesign-extendedvaluewithbit39ofsrcisstoredintheMSBsof

thedata-memorylocationafterbeingright-shiftedbytheexceedingcuardbit

margin.Thesrcremainsunaffected.

SXM符号扩展方式位

打绿颜色的意思是在SXM=I的情况下,最高位39位,即符号位的扩展是在执行一个操

作之后。这个操作是指超出32位到39位的保护位边界的右移。???呜呜,自己分

析了半天也没搞清楚是怎么回事?

后来我查了SXM,觉得应该是这么回事,保护位里的数字是1还是0应该与最高位的

39位一样,进行符号位的扩展就是在0到31位最高的0位填符号位。既然保护位里的数字

是1还是。应该与最高位的39位一样,那么我进很好办了,我只需要保护位的数字跨过保护

位与有效位的界即可啦。这也是绿色颜中的数字所述的意思啦!

去查一下SXM吧!

哪里有呢?应该是讲CPU中的有吧!于是查:

spru131gTMS320C54xDSPReferenceSetVolume1CPUandPeripherals真心没查到详

细介绍。

再查:

spru172cTMS320C54xDSPReferenceSetVolume2MnemonicInstructionSet

spru179cTMS320C54xDSPReferenceSetVolume3AlgebraicInstructionSet

也是真心没有详细介绍!

折狂,难道还有其它资料?仔细一看《DSP应用系统设计实践-C54x》中的参考资料,也

没有啊其它会有这个介绍的资料了。

于是静下心再查"SetVolume1CPUandPeripherals”果然是第一次查的方法不对引起的,

查到了专门介绍这个的,在第93页。

SXM1Sign-extensionmode.SXMdetermineswhethersignextensionisperformed:

SXM=0Signextensionissuppressed.

SXM=1DataissignextendedbeforebeingusedbytheALU.

SXMdoesnotaffectthedefinitionsofcertaininstructions:theADDS,LDU,MAC,

andSUBSinstructionssuppresssignextensionregardlessofSXMvalue.The

SSBXandRSBXinstructionssetandresetSXM,respectively.

其实还是没说清楚。但是单从这个SXM的功能来说,我的确是知道的,但是结合具体

的STH我就不太清楚了。哦,我猜大概是这个意思啦。详见一号书签

好,我们再回归我要解决的这条指令执行后为什么是那么多的问题。

但是在看这条指令的介绍时,我又发现了新的问题?即ASM与SHFT有何关系?我

需要查下ASM。ASM不是指汇编文件的后缀吗?在这种情况下是何意思呢?

查到了,意思如下:

ASM5-bitaccumulatorshiftmodefieldinSTI(-16ASM15)

可见,它是被存储在STI寄存器中的偏移量。好了,现在我们回到昨晚问题的记录处吧!

详见:二号书签

Syntax1:STHsre,Smem

2:STHsre,ASM,Smem

3:STHsre,SHFT,Xmem

4:STHsrc[,SHIFT],Smem

Operandssre:A(accumulatorAi

B(accumulatorB)

Smem:Singledata-memoryoperand

Xmem:Dualdata-memor/operand

0sSHFTs15

-16sSHIFTs15

这幅图中,我还有疑问?Smem和Xmem是怎么回事?这里说的也不清楚啊

-operand

是运算域的意思。从字面意思来讲,Smcm是在单数据域的操作。而Xmcm是双数据域

的操作?这两个有何区另J呢?

查了三个官方文档都没查到,都是直接用而已,具体在哪里出现的,看来我只有百度

了。

百度上查了,一个结果都没有,但是谷歌一下,却很多结果,我在一个PPT上找到了我

要的结果。

与Ti的DSP芯片相关的资料'网上所下资料'第3章TMS320c54x的数据寻址方式.PPT

这个PPT的第3页有详细介绍,如下:

缩写符号含义

Smem16位单数据存储器操作数

Xmem在双操作数指令及某些单操作数指令中所用的16位双数据存储

器操作数,从DB总线上读出

Ymem在双操作数指令中所用的16位双数据存储器操作数,从CB总线

上读出;在读同时并行写的指令口表示写操作数

dmad16位立即数一数据存储器地址(。〜65535)

pmad16位立即数一程序存储器地址(0~65535)

PA16位立即数——I/。口地址(0-65535)

sre源累加器(碱8)

dst目的累加器(A或B)

Ik16位长立即数

由此,我总结如下,Ti的DSP芯片的汇编指令从操作数上可分为单操作数指令和双操作

数指令。Smem就是针对单操作数指令的。而Xmem和Ymem则是针对双操作指令,其中

Xmemj是在双操作数指令及某些单操作数指令中所用的16位双数据存储器操作数,从DB

总线上读出,而Ymem则是在双操作数指令中所用的16位双数据存储器操作数,从CB总

线上读出;在读同时并行写的指令中表示写操作数

继续看书,关于54系列DSP的介绍。

31页说到桶形移位器中有一句话:

桶形移位器的输出连接到某一ALU的输入或EB数据总线上。为什么是EB数据总线

上?

27页说C50(X)有三套数据总线,即CB,DB和EB,前两个知道是什么东东,EB数据总

线是什么东东?

查官方资料,找到了:

54x系列资料\spn1131gTMS320C54xDSPReferenceSetVolume1CPUand

Peripherals.pdf

44页:

■TheCBandDBcarrytheoperandsthatarereadfromdatamemory.

■TheEBcarriesthedatatobewrittentomemory.

看到了没有,一个是读,一个是写,哈哈!

31页再来看乘/加单元吧

乘/加单元可以在单周期内执行一个17bitX17bit二进制补码乘法和一个40bit累加运

算。乘/加单元包含如下几个功能块:♦•个乘法器、一个加法器、无符号/符号输入数控制逻

辑、分数控制逻辑、零检测器、取整器、溢山/饱和一辑和一个16bit折存罂J

乘法器具有两个输入数:X源操作数可以选择暂存器T、数据存储器(DB数据总线)或

累加器A(32〜16);Y源操作数可以选择程序存储器(PB程序总线)、数据存储器(DB数据总

线或CB数据总线)、累加器A(32〜16)或立即数。

加法器的一个输入数来自乘法器的输出结果,另一个来自累加器A或B.

乘/加单元和ALU单元可以并行执行I在单周期内完成乘/累加(MAC)和ALU操作.

注意,乘法器的两个瑜入法的数据来源是有点差别的,X源操作数不能用程序存储器,

而Y源操作数是可以的。

31页再来看CSSU比较/选择/存储单元吧

CSSU是专用于实现Viterbi蝶形运算的硬件单元,完记住这个就可以了。

31页再来看指数编码器

指数编码器是用于专门实现EXP指令的硬件迎元.指数编码器可以在单周期内执行

EXP指令。EXP指令把累加器中数据头的冗余符号批数(减8去除保护忖)放到暂存器T中.

NORM指令再根据T中的值对累加器进行移位,以去除冗余的符号位,即可完成对累加器

中的值进行归一化操作。

由作者的介绍我可以作出这样的推测:指数编码器这个硬件单元还并不是就凫成美厂

指数化的过程,只是其中的一步而已,这一步具体的操作就是图中的绿线部分。

32页接下来是寄存器的映射,当然,我认为最好的处理方式是到网上去下一张表,方

便以后搜索即可。当然也要知道官方文档这部分在哪里。

官方文档的这部分在:

54x系列资料\DatasheeiTMS320vc5402.pdf的27页

0TMR中断屏蔽寄存器

1IFR中断标志寄存器

2-5—测试保留

6STO状态寄存器0

7STI状态寄存器1

8AL累加器A低字(15—0比特)

9AH累加器A高字(31-16比特)

AAG累加器A保护位(39—32比特)

BBL累加器B低字(15—0比特)

CBH累加器B高字(31-16比特)

DBG累加器B保护位(39-32比特)

ET乘法寄存器

FTRN传送寄存器

10-17AR0-AR7箱助寄存器ARnn=0〜7

18SP堆栈指针

19BK循环缓存区大小寄存器

1ABRC块重复计数器

IBRSA块重复开始地址

ICREA块重复结束地址

IDPMST状态寄存器

IEXPCPC扩展寄存器

1E-1F—保留

20BDRRO带缓存串口0数据接收寄存器

21BDXRO带缓存串口。数据发送寄存器

22BSPCO带缓存串口0控制寄存器

23BSPCEO带缓存串口。控制扩展寄存器

24TIM定时器计数器

25PRD定时器周期寄存器

26TCR定时器控制寄存器

27—保留

28SWWSR等待状态产生寄存器

29BSCRBank-switching控制寄存器

2A—保留

2BXSWR扩展等待状态寄存器

2CHPIC主机接口控制寄存器

2D-2F—保留

30TRCNTDM串口数据接收寄存器

31TDXRTDM串口数据发送寄存器

32TSPCTDM串口控制寄存器

33TCSRTDM串口通道选择寄存器

34TRTATDM串口接收发送寄存器

35TRADTDM串口接收地址寄存器

36-37—保留

38AXROABUO发送地址寄存器

39BKXOABUO发送缓冲大小寄存器

3AARROABUO接收地址寄存器

3BBKROAEUO接收缓冲大小寄存器

3CAXR1ABU1发送地址寄存器

3DBKX1ABU1发送缓冲大小寄存器

3EARR1ABU1接收地址寄存器

3FBKR1ABU1接收缓冲大小寄存器

40BDRR1带缓存串口1数据接收寄存器

41BDXR1带缓存串口1数据发送寄存器

42BSPC1带缓存串口1控制寄存器

43BSPCE1带缓存串口1控制扩展寄存器

44-57—保留

58CLKMD时钟方式寄存器

59-5F—保留

33页接下来,终于到重点了,也是我为什么写这个文档的原因,那就是对状态寄存器

STO和ST1的研窕。

首先我要讲算出它们各自的复位值。

»dcc2bin(hex2dec('l800'))

ans=

0001100000000000这是ST0的复位值

»dec2bin(hex2dec(*29OO'))

ans=

1O1(M)IOO(X)(X)()()这是STI的复位值

好,我们来具体看每一位进行了怎样的设置。

0()011000(X)()0000()这是STO的复位值

STO的0到8位:DPData-memorypagepointer.

数据存储器页指针,保存数据存储器正赢就9bit地址,与指令中的低7bit操作

散联合形成一个16bit地址,以进行直接寻址,LD指令可以加载DP位段

ST0中0到8位的默认值都是0,说明基地址是0同时这个说明也告诉我们,数据存储

器的地址生成是9位+7位的生成方式。

注意,是否用DP作为基指勺二还二位有关,即ST1的第14位:

Compilermode.CPLindicateswhichpointerisusedinrelativedirectaddressing:

CPL=0Therelativedirect-addressingmodeusingthedatapagepointer

(DP)isselected.

CPL=1Therelativedirect-addressingmodeusingthestackpointer(SP)is

selected.

再看第9位和第10OVAOVB

复位值显然是两个0,也是符号正常情况的、

要注意,溢出标志位和进位标志位是不一样的。

再看第11位进位标志位C这一位书上讲得严重不清楚。所以我还是决定到官方资料

上去查看一下到底怎么回事。

复位置是1,这个1值应该对初始化没有什么影响的

官方是这样说的:

spru131gTMS320C54xDSPReferenceSetVolume1CPUandPeripherals

Carryissetto1iftheresultofanadditiongeneratesacarry;itisclearedto0ifthe

resul.o..subtractio.generate..borrow.Othcrwise.i.i.rese.afte.a.additio.and

i.i.se.afte..subtraction.excepJb.a.AD.o.SU.wit..l6-bi.shift.I.these

cases,theADDcanonlysetandtheSUBonlyresetthecarrybit,buttheycannot

affec.i.o(herwise.Cair.an.borro.ar.deflne.a.th.32n.bi.positio.an.are

operate.a.th.AL.leve.only.Th.shif.an.rotat.instruction.(ROR.ROL.SFTA,

andSFTL),andtheMIN,MAX,ABS,andNEGinstructionsalsoaffectthisbit.

我把其中的重点抽出来,这个C和我们以前接触到的C是有差别的。具体来说是如下

的情况:

一、加法的情况下

1.加法如果产生了进位,其值为1

2.如果加法没有产生进位,其值为0

可见,每做一次都要进行一次更新,不需要你手动清楚

二、减法的情况下

1.减法如果产生了借位,其值为0

2.如果减法没有产生借位,其值为1

可见,和以前接触到的C位的不同在于,以以前接触到的C位不管是进位和加位都被

置为1,而这里不同,这里是根据加法还是减法来确定的

在移位的情况下,不管怎样,若是加法,是必将其值置为1;若是减法,必然其值置为0,

其实这是显然的,移位必然伴随着进位或借位嘛

再来看第12位TCTest/controlflag位复位值为1

就是根据其状态来控制程序的走向的

Test/contro.flag.T.store.th.result.o.th.arithmeti.logi.uni.(ALU.tes.bi.op-

erations.T.i.affecte.b.th.BIT.BITEBITT.CMPM.CMPR.CMPS.an.SFTC

instructions.Th.statu.(se.o.cleared.o.T.determine.i.th.conditiona.branch.

call,execute,andreturninstructionsexecute.

TC=1ifthefollowingconditionsaretrue:

AbittestedbyBITorBITTisa1.

AcompareconditiontestedbyCMPM,CMPR,orCMPSexistsbetweenadata-

incmoryvalueandanimmediateoperand,AROandanotherauxiliaryregister,oran

accumulatorhighwordandanaccumulatorlowword.

Bit31andbit30ofanaccumulatortestedbySFTChavedifferentvaluesfrom

eachother.

再来看13位到15位ARPAuxiliaryregisterpointer复位值为000

Auxiliar.registe.pointer.T-

patibilitymodeofindirectsingle-operandaddressing(seesection5.5,IndirectAd-

dressing.pag.5-IO).AR.mus.alway.b.se.l.zei*.whe.lh.D5.i.i.slandard

mode(CMPT=0).

具体是这样的,DSP芯片有两种工作模式,一种是兼容模式;另一种是正常模式。模式

的不同导致可以使用的辅助寄存器有所不同。在正常模式下只能使用000号辅助寄存器。在

兼容模式下则能使用0号到7号辅助寄存器。

再去查下辅助寄存器auxiliaryregister有关的知识吧~

33.4.6AuxiliaryRegisters(AR0-AR7)

Theeight16-bitauxiliaiyregisters(AR0-AR7)canbeaccessedbytheCPU

an.modifie.b.th.auxiliar.registe.arithineti.unit.(ARAUs).Th.primary

functionoftheauxiliarj;registersistogenerate16-bitaddressesfordata

space.However.thes.register.ca.als.ac.a.general-purpos.register.or

counters.Frmatio.abou.lh.rol.lh.auxiliar.register.pla.i.data-

memoryaddressing,seesection5.5,IndirectAddressing,on10.

终于把TO寄存器看完了,再来看T1寄存器吧!

首先是0到4位ASM(Accumulatorshiftmode.)位复位值为0000

在上边的问题中我已经见识过它的用处「这里就不多说「需要详细了解时去查帮助

文档即可。

其次是第5位,CMPT值(Compatibilitymode.)复位值为0这个在上边ST0的ARP中

已经见识过了~

其次是第6位FRCT复位值为0一般初始化时都要把这一位置为I,原因见下面的详述

ractiona.mode.Whe.FRC.i.l.th.multiplie.outpu.i.left-shifte.b.on.bi.to

compensateforanextrasignbit

我想不同的是为什么乘法器的结果左移一位才是补足符号位?为什么不是右移一

位?

仔细一想,哦,我知道了,乘法的结果最高两位实际上都是符号位产生的结果,比如二

进制的101*101(乘数和被乘数的最高位都为1,说明是负数与负数相乘)结果为11001,而

真正的结果应该为01吧!左移一位,结果为1001,怎么成-1了呢?这里面的悬机是怎样

的?我觉得我该上网查一查这个问题。

查到了,在谷歌上查到的:

与Ti的DSP芯片相关的资料、定点数,浮点数专题\DSP_FIXED_POINT(重点讲解FRCT

的作用).pdf

TMS320C5509A是16位定点数处理器,其累加器是32位/40位的。在定点处理器中

理浮点数需要对定点数进行定标。下面所说的定点数都是指有符号数。

通常采用的定标有Q15和Q31,分别表示小数点后有二进制15位和二进制16位。

此16位Q15最大能表示的数是1-225,32位Q31最大能表示的数是1-2人(-31)。定

标不同的数可以直接相乘.例如Q13*Q15=Q28o两个定标不同的数不能直接相加,比如

Q13+Q15,通常要将Q15右移两位,转换为Q13后再相加,当然这样损失了两位的精度。

好,下面就是真正的原因了:

虽然DSP的乘法器有17位,但是它的乘操作的乘数和被乘数都是Q15的数.这样结果

为Q30,存储在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论