【调试记录1】提高MC3172浮点运算能力,IQmath库的获取与导入使用教程

【调试记录1】提高MC3172浮点运算能力,IQmath库的获取与导入使用教程

背景:
TI针对没有浮点运算器的定点DSP推出了IQmath库,在使用Q格式对数据进行分析和处理的过程中,十分方便,代码也变得更加简洁。
而在RISC-V架构的也有人实现或者一致了IQmath库。本文目的在于获取RISC架构的IQmath库,并在MC3172 MCU芯片上导入与使用。

MC3172芯片是感芯科技公司新推出的一款单核多线程的MC3172芯片。点击进入官网链接

工程模板准备

打开官方网站,前往以下链接:
图片1
在Gitee下载【工程模板文件】并解压工程模板,得到如下文件:
在这里插入图片描述

安装 MounRiver Studio

一路Next即可。

IQmath库的获取

打开工程文件:在这里插入图片描述
在这里插入图片描述
导出后,解压得到两个文件:.a 和.h文件
在这里插入图片描述

IQmath库的导入

在这里插入图片描述
这里新建两个文件夹,include放.h文件,lib放.a文件,直接如下拖进来,选择复制方式。
在这里插入图片描述

对.a文件进行配置:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
配置好后,如下:
在这里插入图片描述

在项目中使用

打开main.c引入头文件:
在这里插入图片描述
打开头文件,可以见到有许多中文注释,并介绍了函数的作用,如下:
在这里插入图片描述

IQmath库的使用与测试

详细的使用介绍,见文末提供的资料文件。
在这里,通过计算三角函数sin,cos进行性能速度对比,通过计算同样次数的三角函数,并且进行IO电平反转,通过一个LED灯或者直接测量IO输出的频率,即可对比库函数的浮点计算与Q格式计算速度。

IO控制实现:

led.c文件

在这里插入代码片#include "../include/led.h"

void Led_Init(u32 gpio_sel,u32 gpio_pin)
{
    INTDEV_SET_CLK_RST(gpio_sel,(INTDEV_RUN|INTDEV_IS_GROUP0|INTDEV_CLK_IS_CORECLK_DIV2));

    GPIO_SET_OUTPUT_EN_VALUE(gpio_sel,(gpio_pin),GPIO_SET_ENABLE);

    LED_OFF(gpio_sel,(gpio_pin));

}
/*
 * led.h
 *
 *  Created on: 2022年7月31日
 *      Author: 四维度
 */

#ifndef USER_CODE_LED_H_
#define USER_CODE_LED_H_

#include "../MC3172/MC3172.h"

#define LED_ON(gpio_sel,gpio_pin)  GPIO_SET_OUTPUT_PIN_TO_0(gpio_sel,gpio_pin);
#define LED_OFF(gpio_sel,gpio_pin)  GPIO_SET_OUTPUT_PIN_TO_1(gpio_sel,gpio_pin);

void Led_Init(u32 gpio_sel,u32 gpio_pin);

#define LED0_ADDR GPIOA_BASE_ADDR
#define LED0_Pin  GPIO_PIN6

#define LED0_Init() Led_Init(LED0_ADDR,LED0_Pin)
#define LED0_ON     LED_ON(LED0_ADDR,LED0_Pin)
#define LED0_OFF    LED_OFF(LED0_ADDR,LED0_Pin)





#endif /* USER_CODE_LED_H_ */

文件路劲如下:
在这里插入图片描述
在main添加头文件,准备调用:
在这里插入图片描述
先对IQmath测试:
在这里插入图片描述


void thread0_main(void)
{
    u32 i,j,k;
    _iq s,c;
    LED0_Init();
    while(1){
        LED0_ON
        for (i = 0; i < 2000; ++i){ 
            for (j = 0; j < 2000; ++j){
                for (k = 0; k < 2000; ++k){
                    c=_IQcosPU(_IQ(3.1415926));
                    s=_IQsinPU(_IQ(3.1415926));
                }
            }
        }
        LED0_OFF 
        for (i = 0; i < 2000; ++i){ 
            for (j = 0; j < 2000; ++j){
                for (k = 0; k < 2000; ++k){
                    c=_IQcosPU(_IQ(3.1415926));
                    s=_IQsinPU(_IQ(3.1415926));
                }
            }
        }
    }
    thread_end();
}

再对math库函数测试:

void thread0_main(void)
{
    u32 i,j,k;
    float s,c;
    LED0_Init();
    while(1){
        LED0_ON
        for (i = 0; i < 2000; ++i){
            for (j = 0; j < 2000; ++j){
                for (k = 0; k < 2000; ++k){
                    c=cos(_IQ(3.1415926));
                    s=sin(_IQ(3.1415926));
                }
            }
        }
        LED0_OFF
        for (i = 0; i < 2000; ++i){
            for (j = 0; j < 2000; ++j){
                for (k = 0; k < 2000; ++k){{
                    c=cos(_IQ(3.1415926));
                    s=sin(_IQ(3.1415926));
                }
            }
        }
    }
    }
    thread_end();
}

两次测试程序分别下载到开发板,通过IO口PA6接上LED或者示波器即可观察到对比:
在这里插入图片描述
本文到这里结束,测试过程文件以及IQmath手册文末下载,感谢您的观看。
https://gitee.com/Jim-Chenming/mc3172/tree/master/
点击跳转

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值