最近要用5509a做一些工作,平日裡很少使用dsp,這次算是比較系統的來使用dsp了。當我瀏覽一些例程的時候發現對暫存器操作的時候都是呼叫的csl封裝好的庫,這樣確實挺方便的,直接套暫存器和值就好了,但是乙個對dsp陌生的新手來說,什麼時候該使用什麼樣的csl庫又該怎樣操作這些庫呢,確實挺苦惱的,起碼我是挺鬱悶的,到底該用哪個庫函式。當然也可以直接在csl庫函式說明文件裡乙個乙個去查,這樣也挺麻煩的。我就想可不可以不呼叫庫函式,而是直接操作暫存器。
方法還是有的。我想到在linux系統中對暫存器操作是直接定義巨集定義的,比如:#define a (*(volatial unsigned long *)b)的形式,那麼在dsp中是不是也是可以的呢?
我用操作gpio來做實驗。實驗效果閃爍乙個燈。
最初的**:
#define iodir (*(unsigned long *)0x3400)
#define iodata (*(unsigned long *)0x3401)
main()
}void delay()
}}
鬱悶,為何不行呢?於是我順著操作gpio用的庫函式gpio_rset一直找下去,終於發現了秘密:在csl_stdhal.h檔案中發現了這麼一行:#define preg16(addr) (*(volatile ioport uint16*)(addr))
原來玄機在這裡,於是我修改**:
#define iodir (*(volatile ioport unsigned short *)0x3400)
#define iodata (*(volatile ioport unsigned short *)0x3401)
於是我想到了ccs的編譯器,猜測是沒加ioport時編譯器不能識別我所定義的位址指標也就不能將資料寫入位址,加了ioport就可以識別了。但是怎麼來證明我的猜想。
於是去官網查詢關於編譯器的文件,終於被我找到了
ioport是我們訪問io空間的關鍵字,可用於2x,2xx,5x系列的編譯器,看型別,必須是char,short,int跟我之前實驗的結果是一樣的
到這裡就可以做個結論了:ioport是編譯器識別埠暫存器位址的關鍵字也就是識別標誌,型別必須是char,short,int,那麼以後操作暫存器就可以不用呼叫庫函式,直接巨集定義進行操作就可以了。(必要的時候還是要呼叫的)
HP Xeon 55xx上GPU的頻寬問題
但是通過sdk的頻寬測試,數值比較奇怪。host device 最高不到3gb s,device host 最高只有3.2gb s,這與pci express gen 2.0的5 6gb s的資料相差比較大。發現,還有其他人在相同的hp proliant dl370 g6的伺服器上遇到類似的問題。結...
DSP 實驗一(CCS操作實驗)
實驗一 教案 ccs操作實驗 二 授課型別 實驗課 三 授課題目 ccs操作實驗 四 教學目的與要求 1 熟悉ccs3.3軟體的使用。2 了解sz dspf開發教學平台的使用。五 教學重點與難點 1 通過ccs工程建立 檔案新增 2 ccs整合開發環境的熟悉 3 ccs中斷點及探點的設定方法及兩者之...
DSP學習之排序器操作
同步取樣模式下,控制暫存器convxx的最高位不起作用,每個取樣保持緩衝器對convxx的低三位確定的引腳進行取樣,即,假如adcregs.adcchselseq1.bit.conv00 0x1,則adcina1由取樣保持器a取樣,adcinb1由取樣保持器b取樣,取樣可以同步進行,但是轉換不能同時...