91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

CW32L012實(shí)現(xiàn)CORDIC模塊微秒級快速運(yùn)算SIN、COS等三角函數(shù)

CW32生態(tài)社區(qū) ? 來源:CW32生態(tài)社區(qū) ? 2026-01-05 16:56 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

CW32L012具有CORDIC 協(xié)處理器,能夠?qū)崿F(xiàn)微秒級快速計算三角函數(shù)功能。

一、CW32L012的CORDIC運(yùn)算原理

CORDIC是一種坐標(biāo)旋轉(zhuǎn)數(shù)字計算機(jī)算法。CW32L012的CORDIC提供某些數(shù)學(xué)函數(shù)的硬件加速,特別是三角函數(shù),通常用于電機(jī)控制、計量、信號處理和許多其他應(yīng)用。與軟件實(shí)現(xiàn)相比,它加快了這些功能的計算速度,允許較低的工作頻率,或釋放處理器周期以執(zhí)行其他任務(wù)。

CW32L012的CORDIC支持余弦 cos、正弦 sin、相位角 atan2、模 hypot、反正切 atan、雙曲余弦 cosh、雙曲正弦 sinh、雙曲反正切 atanh 函數(shù)運(yùn)算。迭代次數(shù)可進(jìn)行配置(范圍 6~66)。

具體運(yùn)算定義如下:

圖片

wKgZO2lU852AIdU6AAA1AKOGvSI167.jpg

關(guān)于 q1.15q1.31

? 用 sint16/sint32 代表 [-1,1)之間的實(shí)數(shù)

? sint16 對應(yīng)的 q1.15 = sint16 / pow(2,15)

? sint32 對應(yīng)的 q1.31 = sint32 / pow(2,31)

關(guān)于迭代次數(shù):

? q1.15 建議迭代 16-20 次,q1.31 建議迭代 24-32 次。

關(guān)于啟動:

? 只有一個數(shù)據(jù)輸入(x 或 y 或 z)時,寫入該數(shù)據(jù)即啟動運(yùn)算。

? 需要兩個數(shù)據(jù)輸入(x 和 y)時,寫入 y 啟動運(yùn)算。

CORDIC 存在 2 個狀態(tài)標(biāo)志,用來指示 CORDIC 的當(dāng)前工作狀態(tài),包括工作狀態(tài)標(biāo)志 BUSY、運(yùn)算完成標(biāo)志忙標(biāo)志(CORDIC_CSR.BUSY)

CORDIC_CSR.BUSY 標(biāo)志位指示當(dāng)前 CORDIC 是否處于運(yùn)算結(jié)束或空閑狀態(tài)。

當(dāng)CORDIC CSR.BUSY 為 0 時,表示 CORDIC 處于運(yùn)算結(jié)束或空閑狀態(tài),可以讀取結(jié)果或開始新的運(yùn)算;當(dāng)CSR.BUSY 為 1 時,表示 CORDIC 處于忙碌狀態(tài),當(dāng)前數(shù)據(jù)運(yùn)算正在進(jìn)行中,無法提供運(yùn)算結(jié)果或開始新的運(yùn)算。

運(yùn)算完成標(biāo)志位CORDIC_CSR.EOC 指示 CORDIC 運(yùn)算完成。EOC 標(biāo)志位被置位并不影響繼續(xù)進(jìn)行新一輪運(yùn)算,無論新一輪運(yùn)算是什么類型。當(dāng)新一輪運(yùn)算被啟動時,標(biāo)志位自動清零并根據(jù)新一輪運(yùn)算的情況重新進(jìn)行指示。

二、編程實(shí)現(xiàn)

初始化定義:

cordic_init_t init = {
        .func = CORDIC_FUNC_COS,  // 選擇余弦函數(shù)
        .scale = 0,              // 不使用擴(kuò)展范圍
        .format = CORDIC_FORMAT_Q1_31, // 使用q1.31格式
        .iter = CORDIC_ITER_20,  // 迭代次數(shù)
        .comp = 1,               // 硬件補(bǔ)償伸縮因子
        .ie = 0,                 // 禁用中斷
        .dmaeoc = 0,             // 禁用DMA
        .dmaidle = 0             // 禁用DMA空閑
    };  
  CORDIC_Init(&init);  //sin cos運(yùn)算初始化

角度定義

int32_t angle; 
angle = float_to_q1_31(0.167);

