四、 腦波訊號處理嵌入式系統之設計
4.3 訊號分析系統設計
4.3.4 訊號資料傳送
ARM 和 DSP 分工中,一項重要的部分便是 ARM 和 DSP 的資料傳輸。ARM 和 DSP 的內部資料傳輸,主要是利用 DSP Gateway 所定義的 IPBUF,IPBUF 是利用 OMAP 內 部的 share memory(詳見圖 2-1)。資料傳輸的型式,所採取的方式是 block send 的方式,
ARM 在傳送資料時的 Mailbox command 中在 CMH 的部分給 0x20,表示 BKSND 的命 令,並且傳送 BID(buffer ID)給 DSP。ARM 在傳送資料時,會先傳送 Mailbox command,
這時會有 Mailbox interrupt(INT5)產生,接收這個命令,經過 interrupt handler 的處理 DSP task(ICA task)收到接收資料的命令,並會到 Mailbox command 裡面指定的 IPBUF 內取得 所要處理的資料,經過在 DSP 中 ICA 運算,將得到結果存在記憶體內。同樣的 ARM 這
Structure name Data member Data type Description
data_startnum unsigned short 傳輸資料的起啟點data_endnum unsigned short 傳輸資料的結束點 signalnum unsigned short 第幾筆訊號資料
finishflag unsigned short 是否傳輸完成 DATA_T
signaldata[] float 訊號資料
圖 4-4 資料傳送流程圖
傳輸時需要注意一點就是,使用完 IPBUF 時要將其釋放出來,不然 IPBUF 會一直被 task 給佔用,圖 4-5表示了 IPBUF 轉移的過程:
圖 4-5 IPBUF 所有權的轉移
ARM 使用 read 和 write 兩個系統呼叫(System Call)做傳輸的動作,搭配 get_free_ipbuf 和 unuse_ipbuf 兩個函式來取得和使用 IPBUF,有效掌控傳輸的資源。
ARM 傳資料給 DSP 了傳輸要分批傳之外,另外,需要注意的一點是 ARM 和 DSP 溝通時如果使用 32bit 大小以上的資料區塊,需要先經過資料位元的置換,這是因為 ARM 和 DSP 資料的堆疊方式不同。位元組順序,DSP 和 ARM 有所不同。對於多位元組值,
x86 PC 將低位元組放在前(高位元組),這種順序稱為 little endian(LSB 在前面)。但是大 部分的位元組是採用另一種順序,big endian(MSB 在前面)。有的處理器甚至同時支援兩 種模式。一般而言,都比較偏好於 big endian 模式。德州儀器(TI)的 DSP 為了支援於 Intel-base 的 x86 系列溝通,在設計時是採用 little endian 的模式,但是 ARM-base 是屬 於 big endian 的順序,和 DSP 順序不同。例如,一個數值 0x01020304,以 big endian 表 示會是「0x01 0x02 0x03 0x04」的順序排列,而 little endian 則會是「0x04 0x03 0x02 0x01」。 題,不然處理的資料都會有所錯誤。DSP Gateway 針對此一問題,在 DSP Gateway driver 中加入了處理此一問題的做個修正,在傳輸時,會將資料順序重新排列。DSP Gateway 提供 16-bit 的處理,也就是 2-byte 的處理。但在處理 ICA 資料時,為了精確的表示 ICA 的訊號資料,一般都是一 32-bit 來表示。例如,如果一個數值為 0x0102,在 little-endian 下表示,會是「0x02 0x01」,DSP Gateway 會將其位元修正為「0x01 0x02」的 big-endian 表示。處理 ICA 時,以 32-bit 表示一個數值為 0x01020304,以 DSP Gateway 處理後,
只能變成「0x0304 0x0102」,所以在程式中,還需要將 32-bit 中的高位元的 16-bit 和低 位元的 16-bit 交換才能讓資料正確。在訊號的 raw data 從 ARM 傳入 DSP 之前,需經過 data word swap 的動作,才能確保資料的正確性。綜合前面,可以將整個系統架構和資 料傳輸的設計,表示於圖 4-8。圖 4-8中,整個順序分別以數字標號表示,1~6 的流程 表示,單板收到訊號資料,執行 ICA 程序,將 ICA 運算交由 DSP 處理,DSP 再將處理 完的資料更新至 IPBUF 中,7~9 的流程表示,ARM 的部分給予一個接收結果的 Mailbox 命令,然後從 IPBUF 中接收傳回的命令,並且在 10 的地方得到 ICA 分離出的成分。
圖 4-6 資料傳送順序圖
圖 4-7 資料接收順序圖
圖 4-8 腦波處理系統資料傳輸及 ICA 處理架構圖