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