第一篇:DSP錯誤總結!大全
1.warning: entry point symbol _c_int00 undefined 使用C寫DSP時,在rts.lib庫中定義了入口地址:_c_int00 而使用匯編語言編程,就不用包括rts.lib庫,所以入口地址及其標號可以由人工指定。而使用C時,就不同了,必須從rts.lib定義的這個入口_c_int00入口,是約定的。
The –c and cr options cause the linker to use linking conventions that are required by the C compiler.”
其實在匯編語句中也可以不用_c_int00來定義程序入口,只要把編譯器選項-c去掉,用-e 選項來定義你想要的程序入口地址。這個可在CMD文件里加-c。
這個錯誤是沒有加庫文件,你可以project view 右鍵加入,也可以在project->build options->Linker->libraries中加入../../lib/cls/lib/(搜索路徑)還要加上庫名cslDM642.lib;rts6400.lib分號隔開。
2.Error: Illegal opcode at pc = 0x00000190
我第一次遇到這種錯誤,因為B跳轉(分支)指令要有五個周期的延時,所以加上NOP 5就好了。
b.s2 b3;NOP 5
3.error: can't allocate.text, size 00006e40(page 0)in LP(avail: 00001000)>> error: errors in input'./Debug/MyAsmTest.out' not built
解決方法:1.是庫的問題 2.把你的匯編程序和C程序起不同的名字。
6.creating output section.const without SECTIONS specification >> warning: creating output section.switch without SECTIONS specification
>> warning: creating output section.sysmem without SECTIONS specification、Printf()需要上面的段.sysmem 段??
前十個參數將被從左到右依次放入寄存器A4、B4、A6、B6、A8、B8、A10、B10、A12和B12。返回值是整型或32位的浮點型,則放在寄存器A4中返回;假如返回值是雙精度或是長雙精度型,則放在A5:A4中返回;假如返回值是一個結構類型,則將其結構的地址放在A3中返回。
最近總是出現相同的錯誤!唉!
1.C運行庫文件rtsXX.lib提供了C函數,及初始化函數c_int00().程序寫進EPROM上電后直接運行,就必須包含Vectors.asm文件,必須被.cmd文件分配到0地址。
DSP復位后,跳轉到c_int00(),在它之中完成初始化堆棧和頁面指針,全局變量等,然后再調用main()函數。
2.連接器-c選項用于設置運行時初始化全局變量(Run-time-autoinitalization),-cr選項用于設置在加載時初始化(Load-time initialization)。編譯器將C中的初始化的全局/靜態變量的初始化放在.cinit段中。但實際的全局/靜態變量占有的地址空間在.bss段。3.大數組far b[1024] 放在.far段,.bss放小變量。
4.restict 標明一個指針是指向一個特定對象的惟一的指針。5.intrinsics定義內聯函數。內聯函數前面加_ 6.軟件流水:-o2,-o3時會使用軟件流水。
Prolog(軟件流水填充),epilog(軟件流水排空)
錯誤:undefined first referenced symbol in file
-------------------------_dopt C://CCStudio_v3.3//MyProjects//dianji//Debug//dianji.obj 改法一種是庫沒有加對,一種是匯編文件和C文件重名字了。
程序優化: 3個階段,1.不考慮相關知識,直接寫C語言程序。2.利用C優化方法優化C程序。
3.從C中抽出對性能影響較大的程序段,改寫成匯編程序。
查看指令運行時間,clock()函數 #include
Clock_t start ,stop,overhead;Start = clock();Stop = clock();
Overhead = stop – start;
Start = clock();函數
Stop = clock();
Printf(%d,start-stop-overhead);
-g/-s :-g 使能符號和匯編調試;-s
第二篇:DSP各種知識點總結
DSP芯片的特點:(1).哈佛結構(程序空間和數據空間分開)(2).多總線結構.(3)流水線結構(取指、譯碼、譯碼、尋址、讀數、執行)(4)多處理單元.(5)特殊的DSP指令(6).指令周期短.(7)運算精度高.(8)硬件配置強.(9)DSP最重要的特點: 特殊的內部結構、強大的信息處理能力及較高的運行速度。2 三類TMS320:(1)TMS320C2000適用于控制領域(2)TMS320C5000應用于通信領域(3)TMS320C6000應用于圖像處理 DSP總線結構: C54x片內有8條16位主總線:4條程序/數據總線和4條對應的地址總線。1條程序總線(PB):傳送自程序儲存器的指令代碼和立即操作數。3條數據總線(CB、DB、EB):CB和EB傳送從數據存儲器讀出的操作數;EB傳送寫到存儲器中的數據。4條地址總線(PAB、CAB、DAB、EAB)傳送相應指令所需要的代碼 4存儲器的分類: 64k字的程序存儲空間、64K字的數據存儲空間和64K字的I/O空間(執行4次存儲器操作、1次取指、2次讀操作數和一次寫操作數。
5存儲器空間分配 片內存儲器的形式有DARAM、SARAM、ROM。RAM安排到數據存儲空間、ROM構成程序存儲空間。(1)程序空間:MP/MC=1
40000H~FFFFH 片外
MP/MC=0 4000H~EDDDH 片外
FF00H~FFFFH 片內 OVLY=1 0000H~007FH 保留
0080H~007FH 片內
OVLY=0 0000H~3FFFH片外(2)數據空間:DROM=1 F000H~F3FFH 只讀空間 FF00H~FFFH保留
DROM=0 F000H~FEFFH 片外
6數據尋址方式
(1)立即尋址(2)絕對尋址<兩位>(3)累加器尋址(4)直接尋址@<包換數據存儲器地址的低7位>優點:每條指令只需一個字(5)間接尋址*按照存放某個輔助寄存器中的16位地址尋址的AR0~AR7(7)儲存器映像寄存器尋址(8)堆棧尋址
7尋址縮寫語 Smem:16位單尋址操作數 Xmem Ymem 16位雙
dmad pmad PA16位立即數(0-65535)scr源累加器 dst目的累加器 lk 16位長立即數
8狀態寄存器ST0 15~13ARP輔助寄存器指針 12TC測試標志位 11C進位位 10累積起A的一出標志位OVA 9OVB 8~0DP數據存儲器頁指針
9狀態寄存器ST1 CPL:直接尋址編輯方式
INTM =0開放全部可屏蔽中斷 =1關閉
C16 雙16位算數運算方式
10定點DSP 浮點DSP:定點DSP能直接進行浮點運算,一次完成是用硬件完成的,而浮點需要程序輔助。
11重復操作:重復執行單條指令,程序塊重復操作(可以響應中斷)12復位操作:處理器從FF80h處取指 13中斷:兩大類:(1)可屏蔽:立即響應(2)非屏蔽:(滿足下列條件才能響應)①優先級別最高②狀態寄存器ST1中的INTM位為0③中斷屏蔽寄存器IMR中的相應位為1 三個階段:(1)接受中斷請求(2)響應中斷(3)執行中斷服務程序
14復位的三種方式:上電復位,手動復位,軟件復位
15常用匯編命令:.bss為未初始化的變量保留空間;usect在一個未初始化的有命名的段中為變量保留空間;.data通常包含了初始化的數據;.sect定義已初始化的帶命名段,其后的數據存入該段;.text該段包含了可執行的代碼;title.接在后面的是程序名;int用來設置一個或多個16位無符號整型常數;word用來設置一個或多個16位帶符號整型常數 16.DSP系統的特點:(1)精度高、抗干擾能力強,穩定性好。(2)編程方便、易于實現復雜算法(含自適應算法)。(3)可程控。(4)接口簡單。(5)集成方便。
17.CPU部分:①先進的多總線結構(1條程序總線、3條數據總線和4條地址總線)。②位算術邏輯運算單元(ALU),包括1個40位桶形移位寄存器和2個獨立的40位累加器。③17×17位并行乘法器,與40位專用加法器相連,用于非流水線式單周期乘法/累加(MAC)運算。④比較、選擇、存儲單元(CSSU):用于加法/比較選擇。⑤指數編碼器:可以在單個周期內計算40位累加器中數值的指數。⑥雙地址生成器:包括8個輔助寄存器和2個輔助寄存器算術運算單元(ARAU)存儲器空間
192 K字可尋址存儲空間:64 K字程序存儲空間、64 K字數據存儲空間及64 K字I/O空間 ⑦功能結構上分:運算部件和控制部件 18.累加器:目的寄存器 用來存放從ALU或乘法器/加法器單元輸出的數據。19.桶形移位器:立即數;asm,T低6位
20.TMS320C54X有兩個通用引腳bio監視外部 xf 握手信號
21.COFF3.公共目標文件格式——COFF COFF的核心概念:使用代碼塊(段)和數據塊(段)編程,而不是指令或數據簡單的順序編寫。段的定義:就是在編寫匯編語言源程序時,采用的代碼塊或數據塊,它占據存儲器的某個連續空間。21.COFF包含的三個缺省段 1text 2data 3bss 22.DSP指令系統:助記符和代數
23.Dsp開發工具:代碼生成工具和代碼調節工具 24.Dsp按照用途分類:通用型和專用型
AR3+是加2或者減2 25.1狹義理解為數字信號處理器,廣義理解為數字信號處理方法
26.程序計數器的直可通過復位操作、順序執行指令、分支轉移、累加器轉移、塊重復、子程序調用、從累加器調用子程序、中斷操作改變
27.MMR寫操作流水線沖突時,采用推薦指令和插入空操作指令
28.定時器: 3個16位存儲器映射寄存器組成:定時器寄存器(TIM)、定時器周期寄存器(PRD)、定時器控制寄存器(TCR)。
.title “example.asm”
;用雙引號括起的源程序名
.mmregs
;定義存儲器映射寄存器的替代符號
STACK
.usect “STACK”, 10h
;在數據存儲器中留出16個單元作為
;堆棧區,名為STACK
.bss
a, 4
.bss
x, 4
;在數據存儲器中空出4個存儲單元存放
;變量x1,x2,x3和x4..bss
y, 1
.def
start
;在此模塊中定義,可為別的模塊引用
.data
;緊跟其后的是已初始化數據
table:
.word 1, 2, 3, 4
;在程序存儲器標號為table開始的8個單
.word 8, 6, 4, 2
;元存放初始化數據
.text
;緊跟其后的是匯編語言程序正文
start:
STM
#0, SWWSR
;SWWSR置0,不插等待周期
S
STM
#STACK+10H,SP
;設置堆棧指針
STM
#a, AR1
;AR1指向a的首地址
RPT
#7
;從程序存儲器向數據存儲器
MVPD
table, *AR1+
;重復傳遞共8個數據
CALL
SUM
;調用懲罰累加子程序 end:
B
end
;循環等待
SUM:
STM
#a, AR3
;將洗漱的首地址附給AR3
STM
#x, AR4
;降變量x的首地址附給AR4
RPTZ
A, #3
;降累加器清零,重復執行下條指令4次
MAC
*AR3+, *AR4+, A
;乘法累加運算
STL
A, @y
;結果送往變量y的存儲單元
RET
.end
;結束匯編,匯編器將忽略
5.堆棧用法:
壓入操作:SP先減1,然后再將數據壓入棧頂。
彈出操作:數據彈出后,再將SP加1。堆棧設置: size
.set 100 stack.usect “STK”, size
;自定義一個名為STK的保留空間,共100個單元
STM
#stack+size, SP;將這個保留空間的高地址(#stack+size)賦給SP,作為棧底,【例4.14】 對數組x[5]中的每個元素加1。
.bss
x, 5 begin:
LD
#1, 16, B
STM
#4,BRC
;BRC賦值為4
STM
#x,AR4
RPTB
next-1
;next-1為循環結束地址
ADD
*AR4,16,B,A
STH
A,*AR4+ next:
LD
#0, B
…
用next-1作為結束地址是恰當的。如果用循環回路中最后一條指令(STH指令)的標號作為結束地址,若最后一條指令是單字指令也可以,若是雙字指令,就不對了。
【例4.15】 編寫一段程序,首先對數組x[20]賦值,再將數據存儲器中的數組x[20]復制到數組y[20]。
.title “exp15.asm”
.mmregs
STACK
.usect “STACK”, 30h
.bss
x, 20
.bss
y, 20
.data
table:
.word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
.def start
.text Start:
STM
#x, AR1
RPT #19
MVPD
table, *AR1+;程序存儲器傳送到數據存儲器
STM #x, AR2
STM
#y, AR3
RPT
#19
MVDD *AR2+, *AR3+;數據存儲器傳送到數據存儲器 end:
B end
.end
計算 z=x+y-w LD @x,A ADD @y,A SUB @W, A STL A,@z 計算y=mx+b LD @m,T MPY @x,A ADD @b,A STL A,@y 計算 y=x1*a1+x2*a2 LD @x1,T MPY @a1,B LD @x2,T MAC @a2,B STL B,@y STH B, @y+1 找出最大值,并存放在累加器A中 STM #a,AR1 STM #x,AR2 STM #2, AR3 LD
*AR1+,T MPY *AR2+,A
;第一個成績累加器A中 Loop LD *AR1+.T
MPY *AR2+,B ;其他乘積在累加器B中
MAX A
;累加器A和B比較,選大的存在A中
BANZ loop,*AR3 ;此循環中共進行三次乘法比較 數組 x【5】={1,2,3,4,5}初始化
.data TBL
.word
1,2,3,4,5
.bss
x,5
.text
STM
#x,AR5
RPT
#4
MVPD
TBL,*AR5+
第三篇:DSP調試總結
6416是定點型芯片,在項目中主要用來做下變頻后數據的譜計算。FPGA中對所采數據進行下變頻后通過DSP的EMIF口(64bit)傳輸到DSP中進行FFT運算,算完的譜數據再通過EMIF口回傳至FPGA,再傳至上位機進行頻譜圖的顯示。
在這個過程中,并沒有用DSP做多少事情,只是有一個FFT計算和EMIF口以及MCBSP口的數據與控制命令的傳輸,總體來說功能還是蠻簡單的。
1、首先,FFT運算直接調用TI的C64XX的庫函數就可以完成。在這個調試過程中,首先使用的是simulater環境進行軟件仿真計算,根據計算出來的譜圖發現結果是正確的,只是模擬數據和旋轉因子在軟仿真的時候耗費的時間太長(32K點)。可由MATLAB產生數據,然后導入數組,直接進行FFT驗證之。
FFT消耗時間分析:在軟件中可以設置觀測FFT函數所消耗的時間,最后由兩種結果,Total cycle 和Cpu cycle,其根據600M主頻計算下來,做32K點時其耗時相差有100倍,即百毫秒與毫秒的差別,由于不確定時間應采取哪種,所以進而進行了板級實驗。
在板級實驗過程中,發現程序“經常偶爾”跑飛,一直也沒有找到原因。最后經過多次試驗用示波器檢測出來的時間與用Cpu cycle計算出來的相近。此時,我們假設Cpu cycle是正確的,那換算出來的主頻就只為400M。用示波器對分頻時鐘進行測試,發現現在CPU確實只工作在400M的主頻,而不是最大600M的主頻。
由此說明,芯片的配置可能有問題,并且還可以證明可以用Cpu cycle來計算程序的運行時間(當然DSP主頻要確定)。
經databook查詢,發現晶振的頻率與其設置的主頻選擇有誤,及用此晶振的頻率,要改變外圍電路配置才能達到最高頻率。當然,也許maybe可能這個問題與DSP經常跑飛有關聯。
改了之后發現其運行在666M的狀態,超了66M,不曉得對芯片有沒有影響,知道的大神可告知小弟,不勝感激...2、EMIF 與 MCBSP 的可按照自己的需要進行配置初始化。
EMIF用到了64位,在傳輸64位數據上糾結了很久,C語言上long即為64位,可在此只為40位。經一位大神提醒,使用long long類型搞定之,木有技術含量,發現自己基本功相當之不扎實。
第四篇:DSP理論課總結
GX_Joe 第一次課-----DSP概念 Q1:DSP的概念:
DSP可以代表數字信號處理技術(Digital Signal Processing),也可以代表數字信號處理器(Digital Signal Processor)。前者是理論和計算方法上的技術,后者是指實現這些技術的通用或專用可編程微處理器芯片。
數字信號處理包括兩個方面的內容: 1.算法的研究
算法的研究是指如何以最小的運算量和存儲器的使用量來完成指定的任務。諸如:語音與圖像的壓縮編碼、識別與鑒別,信號的調制與解調、加密和解密,信道的辨識與均衡,智能天線,頻譜分析等各種快速算法 2.數字信號處理的實現
數字信號處理的實現是用硬件、軟件或軟硬結合的方法來實現各種算法。它和單片機的主要區別在于數值處理和高速運算。數字信號處理的實現一般有以下幾種方法:
基于軟件仿真的MATLAB,基于PC的應用程序,單片機,FPGA,DSP,ASIC
Q2:DSP結構特點:(手把手P1)
強調實時性;除了具備普通微處理器所強調的高速運算和控制能力外,針對實時數字信號處理的特點,在處理器的結構、指令系統、指令流程上作了很大的改進,其主要特點如下:
(PS比較哈佛和馮諾依曼結構的區別)
馮.諾依曼指出:程序只是一種(特殊)的數據,它可以像數據一樣被處理,因此可以和數據一起被存儲在同一個存儲器中——這就是著名的馮.諾依曼原理。注意:數據總線和地址總線共用。
哈佛結構是一種并行體系結構,它的主要特點是將程序和數據存儲在不同的存儲空間中,即程序存儲器和數據存儲器是兩個獨立的存儲器,每個存儲器獨立編址、獨立訪問。
數據指令存儲區是分開的,但總線是分時復用得----改進型的哈佛結構
哈佛結構 Q3:DSP分類
Q4:選型(以TI公司為例)手把手P2-P3
Q5:DSP主要應用
Q6:DSP技術的現狀和發展趨勢
Q7:DSP系統的構成和工作過程 構成:
一個典型的DSP系統應包括抗混疊濾波器、數據采集A/D轉換器、數字信號處理器DSP、D/A轉換器和低通濾波器組成。
工作過程:
① 將輸入信號x(t)進行抗混疊濾波,濾掉高于折疊頻率的分量,以防止信號頻譜的混疊;
② 經采樣和A/D轉換器,將濾波后的信號轉換為數字信號x(n); ③ 數字信號處理器對x(n)進行處理,得數字信號y(n); ④ 經D/A轉換器,將y(n)轉換成模擬信號;
⑤ 經低通濾波器,濾除高頻分量,得到平滑的模擬信號y(t)。Q8:什么是定點DSP和浮點DSP?
DSP數字信號處理器是一種特別適合于進行數字信號處理的微處理器,主要用于實時快速地實現各種數字信號處理算法。定點運算 DSP 在應用中已取得了極大的成功,而且仍然是DSP應用的主體。
和定點運算 DSP 相比,浮點運算 DSP 具有許多優越性: 浮點運算 DSP 比定點運算 DSP 的動態范圍要大很多。定點 DSP 的字長每增加 1bit,動態范圍擴大 6dB。16bit 字長的動態范圍為 96dB。32bit 浮點運算 DSP 的動態范圍可以作到 1536dB,這不僅大大擴大了動態范圍,提高了運算精度,還大大節省了運算時間和存儲空間,因為大大減少了定標,移位和溢出檢查。
由于浮點 DSP 的浮點運算用硬件來實現,可以在單周期內完成,因而其處理速度大大高于定點 DSP。這一優點在實現高精度復雜算法時尤為突出,為復雜算法的實時處理提供了保證。32bit 浮點 DSP 的總線寬度較定點 DSP 寬得多,因而尋址空間也要大得多。這一方面為大型復雜算法提供了可能、因為省的 DSP 目標子程序已使用到幾十MB 存儲器或更多;另一方面也為高級語言編譯器、DSP 操作系統等高級工具軟件的應用提供了條件。DSP 的進一步發展,必然是多處理器的應用。新型的浮點 DSP 已開始在通信口的設置和強化、資源共享等方面有所響應。
第二次課-------閱讀TI文檔(可以在user guide中通過索引找到)Q1:引腳分布
TMS320C5515/14/05/04/VC05/VC04 DSP General-Purpose Input/Output User's Guide 手把手---2.3 Q2:54X和55X的區別
Q3:HPI的概念及適用情況
HPI是HOST PORT INTERFACE(主機接口總線)的簡稱。HPI是一個與主機通信的并行接口,主要用于DSP與其他總線或CPU進行通信。信息可通過'C54x的片內存儲器與主機進行數據交換。
第三次課---------外設及軟件程序介紹 Q1:IIC總線及SPI總線比較 I2C VS SPI SPI是[單主設備(single-master)]通信協議(是一種高速的,全雙工,同步的通信總線,以主從方式工作,這種模式通常有一個主設備和一個或多個從設備,需要至少4根線,事實上3根也可以(單向傳輸時)),這意味著總線中的只有一支中心設備能發起通信。
IIC 是多主設備的總線(IIC是一種多向控制總線,也就是說多個芯片可以連接到同一總線結構下,同時每個芯片都可以作為實時數據傳輸的控制源),IIC沒有物理的芯片選擇信號線,沒有仲裁邏輯電路,只使用兩條信號線—— ‘serial data’(SDA)和 ‘serial clock’(SCL)。
第一總線拓撲結構/信號路由/硬件資源耗費
IIC 只需兩根信號線,而標準SPI至少四根信號,如果有多個從設備,信號需要更多。一些SPI變種雖然只使用三根線——SCLK, SS和雙向的MISO/MOSI,但SS線還是要和從設備一對一根。另外,如果SPI要實現多主設備結構,總線系統需額外的邏輯和線路。用IIC 構建系統總線唯一的問題是有限的7位地址空間,但這個問題新標準已經解決——使用10位地址。從第一點上看,IIC是明顯的大贏家。
第二數據吞吐/傳輸速度
如果應用中必須使用高速數據傳輸,那么SPI是必然的選擇。因為SPI是全雙工,IIC 的不是。SPI沒有定義速度限制,一般的實現通常能達到甚至超過10 Mbps。IIC 最高的速度也就快速+模式(1 Mbps)和高速模式(3.4 Mbps),后面的模式還需要額外的I/O緩沖區,還并不是總是容易實現的。
Q2:多媒體卡控制器(只是簡介)作用:
多媒體卡控制器可以讀寫多媒體卡(MultiMediaCard,簡稱MMC卡)和數字存儲卡(Secure Digital Memory Card,簡稱SD卡)上的存儲器。該控制器有如下特點:
支持MMC/SD協議和SPI協議;軟件支持未來的擴展升級;MMC控制器的運行頻率可以通過程序設置; MMC控制器與存儲卡之間控制傳輸速率的時鐘可以通過編程設置。
MMC控制器可以在存儲卡和CPU或DMA控制器之間傳輸數據,也可以進行卡對卡之間的傳輸。它們之間的通信可以按照MMC/SD協議也可以按照SPI協議進行,在基于MMC/SD協議時使用一條雙向數據線(MMC卡)或4條雙向數據線(SD卡),基于SPI協議時則是用兩條串行數據線,一條向卡上存儲數據,一條從卡上讀回數據。下面是MMC控制器信號連接圖。
從圖中可以看到連接的信號有時鐘信號
(CLK),控制信號(CMD)和數據信號,當連接的是MMC卡時,只
使用DAT0數據線,而連接的是SD卡時,則使用DAT0~3數據線。
應用實時時鐘芯片支持庫函數首先需要在頭文件中包含csl_rtc.h文件。。。Q6:異步串口UART 1. 異步串口發送部分
異步串口發送部分包括一個發送保持寄存器(URTHR)和一個發送移位寄存器(URTSR),當異步串口工作在FIFO模式下時,發送保持寄存器可以緩存16個字節。發送部分由異步串口線路控制寄存器(URLCR)控制,發送格式如下: 1個起始位5、6、7或者8個數據位 1個奇偶校驗位(可選)
1、1.5或者2個停止位
如果串口發送保持寄存器從內部數據總線接收到數據,當發送移位寄存器準備好時,異步串口模塊將數據從送到保持寄存器發送到發送移位寄存器,發送移位寄存器通過TX引腳將串行數據發送出去。
在非FIFO模式下,當發送保持寄存器沒有數據存儲時,如果中斷使能寄存器使能發送寄存器空中斷,則產生該中斷,而當一個新的字節被裝入發送保持寄存器時這個中斷被清除;在FIFO模式下,發送FIFO為空時產生中斷,當新的字節被裝入FIFO時中斷被清除。2. 異步串口接收部分
異步串口接收部分包括一個接收移位寄存器(URRSR)和一個接收緩沖寄存器(URRBR)。當異步串口工作在FIFO模式下時,接收緩沖寄存器可以緩沖16個字節。接收部分的定時器由16倍接收時鐘提供,在異步串口控制寄存器的控制下,接收部分可以接收如下格式數據: 1個起始位5、6、7或者8個數據位 1個奇偶校驗位(可選)1個停止位
當接收移位寄存器從RX引腳收到數據后,將組合好的數據送到接收緩沖寄存器或者接收FIFO,異步串口可以為每個收到的字節存儲3個錯誤狀態信息位,包括奇偶校驗錯 誤、幀錯誤和接收間斷。
在非FIFO模式下時,如果一個字符被放到接收數據緩沖寄存器中,并且中斷使能時將產生中斷,該字符被讀走時中斷被清除;在FIFO模式下時,如果FIFO存儲的數據量達到FIFO控制寄存器(URFCR)設定的觸發值時將產生中斷,而當FIFO存儲的數據量小于觸發值時中斷被清除。3. 波特率產生器
異步串行通信需要滿足各種不同通信速率的要求,模塊采用波特率產生器,通過對輸入時鐘分頻來適應串口的通信速率。波特率產生器的分頻數可以從1到65535任意選擇,異步串口的工作時鐘BCLK應為波特率的16倍,即每個輸入輸出的位都將持續16個工作時鐘,而如果串口工作在接收狀態下,將在第8個工作時鐘對該位采樣,下面給出分頻數的計算公式:
4.中斷申請和DMA。。。
Q7:尋址方式
當硬件執行指令時,尋找指令所指定的參與運算的操作數的方法——尋址方式。
根據程序的要求采用不同的尋址方式,可以有效地縮短程序的運行時間和提高代碼執行效率。
C54x芯片的尋址方式可以分為兩類:
數據尋址
程序尋址
Q8:指令表示方法
Q9:算術運算指令---實現數學計算
Q10:數據傳送指令
Q11:邏輯運算指令
Q12:程序控制指令
Q13:并行操作指令
Q14:重復操作指令
可以使緊隨其后的一條指令或程序塊重復執行,分為單指令重復和程序塊重復。
Q17:探測點
探測點是一種設置在源文件某條語句上的特殊斷點,主要用來與一個外部文件的讀/寫相關聯。
當用戶程序運行到探測點時,自動地從與該探測點連接的外部文件中讀入數據或將計算的結果輸出給外部文件。完成數據的傳輸后,自動恢復程序的運行。探測點在算法開發過程中是一個有用的工具,可用來與PC主機進行數據通信。探測點可以進行一下工作:
1從PC主機的文件中,傳輸輸入數據至目標系統的緩沖區,作為算法開發的模擬數據;
2從目標系統的緩沖區中,傳輸輸出數據至PC主機的文件中,以便進行數據分析;
3更新窗口,例如圖形、數據等。
PS:Probe Point 和 Break Point比較-----手把手P64
Probe Point 的使用方法-----手把手P67(實驗中有)Q18:數據觀察方法
圖形顯示:graph。。時域/頻率 手把手P62 第4課--------DSP+XXX:相關設計的架構
第5課--------DSP硬件系統設計:ADC Q1:ADC理論 采樣與編碼
Q3:分類
1.SAR(逐次逼近)型ADC:
逐次比較型AD由一個比較器和DA轉換器通過逐次比較邏輯構成,從MSB開始,順序地對每一位將輸入電壓與內置DA轉換器輸出進行比較,經n次比較而輸出數字值。其電路規模屬于中等。其優點是速度較高、功耗低,在低分辯率(<12位)時價格便宜,但高精度(>12位)時價格很高。
TLC0831(德州儀器公司(TI)推出的TLC0831/2是廣泛應用的8位A/D轉換器。)TLC0831可以外接高精度基準以提高轉換精度,TLC0832的基準輸入在片內與VCC連接。TLC0831/2的操作非常類似TLC0834/8(更多輸入通道),為以后升級提供便利
2.Σ-Δ(Delta-Sigma)調制型 ADC:
Σ-Δ型AD由積分器、比較器、1位DA轉換器和數字濾波器等組成。原理上近似于積分型,將輸入電壓轉換成時間(脈沖寬度)信號,用數字濾波器處理后得到數字值。電路的數字部分基本上容易單片化,因此容易做到高分辨率。主要用于音頻和測量。
3.流水線ADC結構適合于幾Msps到100Msps采樣速率,其復雜性隨分辨率的增加只是線性(而不是指數)增加,具有高速、高精度和低功耗特性,適用于各種場合,特別是數字通訊領域,在這些領域中轉換器的動態性能經常比微分非線性(DNL)和積分非線性等傳統的ADC特性更重要。在大多數的應用中,流水線ADC的數據延遲都無關緊要。
PS:AD轉換器分類
下面簡要介紹常用的幾種類型的基本原理及特點:積分型、逐次逼近型、并行比較型/串并行型、Σ-Δ調制型、電容陣列逐次比較型及壓頻變換型。
1)積分型(如TLC7135)
積分型AD工作原理是將輸入電壓轉換成時間(脈沖寬度信號)或頻率(脈沖頻率),然后由定時器/計數器獲得數字值。其優點是用簡單電路就能獲得高分辨率,但缺點是由于轉換精度依賴于積分時間,因此轉換速率極低。初期的單片AD轉換器大多采用積分型,現在逐次比較型已逐步成為主流。2)逐次比較型(如TLC0831)
逐次比較型AD由一個比較器和DA轉換器通過逐次比較邏輯構成,從MSB開始,順序地對每一位將輸入電壓與內置DA轉換器輸出進行比較,經n次比較而輸出數字值。其電路規模屬于中等。其優點是速度較高、功耗低,在低分辯率(<12位)時價格便宜,但高精度(>12位)時價格很高。3)并行比較型/串并行比較型(如TLC5510)
并行比較型AD采用多個比較器,僅作一次比較而實行轉換,又稱FLash(快速)型。由于轉換速率極高,n位的轉換需要2n-1個比較器,因此電路規模也極大,價格也高,只適用于視頻AD轉換器等速度特別高的領域。
串并行比較型AD結構上介于并行型和逐次比較型之間,最典型的是由2個n/2位的并行型AD轉換器配合DA轉換器組成,用兩次比較實行轉換,所以稱為Half flash(半快速)型。還有分成三步或多步實現AD轉換的叫做分級(Multistep/Subrangling)型AD,而從轉換時序角度又可稱為流水線(Pipelined)型AD,現代的分級型AD中還加入了對多次轉換結果作數字運算而修正特性等功能。這類AD速度比逐次比較型高,電路規模比并行型小。4)Σ-Δ(Sigma?/FONT>delta)調制型(如AD7705)
Σ-Δ型AD由積分器、比較器、1位DA轉換器和數字濾波器等組成。原理上近似于積分型,將輸入電壓轉換成時間(脈沖寬度)信號,用數字濾波器處理后得到數字值。電路的數字部分基本上容易單片化,因此容易做到高分辨率。主要用于音頻和測量。
5)電容陣列逐次比較型
電容陣列逐次比較型AD在內置DA轉換器中采用電容矩陣方式,也可稱為電荷再分配型。一般的電阻陣列DA轉換器中多數電阻的值必須一致,在單芯片上生成高精度的電阻并不容易。如果用電容陣列取代電阻陣列,可以用低廉成本制成高精度單片AD轉換器。最近的逐次比較型AD轉換器大多為電容陣列式的。6)壓頻變換型(如AD650)壓頻變換型(Voltage-Frequency Converter)是通過間接轉換方式實現模數轉換的。其原理是首先將輸入的模擬信號轉換成頻率,然后用計數器將頻率轉換成數字量。從理論上講這種AD的分辨率幾乎可以無限增加,只要采樣的時間能夠滿足輸出頻率分辨率要求的累積脈沖個數的寬度。其優點是分辯率高、功耗低、價格低,但是需要外部計數電路共同完成AD轉換。
第五篇:DSP BIOS使用總結
DSP/BIOS 實現實時數據調試和交換
摘要:本文介紹了基于TI公司DSP/BIOS實現實時數據調試和交換的方法
----數字信號處理技術已成為目前最廣泛的應用技術之一,TI公司在不斷推出各種新型高速低功耗DSP的基礎上,提出了基于DSP的微型實時操作系統BIOS的概念.----DSP所面臨的系統越來越復雜,諸如多任務處理,煩瑣的硬件設備管理,實時數據處理及傳送等等,傳統的DSP編程越來越難以勝任.----TI公司推出的BIOS可以支持以上功能,它提供了眾多的模塊及面向用戶的API接口,包括多優先級多任務系統調度,內存管理,硬件DRIVER抽象,以及數字信號處理所獨特的實時數據調試及交換的支持..1 BIOS中的圖形化管理界面
----先介紹一下BIOS中的圖形化管理界面:DSP/BIOS CONFIGURATION TOOLS。在 CCS 集成 開發環境中打開FILE
-> NEW->
DSP/BIOS
CONFIGURATION,就可以看到DSP/CONFIGURATION TOOLS,在這里用圖形化的界面集中管理所有的BIOS模塊,包括硬中斷,軟中斷,任務,時鐘,管道等,在每個模塊下都可以添加新的對象以及編輯它的屬性,添加完對象會在工程中自動生成相應的代碼,用戶程序中只需聲明此對象,然后調用它的API函數就可以了。
----下面主要介紹數字信號處理所獨特的實時數據調試及交換
----在通常的軟件調試中如何去觀察變量?很簡單,我們會單步運行或者設置斷點,然后在WATCH窗口中觀察變量的值.這種經典的調試方法在數字信號處理中捉荊見拙,因為我們面對的是實時任務,程序的停頓會使我們面對的系統面目全非.DSP/BIOS的解決方案是提供LOG模塊,在目標DSP內,LOG對象將要監控的信息實時的捕捉存放在DSP的特定緩沖LOG
BUFFER中,在DSP進入空閑的時刻通過JTAG接口傳回主機,主機端的CCS集成環境將接受數據并顯示在打開的LOG觀察窗口中,從而不打斷正常的程序運行情況下,獲取必要的調試信息。.2 LOG模塊
----下面介紹如何使用LOG模塊。在現有的工程中打開DSP/BIOS CONFIGURATION TOOL,在LOG模塊上單擊右鍵選擇INSERT LOG,然后修改新添加的對象名為 LogTarget.在程序里添加以下代碼
#include
#include
extern far LOG_Obj logTarget;//聲明為外部對象
func()
{
LOG_printf(&logTarget, …);
}
----這樣就完成了調試數據向主機的傳送。在運行代碼前,我們打開DSP/BIOS->MESSAGE
LOG,在打開的LOG窗口中,單擊右鍵打開PROPERTY PAGE,選擇Name為LogTarget.然后運行
代碼,LOG.printf會將所需的信息打印到打開的LOG窗口中,這樣能夠在不影響系統運行的時候,觀察變量,打印信息了.----另一個重要的用于實時調試的模塊是STS,用于提供在程序運行中的各種統計數據,如運行時間,特定的變量等。在DSP中,STS將所要統計的數據放在一組32位的變量,同樣在DSP進入IDLE時刻,將數據通過JTAG接口傳送給主機中的64位變量進行統計,并清除DSP中的32位變量。.3 STS模塊
(續致信網上一頁內容)----下面介紹一下STS的使用
----在工程中打開DSP/CONFIGURATION TOOLS,并在STS模塊下添加一個對象stsObj.----在程序里添加以下代碼
#include
#include
extern far STS_Obj stsObj;
//通常有三種使用方法
//1。統計消耗的時鐘數
func()
{
STS_set(&stsObj, CLK_gethtime());//設置一個起始時刻
“do algorithm”//運行算法
STS_delta(&stsObj, CLK_gethtime());//得到自上一個STS_set到目前的時鐘數
}
//2。統計變化的變量
func()
{
STS_add(&stsObj, pitch);//將變量pitch在一段循環中的最大值,平均值及總和打印出來
}
//3。統計變量改變的差值
STS_set(&stsObj,targetValue);
“processing”
STS_delta(&stsObj,newValue);//將變量改變的差值統計出來
----在運行代碼前,在CCS中打開TOOLS..DSP/BIOS..STATISTICS VIEW,在打開的STATISTICS窗口
中,單擊右鍵打開PROPERTY PAGE,選擇要顯示的STS對象及要觀察的統計數據,如平均值,總數,循環次數等.運行代碼,所要觀察的統計數據會出現在STATISTICS窗口中,這樣我們能夠在不影響系統運行的時候,獲取有關的統計信息了.----上面我們介紹的STS模塊提供了靈活的獲取統計數據的方法。.4 RTDX模塊
----下一個我們要提到的重要模塊是RTDX(REALTIME DATA EXCHANGE),RTDX提供了實時連續探察
DSP內部處理的方法,我們可以在DSP全速運行的時候在主機和DSP間
進行數據的傳輸,用戶可以在主機用OLE automation
client分析顯示得到的數據.----RTDX包括主機部分和目標部分,目標DSP中程序調用RTDX目標庫的API函數通過JTAG接口與主機交換數據,主機端客戶程序通過OLE接口調用RTDX
HOST LIBRARY API與DSP交換數據。
目標DSP內輸出管道的編程可以參照一下流程:
1)#include
2)RTDX_CreateOutputChannel(ochan);
聲明一個全局的輸出管道
3)RTDX_enableOutput(&ochan);
使能一個輸出的管道
4)status = RTDX_write(&ochan, &data, sizeof(data));
將所要傳出的數據data傳遞到管道
5)RTDX_disableOutput(&ochan);
關斷管道
目標DSP內輸入管道的編程與此類似
在主機端可以用VB,VC或者EXCEL編程
這里介紹一下VC環境下RTDX輸入管道編程
1)輸入RTDX支持庫
#import
using namespace RTDXINTLib;
2)定義一個RTDX對象
IRtdxExpPtr rtdx;
3)初始化COM
::CoInitialize(NULL);
4)初始化COM對象
HRESULT hr = rtdx.CreateInstance(L“RTDX”);
5)打開一個管道
status = rtdx.Open(“ochan”, “R”)
6)從管道中讀數據
status = rtdx.ReadI4(data)
7)關閉管道
status = rtdx.Close()
8)釋放COM對象
rtdx.Release();
9)釋放COM
::CoUninitialize();
主機端輸出管道的編程與此類似.----如果安裝有CCS,那么在C:tic6000examplesrtdxdisplays下的RTDX.EXE提供了一個通用的主機端接口程序,運行后,通過菜單配置,可以與DSP端RTDX管道建立連接,將接受的數據顯示在表格中.