導航:首頁 > 研究方法 > dsp逆向分析寄存器的方法

dsp逆向分析寄存器的方法

發布時間:2022-06-28 18:15:17

Ⅰ 在DSP中如何打開中斷使能寄存器

第一:不同的外設有各自不同的中斷控制寄存器,可以對該設備對應的中斷進行使能或者禁止!請查閱相關外設說明。第二:中斷在PIE寄存器里需要進行使能,共12組。在這12組里找到你所使用的中斷進行使能。第三:有對中斷進行全局使能或者禁止的命令。基本就在這三個地方進行設置!

Ⅱ dsp中的FFT是如何實現信號的倒序輸入

DSP處理器與通用處理器的比較

考慮一個數字信號處理的實例,比如有限沖擊響應濾波器(FIR)。用數學語言來說,FIR濾波器是做一系列的點積。取一個輸入量和一個序數向量,在系數和輸入樣本的滑動窗口間作乘法,然後將所有的乘積加起來,形成一個輸出樣本。

類似的運算在數字信號處理過程中大量地重復發生,使得為此設計的器件必須提供專門的支持,促成了了DSP器件與通用處理器(GPP)的分流:

1 對密集的乘法運算的支持

GPP不是設計來做密集乘法任務的,即使是一些現代的GPP,也要求多個指令周期來做一次乘法。而DSP處理器使用專門的硬體來實現單周期乘法。DSP處理器還增加了累加器寄存器來處理多個乘積的和。累加器寄存器通常比其他寄存器寬,增加稱為結果bits的額外bits來避免溢出。
同時,為了充分體現專門的乘法-累加硬體的好處,幾乎所有的DSP的指令集都包含有顯式的MAC指令。

2 存儲器結構

傳統上,GPP使用馮.諾依曼存儲器結構。這種結構中,只有一個存儲器空間通過一組匯流排(一個地址匯流排和一個數據匯流排)連接到處理器核。通常,做一次乘法會發生4次存儲器訪問,用掉至少四個指令周期。

大多數DSP採用了哈佛結構,將存儲器空間劃分成兩個,分別存儲程序和數據。它們有兩組匯流排連接到處理器核,允許同時對它們進行訪問。這種安排將處理器存貯器的帶寬加倍,更重要的是同時為處理器核提供數據與指令。在這種布局下,DSP得以實現單周期的MAC指令。

還有一個問題,即現在典型的高性能GPP實際上已包含兩個片內高速緩存,一個是數據,一個是指令,它們直接連接到處理器核,以加快運行時的訪問速度。從物理上說,這種片內的雙存儲器和匯流排的結構幾乎與哈佛結構的一樣了。然而從邏輯上說,兩者還是有重要的區別。

GPP使用控制邏輯來決定哪些數據和指令字存儲在片內的高速緩存里,其程序員並不加以指定(也可能根本不知道)。與此相反,DSP使用多個片內存儲器和多組匯流排來保證每個指令周期內存儲器的多次訪問。在使用DSP時,程序員要明確地控制哪些數據和指令要存儲在片內存儲器中。程序員在寫程序時,必須保證處理器能夠有效地使用其雙匯流排。

此外,DSP處理器幾乎都不具備數據高速緩存。這是因為DSP的典型數據是數據流。也就是說,DSP處理器對每個數據樣本做計算後,就丟棄了,幾乎不再重復使用。

3 零開銷循環

如果了解到DSP演算法的一個共同的特點,即大多數的處理時間是花在執行較小的循環上,也就容易理解,為什麼大多數的DSP都有專門的硬體,用於零開銷循環。所謂零開銷循環是指處理器在執行循環時,不用花時間去檢查循環計數器的值、條件轉移到循環的頂部、將循環計數器減1。

與此相反,GPP的循環使用軟體來實現。某些高性能的GPP使用轉移預報硬體,幾乎達到與硬體支持的零開銷循環同樣的效果。

4 定點計算

大多數DSP使用定點計算,而不是使用浮點。雖然DSP的應用必須十分注意數字的精確,用浮點來做應該容易的多,但是對DSP來說,廉價也是非常重要的。定點機器比起相應的浮點機器來要便宜(而且更快)。為了不使用浮點機器而又保證數字的准確,DSP處理器在指令集和硬體方面都支持飽和計算、舍入和移位。

5 專門的定址方式

DSP處理器往往都支持專門的定址模式,它們對通常的信號處理操作和演算法是很有用的。例如,模塊(循環)定址(對實現數字濾波器延時線很有用)、位倒序定址(對FFT很有用)。這些非常專門的定址模式在GPP中是不常使用的,只有用軟體來實現。

6 執行時間的預測

大多數的DSP應用(如蜂窩電話和數據機)都是嚴格的實時應用,所有的處理必須在指定的時間內完成。這就要求程序員准確地確定每個樣本需要多少處理時間,或者,至少要知道,在最壞的情況下,需要多少時間。

