TMS320C54x系列DSP內(nèi)部結(jié)構(gòu)功能筆記_第1頁
TMS320C54x系列DSP內(nèi)部結(jié)構(gòu)功能筆記_第2頁
TMS320C54x系列DSP內(nèi)部結(jié)構(gòu)功能筆記_第3頁
TMS320C54x系列DSP內(nèi)部結(jié)構(gòu)功能筆記_第4頁
TMS320C54x系列DSP內(nèi)部結(jié)構(gòu)功能筆記_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

大家在閱讀的時候使Word成折疊模式看著會更舒服些。

關(guān)于文檔里邊用到的中文參考資料,附F載地址:

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

刖B

DSP的本質(zhì)還是單片機(jī)-微機(jī),個人認(rèn)為,微機(jī)類芯片,不論是MCUARM還是DSP甚

至是PC上的處理器,我僅在學(xué)習(xí)這類芯片的使用時,首先要學(xué)習(xí)的便是這些芯片的CPU核,

存儲器組織和中斷系統(tǒng)。只有把這幾方面的內(nèi)容掌握之后,你才能說根據(jù)其特點(diǎn)來使用這塊

芯片,Debug時你心中才有數(shù)。至于片上外設(shè),與芯片本身其實(shí)并沒有太大關(guān)系,大可以要使

用時再去學(xué)習(xí),而且不同芯片的外設(shè)其實(shí)還都是相通的。基于此,我把我在學(xué)習(xí)這類芯片時

對于這幾塊的學(xué)習(xí)的筆記摘錄出來(這篇文檔中對是對Ti的TMS320c54x系列的學(xué)習(xí)筆記),

以供大家參考。

我的筆記雖然可能次序,排版,沒有市面上的書本組織得好,但我可以說,我決對是面

面向應(yīng)用來寫的,而不是為了出書來寫的。市面上的技術(shù)類的書,大多數(shù)其實(shí)只是簡單的把

官方的文檔翻譯過來而已、而且在翻譯的過程中還省略了很多細(xì)節(jié),這些細(xì)節(jié)其實(shí)對于我們

的理解和工程開發(fā)都是很重要的,另外很多翻譯還不準(zhǔn)確。在我的筆記中,中文資料我只是

作為一個參考,或者作為一種線索,真正有價值的信息都是來自于我對于官方文檔的學(xué)習(xí)。

每一部分的記錄都是以?個新手的態(tài)度來寫的,這些問題都是新手在學(xué)習(xí)過程中很可能會

遇到或想到的.雖然排版不好,但當(dāng)你遇到相關(guān)問題或想了解某一塊時,把我寫的這個Word

文檔下載下來,然后使用Word文檔的搜索功能搜索自己感興趣的內(nèi)容,相信一定會讓你得

到較為滿意的結(jié)果的。

不僅是DSP芯片方面的知識筆記,在我向信號處理工程師奮斗的路程上,我對我每一

天的學(xué)習(xí)都作了筆記記錄,這些筆記記錄都是面向新手,面向細(xì)節(jié),面向工程的,都是自己

用心的體會。當(dāng)有筆記成熟或自成一塊時,我會把這些筆記都陸續(xù)分享給大家,以供大家在

學(xué)習(xí)或開發(fā)過程的參考,希望能為大家節(jié)省點(diǎn)時間。附?張目前自己的筆記文件夾的圖。

幾十年之后,我的肉體可能已經(jīng)化為泥土或成為其它生物的一部分,所有我擁有的物質(zhì)

都是帶不走的,我能留給世人.后代子孫的也就是自己活著時的思想,精神。用心記錄下自

己活著時可能對后人有用的東西,不為物質(zhì)利益,把它上傳到云端,我想這應(yīng)該是我用心去

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

在寫這些筆記的過程中,我和我的女友虹虹正處在非常困難的時間,說來話長,愿意幫

幫我的大俠請慢慢往下看,小弟先謝過了。

我現(xiàn)在(2012年9月到2013年7月,研一)在北京的電信科學(xué)技術(shù)研究院上研一,即

大唐大信集團(tuán),研二回成都跟著導(dǎo)師學(xué)習(xí)。導(dǎo)師招生的方向?qū)懙氖蔷W(wǎng)絡(luò)通信,但實(shí)際我跟了

他才知道是他要搞的是汽車電子,偏各種工業(yè)控制總線,并不是自己一直想從事的信號處理

的方向。導(dǎo)師給的任務(wù)也與信號處理沒多大關(guān)系,與電信科學(xué)技術(shù)研究院的特色一一通信專

業(yè)就更沒有關(guān)系了。我不是電信科學(xué)技術(shù)研究院的定向生,即以后大唐集團(tuán)沒有義務(wù)接I攵我,

