本文主要是關(guān)于tms320c6000的相關(guān)介紹,并著重對tms320c6000系列dsp編程工具與指南進(jìn)行了詳盡的闡述。
dsp
DSP(digital singnal processor)是一種獨(dú)特的微處理器,是以數(shù)字信號來處理大量信息的器件。其工作原理是接收模擬信號,轉(zhuǎn)換為0或1的數(shù)字信號,再對數(shù)字信號進(jìn)行修改、刪除、強(qiáng)化,并在其他系統(tǒng)芯片中把數(shù)字?jǐn)?shù)據(jù)解譯回模擬數(shù)據(jù)或?qū)嶋H環(huán)境格式。它不僅具有可編程性,而且其實(shí)時運(yùn)行速度可達(dá)每秒數(shù)以千萬條復(fù)雜指令程序,源源超過通用微處理器,是數(shù)字化電子世界中日益重要的電腦芯片。
它的強(qiáng)大數(shù)據(jù)處理能力和高運(yùn)行速度,是最值得稱道的兩大特色 DSP既是Digital Signal Processing的縮寫(數(shù)字信號處理的理論和方法)或者是Digital Signal Processor(用于數(shù)字信號處理的可編程微處理器)的縮寫。我們所說的DSP技術(shù),則一般指將通用的或?qū)S玫腄SP處理器用于完成數(shù)字信號處理的方法和技術(shù)。 DSP的有以下特點(diǎn): DSP處理器采用哈佛結(jié)構(gòu)和改進(jìn)的哈佛結(jié)構(gòu)。 哈佛結(jié)構(gòu)就是將程序代碼和數(shù)據(jù)的存儲空間分開,各有自己的地址和數(shù)據(jù)總線。之所以采用哈佛結(jié)構(gòu),是為了并行進(jìn)行指令和數(shù)據(jù)處理,從而可以大大地提高運(yùn)算的速度。為了進(jìn)一步提高信號處理的效率,在哈佛結(jié)構(gòu)的基礎(chǔ)上,又加以改善。使得程序代碼和數(shù)據(jù)存儲空間之間可以進(jìn)行數(shù)據(jù)的傳輸,稱為改善的哈佛結(jié)構(gòu)。 采用流水技術(shù)。 流水技術(shù)是將各指令的各個步驟重疊起來執(zhí)行。
DSP處理器所采用的將程序存儲空和數(shù)據(jù)存儲空間的地址與數(shù)據(jù)總線分開的哈佛結(jié)構(gòu),為采用流水技術(shù)提供了很大的方便。 為了提高DSP處理器的運(yùn)算速度,它們無例外地設(shè)置了硬件乘法器,以及MAC(乘并且累加)一類的指令。 DSP處理器都為DMA單獨(dú)設(shè)置了完全獨(dú)立的總線和控制器,這是和通用的CPU很不相同,其目的是在進(jìn)行數(shù)據(jù)傳輸是完全不影響CPU及其相關(guān)總線的工作。 在DSP處理器中,設(shè)置了專門的數(shù)據(jù)地址發(fā)生器來產(chǎn)生所需的數(shù)據(jù)地址。數(shù)據(jù)地址的產(chǎn)生與CPU的工作是并行的,從而節(jié)省CPU的時間,提高信號的處理速度。 DSP處理器為了自身工作的需要和外部環(huán)境的協(xié)調(diào)工作。往往都設(shè)置了豐富的外設(shè)。如時鐘發(fā)生器。定時器等。
定點(diǎn)DSP處理器和浮點(diǎn)DSP處理器。定點(diǎn)DSP中經(jīng)常要考慮溢出問題,在浮點(diǎn)DSP基本上可以不考慮。與定點(diǎn)DSP處理器相比,浮點(diǎn)DSP處理器的速度更快,尤其是作浮點(diǎn)運(yùn)算。在實(shí)時性要求很到的場合。往往考慮浮點(diǎn)DSP處理器。而浮點(diǎn)DSP處理器的價(jià)格比較高,開發(fā)難度更大。 DSP的用途 2000主要用于控制:供電,光網(wǎng)絡(luò)等。5000則是通訊和靜態(tài)圖像處理:視頻產(chǎn)品,數(shù)字無線電等。而6000是數(shù)字通信和圖像處理:移動通信,打印機(jī),數(shù)字掃描儀等。
dsp編程
1、DSP編程
對OSS驅(qū)動聲卡的編程使用Linux文件接口函數(shù),如圖17.5,DSP接口的操作一般包括如下幾個步驟:
① 打開設(shè)備文件/dev/dsp。
采用何種模式對聲卡進(jìn)行操作也必須在打開設(shè)備時指定,對于不支持全雙工的聲卡來說,應(yīng)該使用只讀或者只寫的方式打開,只有那些支持全雙工的聲卡,才能以讀 寫的方式打開,這還依賴于驅(qū)動程序的具體實(shí)現(xiàn)。Linux允許應(yīng)用程序多次打開或者關(guān)閉與聲卡對應(yīng)的設(shè)備文件,從而能夠很方便地在放音狀態(tài)和錄音狀態(tài)之間 進(jìn)行切換。
② 如果有需要,設(shè)置緩沖區(qū)大小。
運(yùn)行在Linux內(nèi)核中的聲卡驅(qū)動程序?qū)iT維護(hù)了一個緩沖區(qū),其大小會影響到放音和錄音時的效果,使用ioctl()系統(tǒng)調(diào)用可以對它的尺寸進(jìn)行恰當(dāng)?shù)脑O(shè) 置。調(diào)節(jié)驅(qū)動程序中緩沖區(qū)大小的操作不是必須的,如果沒有特殊的要求,一般采用默認(rèn)的緩沖區(qū)大小也就可以了。如果想設(shè)置緩沖區(qū)的大小,則通常應(yīng)緊跟在設(shè)備 文件打開之后,這是因?yàn)閷β暱ǖ钠渌僮饔锌赡軙?dǎo)致驅(qū)動程序無法再修改其緩沖區(qū)的大小。
③ 設(shè)置聲道(channel)數(shù)量。
根據(jù)硬件設(shè)備和驅(qū)動程序的具體情況,可以設(shè)置為單聲道或者立體聲。
④ 設(shè)置采樣格式和采樣頻率
采樣格式包括AFMT_U8(無符號8位)、AFMT_S8(有符號8位)、AFMT_U16_LE(小端模式,無符號16位)、 AFMT_U16_BE(大端模式,無符號16位)、AFMT_MPEG、AFMT_AC3等。使用SNDCTL_DSP_SETFMT IO控制命令可以設(shè)置采樣格式。
對于大多數(shù)聲卡來說,其支持的采樣頻率范圍一般為5kHz到44.1kHz或者48kHz,但并不意味著該范圍內(nèi)的所有連續(xù)頻率都會被硬件支持,在 Linux下進(jìn)行音頻編程時最常用到的幾種采樣頻率是11025Hz、16000Hz、22050Hz、32000Hz 和44100Hz。使用SNDCTL_DSP_SPEED IO控制命令可以設(shè)置采樣頻率。
⑤ 讀寫/dev/dsp實(shí)現(xiàn)播放或錄音。
圖17.5 OSS dsp接口用戶空間操作流程
代碼清單17.3的程序?qū)崿F(xiàn)了利用/dev/dsp接口進(jìn)行聲音錄制和播放的過程,它的功能是先錄制幾秒鐘音頻數(shù)據(jù),將其存放在內(nèi)存緩沖區(qū)中,然后再進(jìn)行放音。
代碼清單17.3 OSS DSP接口應(yīng)用編程范例
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; /* 聲音設(shè)備的文件描述符 */
17 int arg; /* 用于ioctl調(diào)用的參數(shù) */
18 int status; /* 系統(tǒng)調(diào)用的返回值 */
19 /* 打開聲音設(shè)備 */
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è)置采樣時的量化位數(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è)置采樣時的通道數(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 /* 設(shè)置采樣率 */
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)成:電阻、電容及電感等,這些組件隨著電壓、溫度或機(jī)械結(jié)構(gòu)的改變會動態(tài)影響到模擬電路的效果;
(2)數(shù)字電路具有好的噪聲抑制能力,少的開發(fā)時間和功耗
雖然數(shù)字電路有那么多優(yōu)點(diǎn),在有些情況下還必須使用模擬電路:非常高頻的信號(》100MHz)。原因有2點(diǎn):(1)ADC轉(zhuǎn)換的限制;(2)使用數(shù)字電路很難實(shí)時處理非常高頻的信號。
2. Why use DSP?
DSP是Digital Siginal Processor的簡稱。
(1)相對于PC等上的高端處理器,具有更低的功耗
(2)相對于PC等上的高端處理器,具有更低的價(jià)格
因此,在考慮價(jià)格、機(jī)械尺寸、低功耗以及“高頻”處理時使用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ù),比如
浮點(diǎn)DSP與定點(diǎn)DSP的使用場合對比:
浮點(diǎn)DSP一般用于高精度、寬的動態(tài)范圍、高信噪比,一般比較容易使用。定點(diǎn)DSP具有更低的功耗,更便宜,相對尺寸更小。
ASIC聽起來更高端,但使用場合較少,主要因?yàn)锳SIC開發(fā)周期長(至少1年左右),靈活性差(一旦生成流片則不可更改),耗資大。除非自己經(jīng)常使用的模塊做成流片重用,在產(chǎn)品開發(fā)中一般不使用ASIC。
6. TMS320系列DSP
TI C6000系列主要分為C64x,C62x,C67x三個子系列,C62x與C64x都是定點(diǎn)DSP,C67系列為浮點(diǎn)DSP。
結(jié)語
關(guān)于tms320c6000的相關(guān)介紹就到這了,如有不足之處歡迎指正。
評論