如果打算用低成本的GPP去完成實時信號處理的任務,執行時間的預測大概不會成為什麼問題,應為低成本GPP具有相對直接的結構,比較容易預測執行時間。然而,大多數實時DSP應用所要求的處理能力是低成本GPP所不能提供的。

這時候,DSP對高性能GPP的優勢在於,即便是使用了高速緩存的DSP,哪些指令會放進去也是由程序員(而不是處理器)來決定的,因此很容易判斷指令是從高速緩存還是從存儲器中讀取。DSP一般不使用動態特性,如轉移預測和推理執行等。因此,由一段給定的代碼來預測所要求的執行時間是完全直截了當的。從而使程序員得以確定晶元的性能限制。

Ⅲ dsp中有句話」存儲器映射寄存器」是什麼意思

dsp中有句話「存儲器映射寄存器」,英語是
memory
mapped
register
不過這個東西並非dsp獨有,單片機和其他32位嵌入式控制器都有此概念。
需要注意的是英語的表述,其實漢語的翻譯是有些問題的。memory
mapped
是用來形容register的。因此,正確的翻譯應該是-存儲器映射的寄存器。一字之差,就有很大區別。因為」存儲器映射寄存器「讓人感覺是一種操作,象一個動詞。其實應該是一個名詞,就是一個寄存器,只是這個寄存器的地址被存儲器映射了。
首先是寄存器的概念,寄存器不是存儲器(內存),存儲器是指通用的ram,寄存器則是有專門用途的
映射存儲寄存器
ram。寄存器不能隨便寫數據。同時位置(硬體上)與通用的ram(存儲器)不在一起。
存儲器映射,就是把存儲器的地址給寄存器用,你要找這個寄存器,就用這個存儲器地址,然後單片機會幫你」映射「到你想找的寄存器。
物理上這個寄存器不屬於內存(memory),但在邏輯地址上它屬於內存。這樣做的好處應該是能夠用要使用訪問內存的指令訪問寄存器,使操作方式多樣化,同時整個存儲系統的地址也相對統一。

Ⅳ dsp寄存器溢出後寄存器的值是多少

根據數字信號處理演算法的特點,對晶元內部結構進行了特定的優化;它主要應用是實時地實現各種數字信號處理演算法。其中濾波運算的特點是大量的乘加運算;頻繁的訪問存儲器;FFT運算的特點是碟形運算,碼位倒置以及大量的乘加、減運算,其中樣本按碼位倒置的順序排列,DSP處理器應具有對應的定址方式,否則讀取樣本將花費大量的時間頻繁的訪問存儲器,讀取系數和樣本,保存結果。大多數信號處理演算法都是由濾波、變換、卷積和相關等一些基本的運算構成;
很多信號處理任務都要求在限定的時間內完成,即是信號處理的實時性要求。

Ⅳ DSP 如何將寄存器變數定位到存儲器物理地址

將寄存器變數定位到存儲器物理地址方法如下
unsigned char temp_A@0x00; //定義無符號變數temp_A,強制其地址為0x00
unsigned char temp_B@0x100; //定義無符號變數temp_B,強制其地址為0x100
@tiny unsigned char temp_C; //定義無符號變數temp_C,由編譯器自動在地址小於0x100的RAM中為其分配一個地址
@near unsigned char temp_D; //定義無符號變數temp_D,由編譯器自動在地址大於0xFF的RAM中為其分配一個地址
另外也可以採用偽指令"pragma"將函數或者變數定義到指定的section中,例如:
#pragma section [name] // 將下面定義的未初始化變數定義到.name section中
Unsigned char data1;
Unsigned int data2;

Ⅵ DSP學習入門

