12
HT32 CMSIS-DSP Library 使用指南 AN0538TC V1.00 1 / 12 October 18, 2019 HT32 CMSIS-DSP Library 使用指南 文件編號:AN0538TC 簡介 CMSIS 是由 ARM 制定的一個軟體的標準介面,CMSIS 全名為Cortex 微控制器標準軟體介 (Cortex Microcontroller Software Interface Standard),透過標準介面開發人員可以使用相同的 介面控制不同供應商的微控制器,進而縮短開發人員的開發與學習時間,詳細內容請參考 CMSIS 官方網站 http://www.keil.com/pack/doc/CMSIS/General/html/index.html 。本文主要說明 CMSIS-DSP 應用在 HT32 系列微控制器,包含環境建置、使用說明等內容。 功能說明 CMSIS-DSP 特點 CMSIS-DSP CMSIS 的一個子項目,其特點包括: 1. 專門給 Cortex-M 一套通用的信號處理函數。 2. ARM 提供的函數庫擁有超過 60 個函數。 3. 支援包括 q7q15q31 (Note) 以及 floating-point(32 bit)資料型態。 4. 針對 Cortex-M4/M7/M33/M35P SIMD 指令實現並最佳化。 Note:函數庫使用命名為 q7q15q31,分別代表 81632-bit 定點數。 CMSIS-DSP 函數庫項目 CMSIS-DSP 函數庫可分類為下列幾項: 1. 基礎數學函數\快速數學函數\複雜數學函數。 2. 訊號過濾函數。 3. 矩陣函數。 4. 轉置函數。 5. 馬達控制函數。 6. 統計函數。 7. 支撐函數(Support functions)8. 插值函数(Interpolation functions)

HT32 CMSIS-DSP Library 使用指南 - Holtek · HT32 CMSIS-DSP Library使用指南 AN0538TC V1.00 2 / 12 October 18, 2019. 環境建置 本章節介紹範例中使用到的硬體與軟體。

  • Upload
    others

  • View
    54

  • Download
    0

Embed Size (px)

Citation preview

Page 1: HT32 CMSIS-DSP Library 使用指南 - Holtek · HT32 CMSIS-DSP Library使用指南 AN0538TC V1.00 2 / 12 October 18, 2019. 環境建置 本章節介紹範例中使用到的硬體與軟體。

HT32 CMSIS-DSP Library 使用指南

AN0538TC V1.00 1 / 12 October 18, 2019

HT32 CMSIS-DSP Library 使用指南

文件編號:AN0538TC

簡介

CMSIS 是由 ARM 制定的一個軟體的標準介面,CMSIS 全名為“Cortex 微控制器標準軟體介

面(Cortex Microcontroller Software Interface Standard)”,透過標準介面開發人員可以使用相同的

介面控制不同供應商的微控制器,進而縮短開發人員的開發與學習時間,詳細內容請參考

CMSIS 官方網站 http://www.keil.com/pack/doc/CMSIS/General/html/index.html。本文主要說明

CMSIS-DSP 應用在 HT32 系列微控制器,包含環境建置、使用說明等內容。

功能說明

CMSIS-DSP 特點

CMSIS-DSP 是 CMSIS 的一個子項目,其特點包括:

1. 專門給 Cortex-M 一套通用的信號處理函數。

2. ARM 提供的函數庫擁有超過 60 個函數。

3. 支援包括 q7、q15、q31 (Note)以及 floating-point(32 bit)資料型態。

4. 針對 Cortex-M4/M7/M33/M35P 對 SIMD 指令實現並最佳化。

Note:函數庫使用命名為 q7、q15、q31,分別代表 8、16、32-bit 定點數。

CMSIS-DSP 函數庫項目

CMSIS-DSP 函數庫可分類為下列幾項:

1. 基礎數學函數\快速數學函數\複雜數學函數。

2. 訊號過濾函數。

3. 矩陣函數。

4. 轉置函數。

5. 馬達控制函數。

6. 統計函數。

7. 支撐函數(Support functions)。

8. 插值函数(Interpolation functions)。

Page 2: HT32 CMSIS-DSP Library 使用指南 - Holtek · HT32 CMSIS-DSP Library使用指南 AN0538TC V1.00 2 / 12 October 18, 2019. 環境建置 本章節介紹範例中使用到的硬體與軟體。

HT32 CMSIS-DSP Library 使用指南

AN0538TC V1.00 2 / 12 October 18, 2019

環境建置

本章節介紹範例中使用到的硬體與軟體。

硬體

CMSIS-DSP 支援 HT32 全系列,但建議使用者選用 SRAM 大於 4KB 的 MCU,原因是使用