以后還要拿著電信科學(xué)技術(shù)研究院的碩士學(xué)位證到社會上找工作,社會上對電信科學(xué)技術(shù)

研究院的承認(rèn)還在于通信方面,如果我只是按他的要求做,顯然自己在2015年找工作時是

完全處于劣勢的。

作為學(xué)生,導(dǎo)師交代什么任務(wù),我自然是會盡心去做,但這位導(dǎo)師手上真的沒什么資源,

他主要的工作在于當(dāng)A大學(xué)電子信息工程系的院長,沒什么工程資源可以給我用,自己在做

任務(wù)的過程什么都要靠自己墊錢買,自己家里本來就很困難,生活費(fèi)也緊張,我墊得很痛苦,

做起來也是各種資源沒有,

最初選導(dǎo)師時并也不是想選他作導(dǎo)師的,我本來是想選另外一位導(dǎo)師的,那位導(dǎo)師的方

向是自己喜歡的,也有自己的公司,手上資源多。但在可選學(xué)生中,我是復(fù)試中是表現(xiàn)最好

的,這位導(dǎo)師就把我選了,另外那位我想選的導(dǎo)師也不好拒絕我現(xiàn)在導(dǎo)師的要求,因?yàn)槲椰F(xiàn)

在的導(dǎo)師是院長,而我想選的那位導(dǎo)師只是A大學(xué)電子信息工程系的副院長。

這樣的情況促使我除了完成現(xiàn)在導(dǎo)師交給我的任務(wù),我還必須在信號處理,通信這些上

去發(fā)展,我現(xiàn)在除了每天不斷豐富自己在信號處理,通信方面的知識,也在積極尋求能讓自

己實(shí)踐的機(jī)會。導(dǎo)師那里是不能了,我只能到社會上去尋找。2013年3月份,我在網(wǎng)上遇到

了一位成都的工程師,他們公司在成都做無線通信方面的軍品,要用到很多信號處理和通信

方面的知識,他告知我,2013年6月I可成都可以過去面拭一下,感覺可以的話,就可以到他

們公司去兼職。我現(xiàn)在不要求什么報酬,也和那個工程師溝通得比較快樂,特別是技術(shù)方面,

所以去這家公司去做兼職問題也不大。

情況看來并不遭糕,但2013年出了一個變故讓情況有了很大的變化,我的女友,和我是

成都同一所大學(xué)電子信息工程系的同班同學(xué),2012年上當(dāng)年,即大四下期她在成都找到了一

份Layout的工作,就這樣一直在成都工作。

我2012年9月離開成都到北京的電信科學(xué)技術(shù)研究院上研一的理論課程,她一個人留

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

自認(rèn)為一年我們撐得過去,但我們顯然高估了女友耐一人人獨(dú)處的能力,女友從小都在她父

親和哥哥的保護(hù)下長大的,父親和哥哥都是很Men的那種,所以導(dǎo)致她自己一個人是相當(dāng)

不習(xí)慣一個人的獨(dú)處生活.一個人的時候她也極度缺乏安全感。

熬到今年(2013年)三月份,女友實(shí)在是熬不過去了,辭職了,到深圳去找實(shí)習(xí)單位,這

樣導(dǎo)致我們的情況發(fā)生了巨大的變化。

我2013年2月2()號過完寒假回到北京開始研一下半學(xué)期的學(xué)習(xí)。這段時間女友面臨者

三座大山:

①從2012年2月工作到2013年3月女友所在的公司都沒有一點(diǎn)加薪的動靜,其實(shí)女友

也不是那么看重錢的人,只是我的家庭條件實(shí)在不好,家里的錢在成都連給首付的錢都不帔,

所以也只能靠我們倆努力掙房錢,所以自然就希望工資高一點(diǎn)。

②不加薪就算了,2012年12月份還新引進(jìn)了一位大懂管理的管理者,用小學(xué)生式的管

理方法把公司管得一團(tuán)亂.女友感到工作很壓抑。

③2013年2月20號我離開成都到北京上學(xué)后的一段時間,女友是極度不適應(yīng)我不在的

日子,特別希望我問成都咯陪她,但我想我還一個月的時間都沒走到,就沒有坐火車從北京

回成都去陪她,現(xiàn)在真是后悔,如果當(dāng)時自己回去了陪陪她,女友后來也不會做出那樣沖動

的決定。

④我的兼職有著落的時候,女友還沒有做出后來的決定,但是我找的那份兼職工作在離

女友現(xiàn)在所做的公司很遠(yuǎn)、每天坐公交要坐很久。在女友工作的周圍找(高新西區(qū)),又很

難找到跟信號處理與通信有關(guān)的兼職。成都本來兼職實(shí)習(xí)機(jī)會就很少,方向?qū)诰秃懿蝗菀?/p>