若計算45度的正余弦,則令angle=0.25(即1/4)。這樣運(yùn)算的參數(shù)為 PI/4(45度),寫入角度參數(shù)前需要將數(shù)據(jù)轉(zhuǎn)化為Q1.31格式或Q1.15格式。

若計算30度的正余弦, 則令angle=0.167(即1/6)。這樣運(yùn)算的參數(shù)為PI/6 (30度),寫入角度參數(shù)前需要將數(shù)據(jù)轉(zhuǎn)化為Q1.31格式或Q1.15格式。

將浮點(diǎn)數(shù)轉(zhuǎn)換為Q1.31格式,函數(shù)定義如下:

int32_t float_to_q1_31(float value) {
    return (int32_t)round(value * 2147483648.0); // 2^31
}

運(yùn)算

while (CORDIC_GetStatus().busy);//運(yùn)算前判斷BUSY狀態(tài) 
CW_CORDIC->Z =angle;   // 寫入Z寄存器啟動運(yùn)算
while (!CORDIC_GetStatus().eoc);  // 等待運(yùn)算完成,完成時標(biāo)志硬件置1,讀取運(yùn)算結(jié)果時硬件清0

讀取結(jié)果

int32_t y1,y2;
float  y11,y22; 
y1=CW_CORDIC->Y;// 正弦結(jié)果在Y寄存器 ,Q1.31格式 
y2=CW_CORDIC->X;// 余弦結(jié)果在X寄存器 Q1.31格式 
y11=q1_31_to_float(y1);   //正弦結(jié)果轉(zhuǎn)浮點(diǎn)數(shù),可根據(jù)需要使用
y22=q1_31_to_float(y2);   //余弦結(jié)果轉(zhuǎn)浮點(diǎn)數(shù),可根據(jù)需要使用 

其中Q1.31格式的定點(diǎn)數(shù)轉(zhuǎn)為浮點(diǎn)數(shù)函數(shù)定義如下:

float q1_31_to_float(int32_t value) {
    return (float)value / 2147483648.0; // 2^31
}

Q1.15格式的定點(diǎn)數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)函數(shù)定義如下:

float q1_15_to_float(int32_t value)
{
    return (float)value / 32768.0f;
}

參考例程

CW32L012的標(biāo)準(zhǔn)庫文件夾下有參考例程,可以直接運(yùn)行。標(biāo)準(zhǔn)庫文件可在武漢芯源半導(dǎo)體有限公司的官方網(wǎng)址上直接下載(資料下載固件庫)。

例程路徑如下:

CW32L012_StandardPeripheralLib_V1.0.3ExamplesCORDICcordic_cosMDK

MDK工程打開示意圖如下:

圖片

