本文主要是關(guān)于tms320c6000的相關(guān)介紹,并著重對tms320c6000系列dsp編程工具與指南進行了詳盡的闡述。
dsp
DSP(digital singnal processor)是一種獨特的微處理器,是以數(shù)字信號來處理大量信息的器件。其工作原理是接收模擬信號,轉(zhuǎn)換為0或1的數(shù)字信號,再對數(shù)字信號進行修改、刪除、強化,并在其他系統(tǒng)芯片中把數(shù)字數(shù)據(jù)解譯回模擬數(shù)據(jù)或?qū)嶋H環(huán)境格式。它不僅具有可編程性,而且其實時運行速度可達每秒數(shù)以千萬條復雜指令程序,源源超過通用微處理器,是數(shù)字化電子世界中日益重要的電腦芯片。
它的強大數(shù)據(jù)處理能力和高運行速度,是最值得稱道的兩大特色 DSP既是Digital Signal Processing的縮寫(數(shù)字信號處理的理論和方法)或者是Digital Signal Processor(用于數(shù)字信號處理的可編程微處理器)的縮寫。我們所說的DSP技術(shù),則一般指將通用的或?qū)S玫腄SP處理器用于完成數(shù)字信號處理的方法和技術(shù)。 DSP的有以下特點: DSP處理器采用哈佛結(jié)構(gòu)和改進的哈佛結(jié)構(gòu)。 哈佛結(jié)構(gòu)就是將程序代碼和數(shù)據(jù)的存儲空間分開,各有自己的地址和數(shù)據(jù)總線。之所以采用哈佛結(jié)構(gòu),是為了并行進行指令和數(shù)據(jù)處理,從而可以大大地提高運算的速度。為了進一步提高信號處理的效率,在哈佛結(jié)構(gòu)的基礎上,又加以改善。使得程序代碼和數(shù)據(jù)存儲空間之間可以進行數(shù)據(jù)的傳輸,稱為改善的哈佛結(jié)構(gòu)。 采用流水技術(shù)。 流水技術(shù)是將各指令的各個步驟重疊起來執(zhí)行。
DSP處理器所采用的將程序存儲空和數(shù)據(jù)存儲空間的地址與數(shù)據(jù)總線分開的哈佛結(jié)構(gòu),為采用流水技術(shù)提供了很大的方便。 為了提高DSP處理器的運算速度,它們無例外地設置了硬件乘法器,以及MAC(乘并且累加)一類的指令。 DSP處理器都為DMA單獨設置了完全獨立的總線和控制器,這是和通用的CPU很不相同,其目的是在進行數(shù)據(jù)傳輸是完全不影響CPU及其相關(guān)總線的工作。 在DSP處理器中,設置了專門的數(shù)據(jù)地址發(fā)生器來產(chǎn)生所需的數(shù)據(jù)地址。數(shù)據(jù)地址的產(chǎn)生與CPU的工作是并行的,從而節(jié)省CPU的時間,提高信號的處理速度。 DSP處理器為了自身工作的需要和外部環(huán)境的協(xié)調(diào)工作。往往都設置了豐富的外設。如時鐘發(fā)生器。定時器等。
定點DSP處理器和浮點DSP處理器。定點DSP中經(jīng)常要考慮溢出問題,在浮點DSP基本上可以不考慮。與定點DSP處理器相比,浮點DSP處理器的速度更快,尤其是作浮點運算。在實時性要求很到的場合。往往考慮浮點DSP處理器。而浮點DSP處理器的價格比較高,開發(fā)難度更大。 DSP的用途 2000主要用于控制:供電,光網(wǎng)絡等。5000則是通訊和靜態(tài)圖像處理:視頻產(chǎn)品,數(shù)字無線電等。而6000是數(shù)字通信和圖像處理:移動通信,打印機,數(shù)字掃描儀等。
dsp編程
1、DSP編程
對OSS驅(qū)動聲卡的編程使用Linux文件接口函數(shù),如圖17.5,DSP接口的操作一般包括如下幾個步驟:
① 打開設備文件/dev/dsp。
采用何種模式對聲卡進行操作也必須在打開設備時指定,對于不支持全雙工的聲卡來說,應該使用只讀或者只寫的方式打開,只有那些支持全雙工的聲卡,才能以讀 寫的方式打開,這還依賴于驅(qū)動程序的具體實現(xiàn)。Linux允許應用程序多次打開或者關(guān)閉與聲卡對應的設備文件,從而能夠很方便地在放音狀態(tài)和錄音狀態(tài)之間 進行切換。
② 如果有需要,設置緩沖區(qū)大小。
運行在Linux內(nèi)核中的聲卡驅(qū)動程序?qū)iT維護了一個緩沖區(qū),其大小會影響到放音和錄音時的效果,使用ioctl()系統(tǒng)調(diào)用可以對它的尺寸進行恰當?shù)脑O 置。調(diào)節(jié)驅(qū)動程序中緩沖區(qū)大小的操作不是必須的,如果沒有特殊的要求,一般采用默認的緩沖區(qū)大小也就可以了。如果想設置緩沖區(qū)的大小,則通常應緊跟在設備 文件打開之后,這是因為對聲卡的其它操作有可能會導致驅(qū)動程序無法再修改其緩沖區(qū)的大小。
③ 設置聲道(channel)數(shù)量。
根據(jù)硬件設備和驅(qū)動程序的具體情況,可以設置為單聲道或者立體聲。
④ 設置采樣格式和采樣頻率
采樣格式包括AFMT_U8(無符號8位)、AFMT_S8(有符號8位)、AFMT_U16_LE(小端模式,無符號16位)、 AFMT_U16_BE(大端模式,無符號16位)、AFMT_MPEG、AFMT_AC3等。使用SNDCTL_DSP_SETFMT IO控制命令可以設置采樣格式。
對于大多數(shù)聲卡來說,其支持的采樣頻率范圍一般為5kHz到44.1kHz或者48kHz,但并不意味著該范圍內(nèi)的所有連續(xù)頻率都會被硬件支持,在 Linux下進行音頻編程時最常用到的幾種采樣頻率是11025Hz、16000Hz、22050Hz、32000Hz 和44100Hz。使用SNDCTL_DSP_SPEED IO控制命令可以設置采樣頻率。
⑤ 讀寫/dev/dsp實現(xiàn)播放或錄音。
圖17.5 OSS dsp接口用戶空間操作流程
代碼清單17.3的程序?qū)崿F(xiàn)了利用/dev/dsp接口進行聲音錄制和播放的過程,它的功能是先錄制幾秒鐘音頻數(shù)據(jù),將其存放在內(nèi)存緩沖區(qū)中,然后再進行放音。
代碼清單17.3 OSS DSP接口應用編程范例
1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #define LENGTH 3 /* 存儲秒數(shù) */
9 #define RATE 8000 /* 采樣頻率 */
10 #define SIZE 8 /* 量化位數(shù) */
11 #define CHANNELS 1 /* 聲道數(shù)目 */
12 /* 用于保存數(shù)字音頻數(shù)據(jù)的內(nèi)存緩沖區(qū) */
13 unsigned char buf[LENGTH *RATE * SIZE * CHANNELS / 8];
14 int main()
15 {
16 int fd; /* 聲音設備的文件描述符 */
17 int arg; /* 用于ioctl調(diào)用的參數(shù) */
18 int status; /* 系統(tǒng)調(diào)用的返回值 */
19 /* 打開聲音設備 */
20 fd = open(“/dev/dsp”, O_RDWR);
21 if (fd 《 0)
22 {
23 perror(“open of /dev/dsp failed”);
24 exit(1);
25 }
26 /* 設置采樣時的量化位數(shù) */
27 arg = SIZE;
28 status = ioctl(fd, SOUND_PCM_WRITE_BITS, &arg);
29 if (status == - 1)
30 perror(“SOUND_PCM_WRITE_BITS ioctl failed”);
31 if (arg != SIZE)
32 perror(“unable to set sample size”);
33 /* 設置采樣時的通道數(shù)目 */
34 arg = CHANNELS;
35 status = ioctl(fd, SOUND_PCM_WRITE_CHANNELS, &arg);
36 if (status == - 1)
37 perror(“SOUND_PCM_WRITE_CHANNELS ioctl failed”);
38 if (arg != CHANNELS)
39 perror(“unable to set number of channels”);
40 /* 設置采樣率 */
41 arg = RATE;
42 status = ioctl(fd, SOUND_PCM_WRITE_RATE, &arg);
43 if (status == - 1)
44 perror(“SOUND_PCM_WRITE_WRITE ioctl failed”);
45 /* 循環(huán),直到按下Control-C */
46 while (1)
47 {
48 printf(“Say something: ”);
49 status = read(fd, buf, sizeof(buf)); /* 錄音 */
50 if (status != sizeof(buf))
51 perror(“read wrong number of bytes”);
52 printf(“You said: ”);
53 status = write(fd, buf, sizeof(buf)); /* 放音 */
54 if (status != sizeof(buf))
55 perror(“wrote wrong number of bytes”);
56 /* 在繼續(xù)錄音前等待放音結(jié)束 */
57 status = ioctl(fd, SOUND_PCM_SYNC, 0);
58 if (status == - 1)
59 perror(“SOUND_PCM_SYNC ioctl failed”);
60 }
61 }
tms320c6000系列dsp編程工具與指南
1. Why process signals digitally?
(1)模擬電路由模擬組件構(gòu)成:電阻、電容及電感等,這些組件隨著電壓、溫度或機械結(jié)構(gòu)的改變會動態(tài)影響到模擬電路的效果;
(2)數(shù)字電路具有好的噪聲抑制能力,少的開發(fā)時間和功耗
雖然數(shù)字電路有那么多優(yōu)點,在有些情況下還必須使用模擬電路:非常高頻的信號(》100MHz)。原因有2點:(1)ADC轉(zhuǎn)換的限制;(2)使用數(shù)字電路很難實時處理非常高頻的信號。
2. Why use DSP?
DSP是Digital Siginal Processor的簡稱。
(1)相對于PC等上的高端處理器,具有更低的功耗
(2)相對于PC等上的高端處理器,具有更低的價格
因此,在考慮價格、機械尺寸、低功耗以及“高頻”處理時使用DSP是較好的選擇。
相對于嵌入式ARM而言,DSP在信號處理上具有更大的優(yōu)勢,ARM偏向于控制。
在大部分的DSP算法中,乘積和(sum of product, SOP)是最基本的單元。
DSP對乘法和加法做了優(yōu)化,乘法與加法在DSP上一般在一個指令周期內(nèi)完成,這也是為什么DSP適用于做信號處理的原因。
4. Choose a DSP
通過數(shù)據(jù)手冊,列表比較兩者參數(shù),比如
浮點DSP與定點DSP的使用場合對比:
浮點DSP一般用于高精度、寬的動態(tài)范圍、高信噪比,一般比較容易使用。定點DSP具有更低的功耗,更便宜,相對尺寸更小。
ASIC聽起來更高端,但使用場合較少,主要因為ASIC開發(fā)周期長(至少1年左右),靈活性差(一旦生成流片則不可更改),耗資大。除非自己經(jīng)常使用的模塊做成流片重用,在產(chǎn)品開發(fā)中一般不使用ASIC。
6. TMS320系列DSP
TI C6000系列主要分為C64x,C62x,C67x三個子系列,C62x與C64x都是定點DSP,C67系列為浮點DSP。
結(jié)語
關(guān)于tms320c6000的相關(guān)介紹就到這了,如有不足之處歡迎指正。
評論
查看更多