了。所以到時候我回成都后,如果我們要想在一起,很有可能又會遇到很多麻煩,說不定又

要搬家,2012年我們在成都就已經(jīng)搬了兩次家,女人都是很討厭搬家這種事的。

以上四點(diǎn)壓在女友的心上,都快使得她崩潰了,在這種情況下,沒和我商量,她辭職了,

并且準(zhǔn)備到深圳去發(fā)展,他哥在深圳那邊工作了兩年,工資還漲的挺快的。

我聽說這個消息后,基于種種考慮,既然事情都已這樣,還是只能讓女友到深圳去工作

了。我想,她哥和嫂子在那邊,他們在一起的話,女友應(yīng)該不會害怕,也不會感到孤單。這兩

天,女友到了深圳,這兩天正在找Layout的工作(還沒找著,有機(jī)會的大俠聯(lián)系我下哈),才

發(fā)現(xiàn)她哥和嫂子每天也很忙,也沒時間照顧她。她現(xiàn)在明白了自己希望的生活也并不是和她

哥和嫂子一起生活,而是希望自己所愛的人和她一起在那邊租個小單間,一起工作,生活,

奮斗。同時也意識到兩年的時間在我們倆的感情她肯定是挺不過去的,她肯定會先放棄我們

這段感情,雖然我們現(xiàn)在都很愛對方,但她相信,兩年的時候,她對我的感情肯定會被磨滅,

這樣的結(jié)果也是她不想發(fā)生的,想到這一點(diǎn)她就非常痛苦。

雖然兩年的時候不會把我對她的感情磨滅,反而我會越來越愛她,但一個巴掌拍不響,

到時候別人乘虛而入,我也是無力回天。所以我現(xiàn)在就是特別想盡量保持住我們的感情。

現(xiàn)在的我要想保持住這份感情,想來想去,好點(diǎn)的辦法就是我在成都上研二,研三的時

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

我希望能在深圳找一份數(shù)字信號處理偏通信方向的兼職工作,按理說,在深圳,找這種

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

特殊要求的。總結(jié)起來,這份兼職工作應(yīng)該有以下特點(diǎn)。

①能允許我將工作帶到成都去做,因?yàn)槲业膶?dǎo)師在成都,所以按理我也應(yīng)該呆在成都,

但我的導(dǎo)師很忙,我們也難得見一面,一般是1個月到2個月才見一面,但還是偶爾要見一

次才行吧!當(dāng)我呆在成都的時候,我也想盡心心力完成貴公司交給我的任務(wù),所以要允許我

將工作帶到成都去做。當(dāng)然當(dāng)工作確實(shí)需要在深圳的公司完成的時候,比如需要借助某些硬

件平臺或儀器調(diào)試測試的時候我也會到深圳來。

②我不要求報酬,也不要求什么福利,只希望公司能幫我報火車票的車費(fèi),我只坐硬坐,

所以還是不貴的,而且誰也不愿意整天坐火車成都-深圳的來回跑的,所以不到非要從深圳

到成都見導(dǎo)師面或從成都到深圳對實(shí)際的工作進(jìn)行測試,調(diào)試的時候,我不會輕易去花費(fèi)這

個火車費(fèi)的,這點(diǎn)請公司放心。

③平時的時間我一周花四天的時間在兼職上,花三天的時間在導(dǎo)師交給的任務(wù)上。

④放暑假和寒假我都是可以每天呆在深圳的,也不要求什么報酬.給點(diǎn)生活費(fèi)就可以

了。

⑤以后畢業(yè)之后我肯定會到深圳工作,所以請公司不用擔(dān)心我以后畢業(yè)不來深圳了。

有機(jī)會的大俠請幫幫我,我真的很想保護(hù)好我和女友的愛情,也真的很想在信號處理與

通信的方向上有長遠(yuǎn)的方展,如果這次能得到某位大俠的幫助,小弟感激不盡。

筆記記錄人:蘇文昊(大地知心)

電信科學(xué)技術(shù)研究院(CATT)2012屆研究生

聯(lián)系方式:

QQ=278742825

Tel:

13693G51619(北京)