該例程可以在CW32L012的最小系統(tǒng)架構(gòu)中運(yùn)算。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    RX系列三角函數(shù)單元(TFU)的使用介紹

    硬件加速器三角函數(shù)單元(Trigonometric Function Unit)能夠高速處理三角函數(shù)sin、cos、arctan和sqrt(x2+y2)
    的頭像 發(fā)表于 12-04 12:25 ?4357次閱讀
    RX系列<b class='flag-5'>三角函數(shù)</b>單元(TFU)的使用介紹

    怎么在Hightec編譯環(huán)境中調(diào)用三角函數(shù),是需要包含某些庫嗎?

    怎么在Hightec編譯環(huán)境中調(diào)用三角函數(shù),sin(),cos(),tan(),求教,是需要包含某些庫嗎?
    發(fā)表于 02-18 08:44

    堅持繼續(xù)布局32位MCU,進(jìn)一步完善產(chǎn)品陣容,96Mhz主頻CW32L012新品發(fā)布!

    (EAU),可以提供部分?jǐn)?shù)學(xué)函數(shù)、算術(shù)運(yùn)算的硬件加速,特別適用于電機(jī)控制、電源、計量、信號處理應(yīng)用。 同時,CW32L012 是基于 eFlash 的單芯片低功耗微控制器,集成了雙1
    發(fā)表于 07-16 16:32

    三角函數(shù)的查表法

    在單片機(jī)運(yùn)算中,以整數(shù)形式或說定點(diǎn)數(shù)形式進(jìn)行運(yùn)算會比以浮點(diǎn)數(shù)形式運(yùn)算快。電機(jī)控制中,經(jīng)常需要用到三角函數(shù),正弦,余弦,或者正切,求解這一類函數(shù)
    發(fā)表于 11-19 08:06

    MATLAB三角函數(shù)命令

    MATLAB三角函數(shù)命令Sin 正弦 Sinh 雙曲正弦 Asin 反正弦 Asinh 反雙曲正弦 Cos 余弦 Cosh 雙曲余弦 Acos 反余弦 Acosh 反雙曲余弦 Tan 正切&
    發(fā)表于 09-22 16:04

    請教高手求解方程組含有三角函數(shù)

    請教高手求解方程組含有三角函數(shù)方程如下 :cos(θ2+θ3)cosθ1Px+cos(θ2+θ3)sinθ1Py+
    發(fā)表于 03-17 14:35

    ARM7如何實(shí)現(xiàn)三角函數(shù)

    ARM7中如何編程實(shí)現(xiàn)三角函數(shù)sin,cos,軟件用的是TKStudio,求大神
    發(fā)表于 11-12 16:31

    請問一下,28035的cla支持三角函數(shù)運(yùn)算

    請問一下,28035的cla支持三角函數(shù)運(yùn)算嗎,為什么使用sin函數(shù)時,編譯有錯,那該怎么使用三角函數(shù)
    發(fā)表于 05-14 00:58

    labview中的三角函數(shù)問題

    我想使用三角函數(shù)中的余弦函數(shù)(輸入是角度的那種)我試了一下,發(fā)現(xiàn)cos90°算出來不是0,為什么呀,算別的角度是對的,就是算值等于0的度數(shù)會有問題。用了弧度角度換算、公式節(jié)點(diǎn)、直接輸入π/2,這種方法出來都不是0
    發(fā)表于 04-09 14:18

    基于DSP的三角函數(shù)快速計算

    基于DSP的三角函數(shù)快速計算
    發(fā)表于 04-07 14:33 ?53次下載
    基于DSP的<b class='flag-5'>三角函數(shù)</b><b class='flag-5'>快速</b>計算

    三角函數(shù)arcranx運(yùn)算電路

    三角函數(shù)arcranx運(yùn)算電路
    發(fā)表于 04-09 10:16 ?3073次閱讀
    反<b class='flag-5'>三角函數(shù)</b>arcranx<b class='flag-5'>運(yùn)算</b>電路

    利用Cordic算法來計算三角函數(shù)的值

    運(yùn)算,就能計算常用三角函數(shù)值,如SinCos,Sinh,Cosh函數(shù)。 J. Walthe
    發(fā)表于 11-17 16:37 ?7671次閱讀
    利用<b class='flag-5'>Cordic</b>算法來計算<b class='flag-5'>三角函數(shù)</b>的值

    如何使用Cordic算法C語言實(shí)現(xiàn)三角函數(shù)的計算

    三角函數(shù)的計算是個復(fù)雜的主題,有計算機(jī)之前,人們通常通過查找三角函數(shù)表來計算任意角度的三角函數(shù)的值。這種表格在人們剛剛產(chǎn)生三角函數(shù)的概念的時候就已經(jīng)有了,它們通常是通過從已知值(比如
    發(fā)表于 04-25 18:27 ?9次下載
    如何使用<b class='flag-5'>Cordic</b>算法C語言<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>三角函數(shù)</b>的計算

    CW32L012與STM32F103的三角運(yùn)算性能對比

    沒有硬件浮點(diǎn)運(yùn)算單元。 但在運(yùn)算三角函數(shù)時,CW32L012支持CORDIC算法。 二、 三角
    的頭像 發(fā)表于 12-29 15:32 ?2303次閱讀
    <b class='flag-5'>CW32L012</b>與STM32F103的<b class='flag-5'>三角</b><b class='flag-5'>運(yùn)算</b>性能對比

    CW32L012與STM32G431的CORDIC三角函數(shù)運(yùn)算性能對比

    CORDIC協(xié)處理器的三角運(yùn)算性能對比。對比結(jié)果出乎意料。 一、硬件架構(gòu) 二、運(yùn)算100W次SIN30度與
    的頭像 發(fā)表于 12-29 15:55 ?2472次閱讀
    <b class='flag-5'>CW32L012</b>與STM32G431的<b class='flag-5'>CORDIC</b><b class='flag-5'>三角函數(shù)</b><b class='flag-5'>運(yùn)算</b>性能對比