DSP學習入門:
DSP的特點 :
對於沒有使用過DSP的初學者來說,第一個困惑就是DSP其他的嵌入式處理器究竟有什麼不同,它和單片機,ARM有什麼區別.事實上,DSP也是一種嵌入式處理器,它完全可以完成單片機的功能.。
唯一的重要的區別在於DSP支持單時鍾周期的"乘-加"運算.這幾乎是所有廠家的DSP晶元的一個共有特徵.幾乎所有的DSP處理器的指令集中都會有一條MAC指令,這條指令可以把兩個操作數從RAM中取出相乘,然後加到一個累加器中,所有這些操作都在一個時鍾周期內完成.擁有這樣一條指令的處理器就具備了
DSP功能:
具有這條指令就稱之為數字信號處理器的原因在於,所有的數字信號處理演算法中最為常見的算術操作就是"乘-加".這是因為數字信號處理中大量使用了內積,或稱"點積"的運算.無論是FIR濾波,FFT,信號相關,數字混頻,下變頻.所有這些數字信號處理的運算經常是將輸入信號與一個系數表或者與一個本地參考信號相乘然後積分(累加),這就表現為將兩個向量(或稱序列)進行點積,在編程上就變成將輸入的采樣放在一個循環buffer里,本地的系數表或參考信號也放在一個buffer里,然後使用兩個指針指向這兩個buffer.這樣就可以在一個loop裡面使用一個MAC指令將二者進行點積運算.這樣的點積運算對與處理器來說是最快的,因為僅需一個始終周期就可以完成一次乘加.
了解DSP的這一特點後,當我們設計一個嵌入式系統時,首先要考慮處理器所實現的演算法中是否有點積運算,即是否要經常進行兩個數組的乘加,(記住數字濾波,相關等都表現為兩個數組的點積)如果有的話,每秒要做多少次,這樣就能夠決定是否採用DSP,採用多高性能的DSP了.
浮點與定點 :
浮點與定點也是經常是初學者困惑的問題,在選擇DSP器件的時候,是採用浮點還是採用定點,如果用定點是16位還是32位?其實這個問題和你的演算法所要求的信號的動態范圍有關.
定點的計算不過是把一個數據當作整數來處理,通常AD采樣來的都是整數,這個數相對於真實的模擬信號有一個刻度因子,大家都知道用一個16位的AD去采樣一個0到5V的信號,那麼AD輸出的整數除以2^16再乘以5V就是對應的電壓.在定點DSP中是直接對這個16位的采樣進行處理,並不將它轉換成以小數表示的電壓,因為定點DSP無法以足夠的精度表示一個小數,它只能對整數進行計算.
而浮點DSP的優勢在於它可以把這個采樣得到的整數轉換成小數表示的電壓,並不損失精度(這個小數用科學記數法來表示),原因在於科學記數法可以表示很大的動態范圍的一個信號,以IEEE754浮點數為例,
單精度浮點格式: [31] 1位符號 [30-23]8位指數 [22-00]23位小數
這樣的能表示的最小的數是+-2^-149,最大的數是+-(2-2^23)*2^127.動態范圍為20*log(最大的數/最小的數)=1667.6dB 這樣大的動態范圍使得我們在編程的時候幾乎不必考慮乘法和累加的溢出,而如果使用定點處理器編程,對計算結果進行舍入和移位則是家常便飯,這在一定程度上會損失是精度.原因在於定點處理處理的信號的動態范圍有限,比如16位定點DSP,可以表示整數范圍為1-65536,其動態范圍為20*log(65536/1)=96dB.對於32定點DSP,動態范圍為20*log(2^32/1)=192dB,遠小於32位ieee浮點數的1667.6dB,但是,實際上192dB對絕大多數應用所處理的信號已經足夠了。
由於AD轉換器的位數限制,一般輸入信號的動態范圍都比較小,但在DSP的信號處理中,由於點積運算會使中間節點信號的動態范圍增加,所以主要考慮信號處理流程中中間結果的動態范圍,以及演算法對中間結果的精度要求,來選擇相應的DSP.另外就是浮點的DSP更易於編程,定點DSP編程中程序員要不斷調整中間結果的P,Q值,實際就是不斷對中間結果進行移位調整和舍入.。
DSP與RTOS:
TI的CCS提供BIOS,ADI的VDSP提供VDK,都是基於各自DSP的嵌入式多任務內核.DSP編程可以用單用C,也可以用匯編,或者二者結合,一般軟體編譯工具都提供了很好的支持.我不想在這里多說BIOS,VDK怎麼用這在相應的文檔里說的很詳細.我想給初學者說說DSP的RTOS原理.用短短幾段話說這個復雜的東西也是挑戰!
其實DSP的RTOS和基於其他處理器的通用RTOS沒什麼大的區別,現在幾乎人人皆知的uCOSii也很容易移植到DSP上來,只要把寄存器保存與恢復部分和堆棧部分改改就可以.一般在用BIOS和VDK之前,先看看操作系統原理的書比較好.uCOS那本書也不錯.
BIOS和VDK其實是一個RTOS內核函數集,DSP的應用程序會和這些函數連接成一個可執行文件.其實實現一個簡單的多任務內核並不復雜,首先定義好內核的各種數據結構,然後寫一個scheler函數,功能是從所有就緒任務中(通過查找就緒任務隊列或就緒任務表)找出優先順序最高的任務,並恢復其執行.然後在此基礎上寫幾個用於任務間通信的函數就可以了,比如event,message box,等等.
RTOS一般採用搶先式的任務調度方式,舉例說當任務A等待的資源available的時候,DSP會執行一個任務調度函數scheler,這個函數會檢查當前任務是否比任務A優先順序低,如果是的話,就會把它當前掛起,然後把任務A保存在堆棧里寄存器值全部pop到DSP處理器中(這就是所謂的任務現場恢復).接著scheler還會把從堆棧中取出任務A掛起時的程序執行的地址,pop到PC,使任務A繼續執行.這樣當前任務就被任務A搶先了.
使用RTOS之後,每個任務都會有一個主函數,這個函數的起始地址就是該任務的入口.一般每個任務的主函數里有一個死循環,這個循環使該任務周期地執行,完成一部分演算法模塊的功能,其實這個函數跟普通函數沒任何區別,類似於C語言中的main函數.一個任務創建的時候,RTOS會把這個函數入口地址壓入任務的堆棧中,好象這個函數(任務)剛發生過一次中斷一樣.一旦這個新創建任務的優先順序在就緒隊列中是最高的,RTOS就會從其堆棧中彈出其入口地址開始執行.
有一個疑問是,不使用RTOS,而是簡單使用一個主循環在程序中調用各個函數模塊,一樣可以實現軟體的調度執行.那麼,這種常用的方法與使用RTOS相比有什麼區別呢?其實,使用主循環的方法不過是一種沒有優先順序的順序執行的調度策略而已.這種方法的缺點在於,主循環中調用的各個函數是順序執行的,那麼,即使是一個無關緊要的函數(比如閃爍一個LED),只要他不主動返回,也會一直執行直到結束,這時,如果發生一個重要的事件(比如DMA buffer full 中斷),就會得不到及時的響應和處理,只能等到那個閃爍LED的函數執行完畢.這樣就使整個DSP處理的優先次序十分不合理.而在使用了RTOS之後,當一個重要的事件發生時,中斷處理會進入RTOS,並調用scheler,這時scheler 會讓處理這一事件的任務搶佔DSP處理器(因為它的優先順序高).而哪個閃爍LED任務即使晚執行幾毫秒都沒任何影響.這樣整個DSP的調度策略就十分合理。