CMSIS-DSP 的範例需要較大的 SRAM。本文以 ESK32-30501 作為舉例,ESK32-30501 所使用

的 MCU 為 HT32F52352。

軟體

使用範例前請先確認已在盛群官方網站下載最新的 Holtek HT32 Firmware Library,下載位置

如圖 1,下載後請將其解壓縮。

圖 1、HT32 Firmware Library 下載網頁

請透過下方連結下載 CMSIS-DSP 範例程式,此範例程式被打包成一個 ZIP 壓縮檔,檔名為

HT32_APPFW_xxxxx_CMSIS_DSP_vn_m.zip。

下載路徑:http://mcu.holtek.com.tw/ht32/app.fw/CMSIS_DSP/

檔案名稱格式說明請看下圖 2:

圖 2、範例程式檔名介紹

Application Code 範例程式並不包含 Firmware Library 相關檔案,因此在開始編譯前,需將

Application Code 及 Firmware Library 解壓縮的檔案,放置到正確的路徑。

Page 3: HT32 CMSIS-DSP Library 使用指南 - Holtek · HT32 CMSIS-DSP Library使用指南 AN0538TC V1.00 2 / 12 October 18, 2019. 環境建置 本章節介紹範例中使用到的硬體與軟體。

HT32 CMSIS-DSP Library 使用指南

AN0538TC V1.00 3 / 12 October 18, 2019

Application Code 包含兩個資料夾分別是 application 與 library,放置路徑如下圖 3,只需將這兩

個資料夾放到 Firmware Library 根目錄下,就可以完成檔案路徑的配置,請參考圖 4。您也可

以選擇將 Application Code 及 Firmware Library 兩個壓縮檔,同時解壓縮到相同路徑,此操作具

有同樣的效果。以此範例來說,解壓縮後在 application 資料夾內會看到 CMSIS_DSP 的目錄。

圖 3、HT32_APPFW_xxxxx_CMSIS_DSP_vn_m.zip 內容

圖 4、解壓縮路徑

檔案結構

Application Code 內主要包含兩個資料夾 library\CMSIS 與 application\CMSIS_DSP,各別說明如下。

Application Code 內的 library\CMSIS 資料夾內容如下。

資料夾名稱 說明

DSP_Lib Application FW Source Code

DSP_Lib\Examples

內有多個 CMSIS-DSP 函數庫的標準範例,由 ARM 提供,這些專案

設定皆用模擬的方式執行,因此不需任何 MCU 就可執行程式,使用

者可以透過執行這些範例進而快速學習使用方法。

DSP_Lib\Source CMSIS-DSP 函數庫的原始碼。

Include 使用 CMSIS-DSP 函數庫必需使用的標頭檔。

Page 4: HT32 CMSIS-DSP Library 使用指南 - Holtek · HT32 CMSIS-DSP Library使用指南 AN0538TC V1.00 2 / 12 October 18, 2019. 環境建置 本章節介紹範例中使用到的硬體與軟體。

HT32 CMSIS-DSP Library 使用指南

AN0538TC V1.00 4 / 12 October 18, 2019

資料夾名稱 說明

Include\arm_common_tables.h 外部(extern)陣列變數的宣告。

Include\arm_const_structs.h 外部常數宣告。

Include\arm_math.h 此檔非常重要,此檔為使用 CMSIS-DSP 函數庫的接口,呼叫任何函

數庫內 API 皆透過 arm_math.h。

Lib\ARM

給 ARMCC 的 CMSIS-DSP 函數庫。

arm_cortexM3l_math.lib (Cortex-M3, Little endian)

arm_cortexM0l_math.lib (Cortex-M0 / M0+, Little endian)

Lib\GCC

給 GCC 的 CMSIS-DSP 函數庫。

libarm_cortexM3l_math.a (Cortex-M3, Little endian)

libarm_cortexM0l_math.a (Cortex-M0 / M0+, Little endian)

application\CMSIS_DSP 內包含使用 HT32 系列 MCU 為平台的 CMSIS_DSP 相關範例,內有多

個範例如下表,並支援 HT32 全系列 IC,開發專案為 Keil 的 MDK_ARM。

資料夾名稱 說明

arm_class_marks_example 展示取得最大值、最小值、期望值、標準差、變異數和矩陣函數。

arm_convolution_example 透過複數型快速傅立葉轉換( Complex FFT)和支撐函數展示迴積分定理。

arm_dotproduct_example 展示透過向量的乘法與加法取得點積。

arm_fft_bin_example 展示透過複數型快速傅立葉轉換、複數強度(Complex Magnitude)和最

