查看: 2781|回复: 2

[原创] LPC55S69 POWERQUAD加速数学运算(内附SDK API文档)

[复制链接]
  • TA的每日心情
    无聊
    2021-12-29 19:06
  • 签到天数: 47 天

    [LV.5]常住居民I

    49

    主题

    188

    帖子

    21

    金牌会员

    Rank: 6Rank: 6

    积分
    1371
    最后登录
    2024-3-21
    发表于 2020-1-12 18:35:11 | 显示全部楼层 |阅读模式
    本帖最后由 day_day 于 2020-1-12 18:51 编辑

    (一)POWERQUAD
    POWERQUAD是NXP为LPC5500设计的数学运算加速库,其能够加速包括除法、开放、自然指数、三角函数等常见数学运算,另外还支持矩阵运算和FFT变换等加速。

    powerquad.png



    (二)使用方法
    POWERQUAD并非直接兼容替代math库,而是需要调用其函数,或者替代CMSIS-DAP库。
    根据API文档:
    该库一种是完全自定义的函数,比如PQ_CosF32
    还有一种是兼容替代的CMSIS-DSP库,比如PQ_CosQ31

    1、启动FPU
    加入宏定义:__FPU_PRESENT=1
    配置硬件FPU浮点单元
    2、加入相关文件:
    fsl_powerquad.h、fsl_powerquad.c、fsl_powerquad_data.h、fsl_powerquad_data.c、fsl_powerquad_math.c
    3、初始化powerquad
    PQ_Init(POWERQUAD);
    4、调用数学函数
    PQ_CosF32(&input, &result);

    (三)实验
    通过实验,观察POWERQUAD到底有多牛逼:
    1. CTIMER0->TC = 0;
    2.         CTIMER_StartTimer(CTIMER0);
    3.         float input = 3.1415926535898/6,result=0;
    4.         for(int i=0;i<100;i++)
    5.         {

    6.                 PQ_CosF32(&input, &result);
    7.         }
    8.         CTIMER_StopTimer(CTIMER0);
    9.         memset(reportStr, 0, sizeof(reportStr));
    10.             sprintf(reportStr, "report:%f;counter time:%d\r\n",result,CTIMER_GetTimerCountValue(CTIMER0));
    11.             PRINTF_UART0(reportStr);

    12.             CTIMER0->TC = 0;
    13.             CTIMER_StartTimer(CTIMER0);
    14.             for(int i=0;i<100;i++)
    15.             {
    16.                     result=cos(input);
    17.             }
    18.             CTIMER_StopTimer(CTIMER0);
    19.             memset(reportStr, 0, sizeof(reportStr));
    20.             sprintf(reportStr, "report:%f;counter time:%d\r\n",result,CTIMER_GetTimerCountValue(CTIMER0));
    21.             PRINTF_UART0(reportStr);
    复制代码



    。。。


    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2021-12-29 19:06
  • 签到天数: 47 天

    [LV.5]常住居民I

    49

    主题

    188

    帖子

    21

    金牌会员

    Rank: 6Rank: 6

    积分
    1371
    最后登录
    2024-3-21
     楼主| 发表于 2020-1-12 18:45:07 | 显示全部楼层
    我也不明白为什么写着写着会卡bug,什么都输入不进对话框,只能重启一段:


    我们通过定时器观察对比POWERQUAD和通用的math函数有多大区别。上述的代码运行效果如下:
    powerquad-效果.png

    简直可以说是虐菜了,运算一百次,POWERQUAD加速不到50us,而math足足需要4ms,完全不是一个数量级的。平均到每一次,加速后只需要半us,而后者需要40us,在一些复杂场景可能会严重影响实时性。



    附上SDK API文档,2.6.3版本。

    SDK_2.6.3_LPCXpresso55S69_doc.zip (12.23 MB, 下载次数: 191)
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    656

    主题

    6312

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    20064
    最后登录
    2024-4-28
    发表于 2020-1-13 09:54:25 | 显示全部楼层
    谢谢分享!!
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-29 04:00 , Processed in 0.124276 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表