1582859433。(成者Q

更多相關(guān)專業(yè)文章請訪問以下百度空間:

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

必須知道這一點(diǎn):

DSP復(fù)位后,首先執(zhí)行FF80H的指令,而FF80~FFFFH是中斷矢量表。具體是這樣的:

在MP/MC管腳置低,這樣上電復(fù)位后,程序自動從內(nèi)部的FF80H(中斷矢量表的起始地址)

地址開始運(yùn)行。在FF80H處,有一條跳轉(zhuǎn)到BOOT程序的指令,開始運(yùn)行內(nèi)部的BOOT程

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

當(dāng)DSP復(fù)位時,若檢測到MP/荻管腳為低,則程序執(zhí)行片內(nèi)FF80h地址處的指令,

此地址處包含一個跳轉(zhuǎn)到F800h的指令,則CPU接著執(zhí)行F800B的引導(dǎo)程序.并將區(qū)分不

同的引導(dǎo)方式,把用戶程序代碼從外設(shè)讀來耕裝后放在用戶指定的地址,然后跳轉(zhuǎn)到用戶

指定的程序入口處,

意外的驚喜:

哇口塞,官方文檔上還有推薦的寄存器初始化順序:

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)

關(guān)于指令集:

20:50:49為了方便不懂指令的查詢,我把《D5P的用系統(tǒng)設(shè)計實(shí)踐+鄭紅等編著.pdf》

末尾附的匯編指令表給做成txt文檔了(后來發(fā)現(xiàn)真的不如文檔:spiul72cTMS320C54xDSP

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

C54x指令集.txt

一、54x系列CPU核

《DSP程序開發(fā):MATLAB調(diào)試及直接目標(biāo)代碼生成》30頁(非電子書頁數(shù))開始有

詳細(xì)敘述

2.1.2CPU核

先總體來看有哪些功能單元。

所有TMS320C54VC54xxDSP的CPU核都包含如下功能單元:40bit整術(shù)邏輯單元

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

40bit加法器)、比較/選擇/存儲單元(CSSU)指數(shù)編碼舞、寄存器和地址產(chǎn)生單元(包含一個

數(shù)據(jù)地址產(chǎn)生單元和一個程序地址產(chǎn)生單元)。

首先來看ALU

ALU執(zhí)行基本的二進(jìn)制補(bǔ)碼港宣和毆邏輯操你ALU的輸入可以為:16bit立

即數(shù)、數(shù)據(jù)存儲器中的16bit字、宿后備豆器中的16bit寧、數(shù)據(jù)存儲器中的兩個16bit字、

數(shù)據(jù)存儲甥中的32bit字或累加器中的40bit字.

當(dāng)ALU的結(jié)果發(fā)生溢出時可以設(shè)置成飽和模式,由狀態(tài)寄存器ST1的OVM位段來設(shè)

?是否使能飽和模式,狀態(tài)寄存器ST0的OVA(結(jié)果放入累加器A中)和OVB(結(jié)果放入累

加器B中)位段對溢出結(jié)果設(shè)置標(biāo)志。

ALU單元有一個進(jìn)位位(C),此位可以被大多數(shù)ALU的算術(shù)指令影響,包括旃轉(zhuǎn)和A

位操作。進(jìn)位位C對擴(kuò)展精度算術(shù)操作的高效計算提供支持。兩個條件探作碼C和NC彳

用于條件跳轉(zhuǎn),調(diào)用、返回和條件計算,RSBX和于BX指令可以用來加載進(jìn)位位。

ALU單元還可以作為兩個16bitALU使用,能夠在單周期內(nèi)同時執(zhí)行兩個16bit操作。

狀態(tài)寄存器STI的C16位段用來設(shè)置此模式。

這里面我有幾個疑問:

1.飽和模式功能的效果和進(jìn)位位所產(chǎn)生的效果有何區(qū)別?

2.條件操作碼C和NC是怎么用的?

也許下面這段話能解釋第I個問題,但是又存在另外的問題~

累加器中的值在存入存儲器之前,還可以對其數(shù)值采取飽和處理,由PMST寄存器的

SST位段設(shè)置是否使能飽和處理.ST1寄存器的SXM設(shè)置館和處理模式,當(dāng)SXMM)時,

如果累加器的40bil數(shù)值超過FFFFFFFFh,則會飽和到FFFFFFFFh:當(dāng)SXM=1時,如果

累加器的40成數(shù)值超過7由1^^,則會飽和到7FFFFFFFh,如果累加器的40b"數(shù)值

小于80000000b,則會飽和到8000OOOOhe,最后存儲相應(yīng)的字(商位字、低位字或整個的

32bit字),而累加相中原來的值不會發(fā)生變化。

要注意,上面的數(shù)值都只有32位哈,還有8位是保護(hù)位的。

我的疑問是:

1.符號位哪去了?

答:當(dāng)SXM=0時,是沒有符號位的;當(dāng)SXM=1時,是有符號位的。

理解了這個,第2問就好理解了。

2.80000000h應(yīng)該是一個很大的數(shù)啊,怎么小于它的數(shù)還要飽和到它?哦,懂了,這個

是用補(bǔ)碼表示的最小負(fù)數(shù),那說明最高是符號位啦!

再來看累加器:

2.累加器A和B

累加器A和B月來存儲ALU或乘/加單元的輸出結(jié)果,它們也可以作為ALU單元的第