大函數模組來計算輸入信號頻域中最大能量窗口(bin)。

arm_fir_example 展示透過 FIR 實現低通濾波。

arm_graphic_equalizer_example 展示透過圖形均衡器(Graphic Equalizer)來改變音質。

arm_linear_interp_example 展示線性插值模組和快速數學模組的用法。

arm_matrix_example 展示矩陣相關計算,包括轉置矩陣、矩陣乘法和反矩陣。

arm_signal_converge_example 透過 NLMS(Normalized Least Mean Square)、FIR 和基礎數學模型展示可

自我調試的 FIR 低通濾波器。

arm_sin_cos_example 展示三角函數的計算。

arm_variance_example 展示透過基礎數學和支撐函數計算變異數。

filter_iir_high_pass_example 展示透過 IIR 實現高通濾波。

測試

本文將以 application\CMSIS_DSP\arm_class_marks_example 作為測試範例,在測試前請確認

ESK32-30501 是否已接上 PC,並且 Application Code 與 Firmware Library 已在正確的位置。

請打開 application\CMSIS_DSP\arm_class_marks_example,執行_CreateProject.bat,如下圖,執

行結束後請打開 MDK_ARMv5(若 Keilv4 請開啟 MDK_ARM),可以發現此範例支援全 HT32

系列,我們使用 ESK32-30501,因此開啟專案 Project_52352.uvprojx。

圖 5、產生專案

Page 5: HT32 CMSIS-DSP Library 使用指南 - Holtek · HT32 CMSIS-DSP Library使用指南 AN0538TC V1.00 2 / 12 October 18, 2019. 環境建置 本章節介紹範例中使用到的硬體與軟體。

HT32 CMSIS-DSP Library 使用指南

AN0538TC V1.00 5 / 12 October 18, 2019

開啟專案後請編譯(快捷鍵“F7”),燒錄(快捷鍵“F8”),進 Debug(快捷鍵“Ctrl+F5”),最後執行

(快捷鍵“F5”)。執行的結果請觀察下列變數。

變數名稱 資料方向 說明 執行結果

testMarks_f32 Input 一個 20×4 的陣列。 —

testUnity_f32 Input 一個 4×1 的陣列。 —

testOutput Output 為 testMarks_f32 與 testUnity_f32 的乘積。 {188,229,210…}

max_marks Output 為 testOutput 陣列內元素的最大值。 364

min_marks Output 為 testOutput 陣列內元素的最小值。 156

mean Output 為 testOutput 陣列內元素的期望值。 212.300003

std Output 為 testOutput 陣列內元素的標準差。 50.9128189

var Output 為 testOutput 陣列內元素的變異數。 2592.11523

使用說明

整合

本章節將介紹如何整合 CMSIS-DSP 到使用者的專案。

步驟 1:

首先在專案的設定內加入新的 Define 符號,M0 請加入“ARM_MATH_CM0PLUS”,M3 請

加入“ARM_MATH_CM3”設定步驟為(1)Options of Target(快捷鍵“Alt+F7”),(2)選 C/C++的頁

籤,(3)在 Define 加入新的定義。如下圖。

圖 6、加新 define

Page 6: HT32 CMSIS-DSP Library 使用指南 - Holtek · HT32 CMSIS-DSP Library使用指南 AN0538TC V1.00 2 / 12 October 18, 2019. 環境建置 本章節介紹範例中使用到的硬體與軟體。

HT32 CMSIS-DSP Library 使用指南

AN0538TC V1.00 6 / 12 October 18, 2019

步驟 2:

增加 Include 路徑,同樣在 C/C++的頁籤,請點選 Include Paths 旁邊的按鈕,將彈出 Include

路徑的視窗,請增加新路徑“..\..\..\..\library\CMSIS\Include”。如下圖。

圖 7、加新 include 路徑

步驟 3(Option):

加入函數庫,請點選按鈕 Manage Project Items 如下圖,若是找不到此鈕可以點選 Window

→ Reset View to Defaults → Reset,此時 IDE 會將視窗配置回到 Default 設定,就可以找到

按鈕 Manage Project Item。

圖 8、加新資料夾 1

Page 7: HT32 CMSIS-DSP Library 使用指南 - Holtek · HT32 CMSIS-DSP Library使用指南 AN0538TC V1.00 2 / 12 October 18, 2019. 環境建置 本章節介紹範例中使用到的硬體與軟體。

HT32 CMSIS-DSP Library 使用指南

AN0538TC V1.00 7 / 12 October 18, 2019