Ⅶ DSP的寄存器定義

你把游標放在gpiodataregs上,然後地下就會出現一個小框,點那個小框就轉到定義了,好像叫system control文件

Ⅷ 三角波比較DSP軟體實現方法 epwm寄存器怎麼設

參考TI的datasheet或者參考國內學者翻譯過來的一些DSP教程。一般順序是:先配置時間基準TB寄存器;再配置控制寄存器CTR;再配置PWM脈沖生成方式,CMPA和CMPB;然後配置死區設置DB,最後在配置終端觸發方式。

Ⅸ C語言中結構體和共用體怎樣運用在DSP的寄存器定義上

cmd配置文

在軟體上的運用主要是使用了位定義和寄存器文件結構方法

而寄存器文件結構的空間分配就壓使用#gragma DATA_SECTTION(symbol,"section name")
在C++語言中編程方式為:
#gragma DATA_SECTION("section name")

共同體的使用
位區定義方法允許用戶直接對寄存器的某位進行操作,但有時還是需要將整個寄存器作為一個值操作。
為此引入共同體,使寄存器的各位可以作為一個整體操作。

位區和寄存器文件結構方法有以下優點:
1TI公司為用戶提供寫好的文件結構和位區定義,可以在其網站下載
2使用位區方便編寫代碼,可讀性強,易於升級。
3位區定義可以充分利用CCS編譯器的自動代碼輸入功能,方便用戶輸入代碼。
4方便CCS的Watch窗口觀察變數。

還有位區的代碼大小以及運行效率說不完了等等

Ⅹ 在CCS中如何查看DSP片上外設的寄存器內容啊

復制寄存器,然後右鍵「Add to watch window」,模擬即可查看

閱讀全文

與dsp逆向分析寄存器的方法相關的資料

熱點內容
智能化方法如何幫助開發軟體 瀏覽:360
卷閘門的開關安裝方法 瀏覽:793
汽車紐扣電池的安裝方法 瀏覽:890
鬥地主快速學會的方法 瀏覽:877
鋼梁安裝方法如何做撓度實驗 瀏覽:226
砂礫壓實度檢測方法 瀏覽:898
黑底白字解決方法 瀏覽:741
杭州電腦數據恢復方法 瀏覽:491
皮沙發的異味處理方法視頻 瀏覽:626
快速緩解頭痛的6個方法圖片 瀏覽:662
清除體內的氣有哪些方法 瀏覽:415
老人如何減肥的最好方法 瀏覽:886
面部神經痛的症狀和治療方法 瀏覽:611
無錫哪裡有臭氧注射治療方法 瀏覽:358
如何預防溺水的方法有多少種 瀏覽:675
dds精華使用方法 瀏覽:489
自動血糖儀的使用方法圖片 瀏覽:30
如何不用手指指人的三個方法 瀏覽:54
沉積學研究的基本方法 瀏覽:985
基金凈資產的計算方法在哪裡約定 瀏覽:400