硬件加速器三角函數(shù)單元(Trigonometric Function Unit)能夠高速處理三角函數(shù)sin、cos、arctan和sqrt(x2+y2)函數(shù)的運(yùn)算,可顯著減少CPU負(fù)荷,在電機(jī)的矢量控制運(yùn)算中非常有用。
本文介紹如何使用帶有CC-RX編譯器的三角函數(shù)單元。TFU現(xiàn)有兩個(gè)版本TFUv1和TFUv2,配備TFU的芯片型號(hào)如下表所示。
三角函數(shù)單元TFU版本
配備TFU的芯片
TFUv1
RX72T/RX72M/RX72N
TFUv2
RX26T
1. TFUv1的使用說(shuō)明
在工程中選擇[Project] → [C/C++ Project Settings] → [Tool Settings] → [Compiler] → [Optimization] → [Advanced],如果器件有TFU,則會(huì)有選項(xiàng)"Execution method of library function that can use trigonometric function unit",如需使用TFU,選擇"Use trigonometric function unit ",如圖1所示。
圖1 TFU選擇設(shè)置
如上設(shè)置后,標(biāo)準(zhǔn)數(shù)學(xué)庫(kù)函數(shù)sinf()、cosf()、atan2f()和hypotf()的計(jì)算將由TFU執(zhí)行,如圖2中代碼所示。由于TFU可以同時(shí)計(jì)算sin和cos、arctan和sqrt(x2+y2),所以CC-RX編譯器對(duì)相同輸入值的sin和cos、arctan和sqrt(x2+y2)可使用同時(shí)計(jì)算功能,以進(jìn)一步提高運(yùn)算速度。可以使用函數(shù)__sincosf()和__atan2hypotf()來(lái)同時(shí)計(jì)算,如圖3中代碼所示。
圖2 使用TFU的代碼示例
圖3 TFU同時(shí)計(jì)算代碼示例
2. TFUv2的使用說(shuō)明
三角函數(shù)單元TFUv1已經(jīng)通過(guò)進(jìn)一步的改進(jìn)升級(jí)到TFUv2。TFUv2與TFUv1相比有以下改進(jìn):
1單精度浮點(diǎn)數(shù)計(jì)算速度的進(jìn)一步提升,如圖4所示
圖4 計(jì)算速度對(duì)比
2支持定點(diǎn)類(lèi)型的計(jì)算
在TFUv2中,單精度浮點(diǎn)數(shù)的操作與TFUv1中相同;對(duì)于定點(diǎn)數(shù)據(jù)類(lèi)型,使用內(nèi)部函數(shù):
__sinfx((int32_t)(x)) / __cosfx((int32_t)(x))
__atan2fx((int32_t)(x), (int32_t)(y)) / __hypotfx((int32_t)(x), (int32_t)(y))
或者同時(shí)計(jì)算的函數(shù):
__sincosfx((int32_t)(x), (int32_t *)(y), (int32_t *)(z))
__atan2hypotfx((int32_t)(w), (int32_t)(x), (int32_t *)(y), (int32_t *)(z))
對(duì)于定點(diǎn)數(shù)據(jù),可以更改輸入/輸出的單位和格式。如果使用Smart Configurator,選擇scfg文件,在[Components]→[r_bsp]中選擇"Enable initilize function for TFU (fixed-point numbers)"為"Enabled",下面有三個(gè)選項(xiàng)可以修改,如圖5所示。如果沒(méi)有使用Smart Configurator,可以在硬件初始化的時(shí)候加入TFU的FXSCIOC和FXATIOC寄存器的設(shè)定來(lái)修改輸入/輸出的單位和格式。
圖5 定點(diǎn)數(shù)據(jù)的單位和格式修改
3支持重入
TFUv2支持重入(TFUv1不支持),會(huì)在每個(gè)中斷函數(shù)的入口和出口生成保存和恢復(fù)代碼,但是會(huì)減慢處理速度。因此,如果不需要重入,可以禁止保存和恢復(fù)代碼的生成。如果只是一個(gè)特定的中斷禁止重入,可以在中斷函數(shù)的申明中寫(xiě)"no_tfu"
#pragma interrupt func(no_tfu)
也可以使用選項(xiàng)禁止所有中斷功能的保存和恢復(fù),選擇[Project] → [C/C++ Project Settings] → [Common] → [CPU],取消選中[Saves and restores the output by trigonometric function unit in interrupt functions],如圖6所示。
圖6 TFU取消重入設(shè)置
在圖6設(shè)置下,如果僅對(duì)某個(gè)特定中斷允許重入,可以在中斷函數(shù)的申明中寫(xiě)"tfu"
#pragma interrupt func(tfu)
結(jié)合以上內(nèi)容,對(duì)于內(nèi)部配備硬件加速單元TFU的芯片,建議在電機(jī)矢量控制的運(yùn)算中使用TFU,從而提高芯片在電機(jī)控制方面的性能。
-
電機(jī)控制
+關(guān)注
關(guān)注
3534文章
1876瀏覽量
268735 -
加速器
+關(guān)注
關(guān)注
2文章
796瀏覽量
37838 -
編譯器
+關(guān)注
關(guān)注
1文章
1623瀏覽量
49108 -
三角函數(shù)
+關(guān)注
關(guān)注
0文章
13瀏覽量
6725
原文標(biāo)題:RX系列三角函數(shù)單元(TFU)的使用介紹
文章出處:【微信號(hào):瑞薩MCU小百科,微信公眾號(hào):瑞薩MCU小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論