透過下圖紅框內的功能增加“CMSIS-DSP”資料夾,並透過上移的功能將其移到 CMSIS 下

方,完成後關閉 Manage Project Item。

圖 9、加新資料夾 2

Step 4:

快速點擊兩下左邊樹狀圖的 CMSIS-DSP 資料夾(若是跳過 Step3,請任意找個資料夾,例

如:User 或 CMSIS 等),並加入 CMSIS-DSP 函數庫,如果是 M0+請選\library\CMSIS\Lib\

ARM\arm_cortexM0l_math.lib,若是 M3 請選\library\CMSIS\Lib\ARM\arm_cortexM3l_math.lib,

完成後會在 CMSIS-DSP 資料夾內發現函數庫 arm_cortexMxl_math.lib,如下圖。

圖 10、加新資料夾 3

Page 8: HT32 CMSIS-DSP Library 使用指南 - Holtek · HT32 CMSIS-DSP Library使用指南 AN0538TC V1.00 2 / 12 October 18, 2019. 環境建置 本章節介紹範例中使用到的硬體與軟體。

HT32 CMSIS-DSP Library 使用指南

AN0538TC V1.00 8 / 12 October 18, 2019

Step5:

最後請在 main.c 將標頭檔“arm_math.h”加入,如下圖,此時完成所有的整合設定。

圖 11、加入“arm_math.h”

Low Pass Filter – FIR

此章節將介紹 applcation\CMSIS_DSP\arm_fir_example,透過此範例來展示如何設定 FIR 濾波

器,並透過 FIR 濾波器移除高頻訊號。輸入訊號由 1kHz 的弦波與 15kHz 的弦波組成,訊號

的取樣頻率 48kHz,透過 FIR 低通濾波器將 6kHz 以上的訊號移除,使其輸出 1kHz 的訊號。

範例的程式可以分成幾個部分:

1. 初始化,初始化 FIR,使用到的 API 如下:

void arm_fir_init_f32 (arm_fir_instance_f32 *S, uint16_t numTaps, float32_t *pCoeffs,

float32_t *pState, uint32_t blockSize);

S:FIR 濾波器的結構。

numTaps:濾波器的階數(濾波器係數的個數),此範例 numTaps =29。

pCoeffs:濾波器的係數,此範例共 29 個,由 MATLAB 計算而得。

pState:狀態指標。

blockSize:代表一次處理的樣本數。

2. 低通濾波,透過呼叫 FIR 的 API,每次處理 32 個樣本,總共處理 320 個樣本,使用到的

API 如下:

void arm_fir_f32 (const arm_fir_instance_f32 *S, float32_t *pSrc, float32_t *pDst, uint32_t

blockSize);

S:FIR 濾波器的結構。

pSrc:輸入訊號,此範例輸入 1kHz 與 15kHz 的混合訊號。

pDst:輸出訊號,我們預期輸出 1kHz 訊號。

blockSize:代表一次處理的樣本數。

Page 9: HT32 CMSIS-DSP Library 使用指南 - Holtek · HT32 CMSIS-DSP Library使用指南 AN0538TC V1.00 2 / 12 October 18, 2019. 環境建置 本章節介紹範例中使用到的硬體與軟體。

HT32 CMSIS-DSP Library 使用指南

AN0538TC V1.00 9 / 12 October 18, 2019

3. 資料驗證,透過 MATLAB 取得濾波的結果作為參考值,並透過 CMSIS-DSP 濾波的結果

為實際值,兩個結果來比較,目的為驗證輸出結果是否正確。

float arm_snr_f32(float *pRef, float *pTest, uint32_t buffSize)

pRef:參考值,由 MATLAB 產生。

pTest:實際值,由 CMSIS-DSP 產生。

blockSize:代表一次處理的樣本數。

執行結果如下圖,Input 是過濾波器之前,Output 是經過濾波後的結果,Y 軸為訊號的振

幅,樣本的取樣頻率是 48kHz,因此 X 軸數字加一,代表時間加 20.833us(48kHz)。從圖

12 與圖 13 比較可以發現 15kHz 被消除,只剩 1kHz 的訊號。

圖 12、Input data

圖 13、Output data

Page 10: HT32 CMSIS-DSP Library 使用指南 - Holtek · HT32 CMSIS-DSP Library使用指南 AN0538TC V1.00 2 / 12 October 18, 2019. 環境建置 本章節介紹範例中使用到的硬體與軟體。

HT32 CMSIS-DSP Library 使用指南

AN0538TC V1.00 10 / 12 October 18, 2019

High Pass Filter – IIR