二個(Y)輸入數(shù)。累加器A還可以作為乘/加單元的輸入數(shù)。每一累加器都可分為如下三部分:

保護(hù)位(bit39?32)、高位字(bit31?16)和低位字(bitl5R),分別對應(yīng)寄存器AG(BG).AH(BH)

和AL(BL)o

這段話好明白。

利用STH、STL、STLM和SACCD指令或并行存儲指令在數(shù)據(jù)存儲器中保存累加器的

內(nèi)容。其中,STH、SACCD或并行存儲指令用來存儲累加器的高位字(AH或BH),STL指

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

例假定累加器A的值為A=FF43211234h,則帶移位的累加器存儲結(jié)果為:

STHA,8JEMP;TEMP=2112h

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

STLA,8.TEMP:TEMP=3400h

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

美鍵是要把這個例子為結(jié)果為什么是那么多搞清楚?

相關(guān)的指令我作的索引里也沒有,光有下STST也不帶中間的參數(shù),所以我弄不懂

這個簡單撒,全部轉(zhuǎn)化成二進(jìn)制就好看了。

FF43211234

?dec2bin(hex2dec('ff432l1234,))

ans=

1111111101000011001000010001001000110100

?dec2bin(hex2dec('2112,))

ans=

10000100010010

可見,取得是其中我用綠色標(biāo)出的那段,可是綠色前面的那段除去保護(hù)位還有10位啊!

這個就是問題的所在了!

再看第二條吧~

?dec2bin(hex2dec(,ff43'))

11111111010()(X)11

對比:

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

還是不知道怎么移的、這個根本就沒移過啊!

強(qiáng)烈建議明天去下:

[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位,正數(shù)的情況下是向左移8位的。

知道了這個之后,我們再來對比:

?dec2bin(hex2dec('ff43211234,))

ans=

llllilll01000011001000010001001000110100

?dcc2bin(hcx2dcc('2112'))

ans=

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

顯然情況還是不對的,這種情況顯然是向左移了10位的。這個該怎么辦?只好把這個

問題留在這里,等我能寫實(shí)際的匯編程序的時候再寫一個程序測試一下就OK了。

繼續(xù)昨天的,先去把上圖中的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符號擴(kuò)展方式位

打綠顏色的意思是在SXM=I的情況下,最高位39位,即符號位的擴(kuò)展是在執(zhí)行一個操

作之后。這個操作是指超出32位到39位的保護(hù)位邊界的右移。???嗚嗚,自己分

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

后來我查了SXM,覺得應(yīng)該是這么回事,保護(hù)位里的數(shù)字是1還是0應(yīng)該與最高位的

39位一樣,進(jìn)行符號位的擴(kuò)展就是在0到31位最高的0位填符號位。既然保護(hù)位里的數(shù)字

是1還是。應(yīng)該與最高位的39位一樣,那么我進(jìn)很好辦了,我只需要保護(hù)位的數(shù)字跨過保護(hù)

位與有效位的界即可啦。這也是綠色顏中的數(shù)字所述的意思啦!

去查一下SXM吧!

哪里有呢?應(yīng)該是講CPU中的有吧!于是查:

spru131gTMS320C54xDSPReferenceSetVolume1CPUandPeripherals真心沒查到詳

細(xì)介紹。

再查:

spru172cTMS320C54xDSPReferenceSetVolume2MnemonicInstructionSet

spru179cTMS320C54xDSPReferenceSetVolume3AlgebraicInstructionSet

也是真心沒有詳細(xì)介紹!

折狂,難道還有其它資料?仔細(xì)一看《DSP應(yīng)用系統(tǒng)設(shè)計實(shí)踐-C54x》中的參考資料,也

沒有啊其它會有這個介紹的資料了。

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

查到了專門介紹這個的,在第93頁。

SXM1Sign-extensionmode.SXMdetermineswhethersignextensionisperformed:

SXM=0Signextensionissuppressed.

SXM=1DataissignextendedbeforebeingusedbytheALU.

SXMdoesnotaffectthedefinitionsofcertaininstructions:theADDS,LDU,MAC,

andSUBSinstructionssuppresssignextensionregardlessofSXMvalue.The

SSBXandRSBXinstructionssetandresetSXM,respectively.

其實(shí)還是沒說清楚。但是單從這個SXM的功能來說,我的確是知道的,但是結(jié)合具體

的STH我就不太清楚了。哦,我猜大概是這個意思啦。詳見一號書簽

好,我們再回歸我要解決的這條指令執(zhí)行后為什么是那么多的問題。

但是在看這條指令的介紹時,我又發(fā)現(xiàn)了新的問題?即ASM與SHFT有何關(guān)系?我

需要查下ASM。ASM不是指匯編文件的后綴嗎?在這種情況下是何意思呢?

查到了,意思如下:

ASM5-bitaccumulatorshiftmodefieldinSTI(-16ASM15)

可見,它是被存儲在STI寄存器中的偏移量。好了,現(xiàn)在我們回到昨晚問題的記錄處吧!

詳見:二號書簽

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

是運(yùn)算域的意思。從字面意思來講,Smcm是在單數(shù)據(jù)域的操作。而Xmcm是雙數(shù)據(jù)域

的操作?這兩個有何區(qū)另J呢?

查了三個官方文檔都沒查到,都是直接用而已,具體在哪里出現(xiàn)的,看來我只有百度

了。

百度上查了,一個結(jié)果都沒有,但是谷歌一下,卻很多結(jié)果,我在一個PPT上找到了我

要的結(jié)果。

與Ti的DSP芯片相關(guān)的資料'網(wǎng)上所下資料'第3章TMS320c54x的數(shù)據(jù)尋址方式.PPT

這個PPT的第3頁有詳細(xì)介紹,如下:

縮寫符號含義

Smem16位單數(shù)據(jù)存儲器操作數(shù)

Xmem在雙操作數(shù)指令及某些單操作數(shù)指令中所用的16位雙數(shù)據(jù)存儲

器操作數(shù),從DB總線上讀出

Ymem在雙操作數(shù)指令中所用的16位雙數(shù)據(jù)存儲器操作數(shù),從CB總線

上讀出;在讀同時并行寫的指令口表示寫操作數(shù)

dmad16位立即數(shù)一數(shù)據(jù)存儲器地址(。?65535)

pmad16位立即數(shù)一程序存儲器地址(0~65535)

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

sre源累加器(堿8)

dst目的累加器(A或B)

Ik16位長立即數(shù)

由此,我總結(jié)如下,Ti的DSP芯片的匯編指令從操作數(shù)上可分為單操作數(shù)指令和雙操作

數(shù)指令。Smem就是針對單操作數(shù)指令的。而Xmem和Ymem則是針對雙操作指令,其中

Xmemj是在雙操作數(shù)指令及某些單操作數(shù)指令中所用的16位雙數(shù)據(jù)存儲器操作數(shù),從DB

總線上讀出,而Ymem則是在雙操作數(shù)指令中所用的16位雙數(shù)據(jù)存儲器操作數(shù),從CB總

線上讀出;在讀同時并行寫的指令中表示寫操作數(shù)

繼續(xù)看書,關(guān)于54系列DSP的介紹。

31頁說到桶形移位器中有一句話:

桶形移位器的輸出連接到某一ALU的輸入或EB數(shù)據(jù)總線上。為什么是EB數(shù)據(jù)總線

上?

27頁說C50(X)有三套數(shù)據(jù)總線,即CB,DB和EB,前兩個知道是什么東東,EB數(shù)據(jù)總

線是什么東東?

查官方資料,找到了:

54x系列資料\spn1131gTMS320C54xDSPReferenceSetVolume1CPUand

Peripherals.pdf

44頁:

■TheCBandDBcarrytheoperandsthatarereadfromdatamemory.

■TheEBcarriesthedatatobewrittentomemory.

看到了沒有,一個是讀,一個是寫,哈哈!

31頁再來看乘/加單元吧

乘/加單元可以在單周期內(nèi)執(zhí)行一個17bitX17bit二進(jìn)制補(bǔ)碼乘法和一個40bit累加運(yùn)

算。乘/加單元包含如下幾個功能塊:??個乘法器、一個加法器、無符號/符號輸入數(shù)控制邏

輯、分?jǐn)?shù)控制邏輯、零檢測器、取整器、溢山/飽和一輯和一個16bit折存罌J

乘法器具有兩個輸入數(shù):X源操作數(shù)可以選擇暫存器T、數(shù)據(jù)存儲器(DB數(shù)據(jù)總線)或

累加器A(32?16);Y源操作數(shù)可以選擇程序存儲器(PB程序總線)、數(shù)據(jù)存儲器(DB數(shù)據(jù)總

線或CB數(shù)據(jù)總線)、累加器A(32?16)或立即數(shù)。

加法器的一個輸入數(shù)來自乘法器的輸出結(jié)果,另一個來自累加器A或B.

乘/加單元和ALU單元可以并行執(zhí)行I在單周期內(nèi)完成乘/累加(MAC)和ALU操作.

注意,乘法器的兩個瑜入法的數(shù)據(jù)來源是有點(diǎn)差別的,X源操作數(shù)不能用程序存儲器,

而Y源操作數(shù)是可以的。

31頁再來看CSSU比較/選擇/存儲單元吧

CSSU是專用于實(shí)現(xiàn)Viterbi蝶形運(yùn)算的硬件單元,完記住這個就可以了。

31頁再來看指數(shù)編碼器

指數(shù)編碼器是用于專門實(shí)現(xiàn)EXP指令的硬件迎元.指數(shù)編碼器可以在單周期內(nèi)執(zhí)行

EXP指令。EXP指令把累加器中數(shù)據(jù)頭的冗余符號批數(shù)(減8去除保護(hù)忖)放到暫存器T中.

NORM指令再根據(jù)T中的值對累加器進(jìn)行移位,以去除冗余的符號位,即可完成對累加器

中的值進(jìn)行歸一化操作。

由作者的介紹我可以作出這樣的推測:指數(shù)編碼器這個硬件單元還并不是就鳧成美廠

指數(shù)化的過程,只是其中的一步而已,這一步具體的操作就是圖中的綠線部分。

32頁接下來是寄存器的映射,當(dāng)然,我認(rèn)為最好的處理方式是到網(wǎng)上去下一張表,方

便以后搜索即可。當(dāng)然也要知道官方文檔這部分在哪里。

官方文檔的這部分在:

54x系列資料\DatasheeiTMS320vc5402.pdf的27頁

0TMR中斷屏蔽寄存器

1IFR中斷標(biāo)志寄存器

2-5—測試保留

6STO狀態(tài)寄存器0

7STI狀態(tài)寄存器1

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

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

AAG累加器A保護(hù)位(39—32比特)

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

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

DBG累加器B保護(hù)位(39-32比特)

ET乘法寄存器

FTRN傳送寄存器

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

18SP堆棧指針

19BK循環(huán)緩存區(qū)大小寄存器

1ABRC塊重復(fù)計數(shù)器

IBRSA塊重復(fù)開始地址

ICREA塊重復(fù)結(jié)束地址

IDPMST狀態(tài)寄存器

IEXPCPC擴(kuò)展寄存器

1E-1F—保留

20BDRRO帶緩存串口0數(shù)據(jù)接收寄存器

21BDXRO帶緩存串口。數(shù)據(jù)發(fā)送寄存器

22BSPCO帶緩存串口0控制寄存器

23BSPCEO帶緩存串口。控制擴(kuò)展寄存器

24TIM定時器計數(shù)器

25PRD定時器周期寄存器

26TCR定時器控制寄存器

27—保留

28SWWSR等待狀態(tài)產(chǎn)生寄存器

29BSCRBank-switching控制寄存器

2A—保留

2BXSWR擴(kuò)展等待狀態(tài)寄存器

2CHPIC主機(jī)接口控制寄存器

2D-2F—保留

30TRCNTDM串口數(shù)據(jù)接收寄存器

31TDXRTDM串口數(shù)據(jù)發(fā)送寄存器

32TSPCTDM串口控制寄存器

33TCSRTDM串口通道選擇寄存器

34TRTATDM串口接收發(fā)送寄存器

35TRADTDM串口接收地址寄存器

36-37—保留

38AXROABUO發(fā)送地址寄存器

39BKXOABUO發(fā)送緩沖大小寄存器

3AARROABUO接收地址寄存器

3BBKROAEUO接收緩沖大小寄存器

3CAXR1ABU1發(fā)送地址寄存器

3DBKX1ABU1發(fā)送緩沖大小寄存器

3EARR1ABU1接收地址寄存器

3FBKR1ABU1接收緩沖大小寄存器

40BDRR1帶緩存串口1數(shù)據(jù)接收寄存器

41BDXR1帶緩存串口1數(shù)據(jù)發(fā)送寄存器

42BSPC1帶緩存串口1控制寄存器

43BSPCE1帶緩存串口1控制擴(kuò)展寄存器

44-57—保留

58CLKMD時鐘方式寄存器

59-5F—保留

33頁接下來,終于到重點(diǎn)了,也是我為什么寫這個文檔的原因,那就是對狀態(tài)寄存器

STO和ST1的研窕。

首先我要講算出它們各自的復(fù)位值。

?dcc2bin(hex2dec('l800'))

ans=

0001100000000000這是ST0的復(fù)位值

?dec2bin(hex2dec(*29OO'))

ans=

1O1(M)IOO(X)(X)()()這是STI的復(fù)位值

好,我們來具體看每一位進(jìn)行了怎樣的設(shè)置。

0()011000(X)()0000()這是STO的復(fù)位值

STO的0到8位:DPData-memorypagepointer.

數(shù)據(jù)存儲器頁指針,保存數(shù)據(jù)存儲器正贏就9bit地址,與指令中的低7bit操作

散聯(lián)合形成一個16bit地址,以進(jìn)行直接尋址,LD指令可以加載DP位段

ST0中0到8位的默認(rèn)值都是0,說明基地址是0同時這個說明也告訴我們,數(shù)據(jù)存儲

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

注意,是否用DP作為基指勺二還二位有關(guān),即ST1的第14位:

Compilermode.CPLindicateswhichpointerisusedinrelativedirectaddressing:

CPL=0Therelativedirect-addressingmodeusingthedatapagepointer

(DP)isselected.

CPL=1Therelativedirect-addressingmodeusingthestackpointer(SP)is

selected.

再看第9位和第10OVAOVB

復(fù)位值顯然是兩個0,也是符號正常情況的、

要注意,溢出標(biāo)志位和進(jìn)位標(biāo)志位是不一樣的。

再看第11位進(jìn)位標(biāo)志位C這一位書上講得嚴(yán)重不清楚。所以我還是決定到官方資料

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

復(fù)位置是1,這個1值應(yīng)該對初始化沒有什么影響的

官方是這樣說的:

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.

我把其中的重點(diǎn)抽出來,這個C和我們以前接觸到的C是有差別的。具體來說是如下

的情況:

一、加法的情況下

1.加法如果產(chǎn)生了進(jìn)位,其值為1

2.如果加法沒有產(chǎn)生進(jìn)位,其值為0

可見,每做一次都要進(jìn)行一次更新,不需要你手動清楚

二、減法的情況下

1.減法如果產(chǎn)生了借位,其值為0

2.如果減法沒有產(chǎn)生借位,其值為1

可見,和以前接觸到的C位的不同在于,以以前接觸到的C位不管是進(jìn)位和加位都被

置為1,而這里不同,這里是根據(jù)加法還是減法來確定的

在移位的情況下,不管怎樣,若是加法,是必將其值置為1;若是減法,必然其值置為0,

其實(shí)這是顯然的,移位必然伴隨著進(jìn)位或借位嘛

再來看第12位TCTest/controlflag位復(fù)位值為1

就是根據(jù)其狀態(tài)來控制程序的走向的

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復(fù)位值為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芯片有兩種工作模式,一種是兼容模式;另一種是正常模式。模式

的不同導(dǎo)致可以使用的輔助寄存器有所不同。在正常模式下只能使用000號輔助寄存器。在

兼容模式下則能使用0號到7號輔助寄存器。

再去查下輔助寄存器auxiliaryregister有關(guān)的知識吧~

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.)位復(fù)位值為0000

在上邊的問題中我已經(jīng)見識過它的用處「這里就不多說「需要詳細(xì)了解時去查幫助

文檔即可。

其次是第5位,CMPT值(Compatibilitymode.)復(fù)位值為0這個在上邊ST0的ARP中

已經(jīng)見識過了~

其次是第6位FRCT復(fù)位值為0一般初始化時都要把這一位置為I,原因見下面的詳述

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

compensateforanextrasignbit

我想不同的是為什么乘法器的結(jié)果左移一位才是補(bǔ)足符號位?為什么不是右移一

位?

仔細(xì)一想,哦,我知道了,乘法的結(jié)果最高兩位實(shí)際上都是符號位產(chǎn)生的結(jié)果,比如二

進(jìn)制的101*101(乘數(shù)和被乘數(shù)的最高位都為1,說明是負(fù)數(shù)與負(fù)數(shù)相乘)結(jié)果為11001,而

真正的結(jié)果應(yīng)該為01吧!左移一位,結(jié)果為1001,怎么成-1了呢?這里面的懸機(jī)是怎樣

的?我覺得我該上網(wǎng)查一查這個問題。

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

與Ti的DSP芯片相關(guān)的資料、定點(diǎn)數(shù),浮點(diǎn)數(shù)專題\DSP_FIXED_POINT(重點(diǎn)講解FRCT

的作用).pdf

TMS320C5509A是16位定點(diǎn)數(shù)處理器,其累加器是32位/40位的。在定點(diǎn)處理器中

理浮點(diǎn)數(shù)需要對定點(diǎn)數(shù)進(jìn)行定標(biāo)。下面所說的定點(diǎn)數(shù)都是指有符號數(shù)。

通常采用的定標(biāo)有Q15和Q31,分別表示小數(shù)點(diǎn)后有二進(jìn)制15位和二進(jìn)制16位。

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

標(biāo)不同的數(shù)可以直接相乘.例如Q13*Q15=Q28o兩個定標(biāo)不同的數(shù)不能直接相加,比如

Q13+Q15,通常要將Q15右移兩位,轉(zhuǎn)換為Q13后再相加,當(dāng)然這樣損失了兩位的精度。

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

雖然DSP的乘法器有17位,但是它的乘操作的乘數(shù)和被乘數(shù)都是Q15的數(shù).這樣結(jié)果

為Q30,存儲在

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論