此章節將介紹 applcation\CMSIS_DSP\ filter_iir_high_pass_example,透過此範例來展示如何設定

IIR 濾波器,並透過 IIR 濾波器移除低頻訊號。輸入訊號由 1Hz 的弦波與 30Hz 的弦波組成,

訊號的取樣頻率 100,總共取 480 個樣本點,透過 IIR 高通濾波器將 7Hz 以下的訊號移除。

範例的程式可以分成幾個部分:

1. 產生 480 筆樣本。樣本 0 到 159 為 30Hz 的弦波,樣本 160 到 319 為 1Hz 的弦波,樣本

320 到 479 為 30Hz 的弦波,

2. 初始化,初始化 IIR,使用到的 API 如下:

void arm_biquad_cascade_df1_init_f32 (arm_biquad_casd_df1_inst_f32 *S, uint8_t numStages,

float32_t *pCoeffs, float32_t *pState));

S:IIR 濾波器的結構。

numStages:過濾器中的二階階段數,此範例 numStages =1。

pCoeffs:濾波器的係數,此範例共 5 個。

pState:狀態指標。

3. 高通濾波,透過呼叫 IIR 的 API,每次處理 1 個樣本,總共處理 480 個樣本,使用到的

API 如下:

void arm_biquad_cascade_df1_f32 (const arm_biquad_casd_df1_inst_f32 *S, float32_t *pSrc,

float32_t *pDst, uint32_t blockSize);

S:IIR 濾波器的結構。

pSrc:輸入訊號,此範例輸入 1Hz 與 30kHz 的混合訊號。

pDst:輸出訊號,我們預期輸出只剩 30kHz 訊號。

blockSize:代表一次處理的樣本數。

4. 結果輸出,透過 printf 將輸入訊號與輸出訊號輸出到 PC。

執行結果如下圖,Input 是過濾波器之前,Output 是經過濾波後的結果,Y 軸為訊號的振

幅,樣本的取樣頻率是 100Hz,因此 X 軸數字加一,代表時間加 10ms(100Hz)。從圖 14

與圖 15 比較可以發現 1Hz 被消除,只剩 30Hz 的訊號。

圖 14、Output data

Page 11: HT32 CMSIS-DSP Library 使用指南 - Holtek · HT32 CMSIS-DSP Library使用指南 AN0538TC V1.00 2 / 12 October 18, 2019. 環境建置 本章節介紹範例中使用到的硬體與軟體。

HT32 CMSIS-DSP Library 使用指南

AN0538TC V1.00 11 / 12 October 18, 2019

圖 15、Output data

注意事項

使用 CMSI-DSP 函數庫時請特別注意編譯後的記憶體大小,請在測試前確認記憶體沒有溢位。

結論

CMSIS-DSP 對於訊號的處理以及數學計算部分有強大的能力,建議諸位讀者可善加利用。

參考資料

參考網站 http://www.keil.com/pack/doc/CMSIS/General/html/index.html。

版本及修改資訊

Date 日期 Author 作者 Issue 發行

2019.09.03 王宏綸 第一版

Page 12: HT32 CMSIS-DSP Library 使用指南 - Holtek · HT32 CMSIS-DSP Library使用指南 AN0538TC V1.00 2 / 12 October 18, 2019. 環境建置 本章節介紹範例中使用到的硬體與軟體。

HT32 CMSIS-DSP Library 使用指南

AN0538TC V1.00 12 / 12 October 18, 2019

免責聲明

本網頁所載的所有資料、商標、圖片、連結及其他資料等 (以下簡稱「資料」),只供參考之

用,盛群半導體股份有限公司及其關聯企業 (以下簡稱「本公司」) 將會隨時更改資料,並

由本公司決定而不作另行通知。雖然本公司已盡力確保本網頁的資料準確性,但本公司並

不保證該等資料均為準確無誤。本公司不會對任何錯誤或遺漏承擔責任。

本公司不會對任何人士使用本網頁而引致任何損害 (包括但不限於電腦病毒、系統故障、資

料損失) 承擔任何賠償。本網頁可能會連結至其他機構所提供的網頁,但這些網頁並不是由

本公司所控制。本公司不對這些網頁所顯示的內容作出任何保證或承擔任何責任。

責任限制

在任何情況下,本公司並不須就任何人由於直接或間接進入或使用本網站,並就此內容上

或任何產品、資訊或服務,而招致的任何損失或損害負任何責任。

管轄法律

本免責聲明受中華民國法律約束,並接受中華民國法院的管轄。

免責聲明更新

本公司保留隨時更新本免責聲明的權利,任何更改於本網站發佈時,立即生效。