你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】教你如何在STM32中使用DSP指令

[复制链接]
STMCU小助手 发布时间:2021-9-18 13:07
01 DSP简介
$ |' n& ]' L  D0 X3 A' u提到DSP,作为电子专业的学生,大部分第一时间想到的是DSP芯片,DSP芯片的内部采用程序和数据分开的哈佛结构,具有专门的硬件乘法器,广泛采用流水线操作,提供特殊的DSP指令,可以用来快速的实现各种数字信号处理算法。5 @& ^, T. p+ }) _4 ?

: }7 \+ G9 ^5 X2 |8 x* ~: \
. Z, F" G; H4 r$ ^! |5 ^
实际上,DSP的全称是数字信号处理(DigitalSignalProcessing,简称DSP)。在过去的二十多年时间里,数字信号处理已经在通信等领域得到极为广泛DSP技术图解的应用。" D, U* W1 B- t) J6 [
2 R- Y  J: i8 |0 E

" V, n0 p" g- e# O% }" x( Y# N如下面ARM官方描述的,ARM处理器是支持DSP的。
# x7 I: d' ~/ Q& ~/ q" Q
13.png
主要是在cortex-R和Cortex-M内核支持。0 {1 h7 ^. c! _3 I
14.png
Arm 的数字信号控制器Cortex-M4、Cortex-M7、Cortex-M33、Cortex-M35P和Cortex-M55处理器满足了对高性能通用代码处理以及数字信号处理应用的需求。
+ Z1 Y1 F* a( U' @
15.png
向Thumb 指令集添加DSP 扩展和可选浮点单元(FPU),旨在提高数值算法的性能。此外,它们提供了直接在 Cortex-M处理器上执行信号处理操作的机会,同时保持Cortex-M程序员模型的易用性。9 }" ~2 r' I1 a5 O0 g7 r

% q' ?5 q% F9 `' I7 K7 E. \6 T! k02 IAR中DSP Libary的使用: f5 z) s+ Y7 z6 a7 W$ s
6 a8 W  Y0 t- ?7 s9 i# j

0 b# u9 |3 \0 \9 o2 `" iArmCortex-M3 /M4处理器提供信号处理指令,例如SIMD(单指令多数据)。特别是Cortex-M4专为DSP应用而设计,它支持高级SIMD,MAC(乘法和累加)指令。此外,Cortex-M4F器件具有FPU(浮点单元),用于处理浮点计算。
+ Z5 D* x% [" T9 K' P
# Z0 l; e; Y/ k1 i8 r6 |2 [
$ s' u6 p1 f# m, E/ W& f7 P7 }
有几种方法可以使用这些指令,例如使用汇编程序例程或内部函数,但最实用的方法之一是使用ArmCortex微控制器软件接口标准(CMSIS)DSP库。CMSIS-DSP库专为Cortex-M处理器而设计,它为数字信号处理提供优化的功能,如矩阵函数,统计函数,高级数学函数等。  N) A( T, T* d
" }% u9 O* J# r3 }3 O* G
# U' h: L9 B! i3 a  v1 \
IAREmbedded Workbench forArm中提供了预构建的CMSIS-DSP库及其源代码,在本文中,我们将了解如何将CMSIS-DSP库与IAREmbedded Workbench for Arm一起使用以及如何改进性能。
, s5 l- G; M1 k, ?
3 r5 \& F9 T# P+ a

& G; r7 |& Q9 a- WConfiguringthe CMSIS-DSP library) `, z9 P% t1 W; R, R( N

+ m* _) p+ f- D7 z9 N) u

( k7 B% h. b) P5 }0 Z配置CMSIS-DSP库& Z3 j; O% u" ]1 ~9 n" X
16.png
让我们看看如何调用CMSIS-DSP功能及其性能。这里我们将使用sqrt(平方根)函数并与标准数学函数进行比较:
1 Q" y/ [/ w% \

  1. - [  s4 g3 H/ D) _' m: x3 ~
  2. //#define DSP_Lib
    ! w, E( V1 v; \) g; G% g; K) C) Z
  3. 3 ]1 ^. p" v& g" h
  4. #ifdef DSP_Lib
    % }& {2 ]  X% n" b8 V
  5. #include <arm_math.h>/ F  M1 e0 x! q8 c9 a' \& b9 p, Y
  6. #endif
    " W# g% y) S( v3 A) N
  7. / {8 U; l/ t& F. |9 G" o! ^2 B& G) [1 W
  8. #include <math.h>
    " q; i2 w: i' h. \& w% W; L
  9. #include <stdio.h>
    % o$ c2 \& D' \+ B# j
  10. int main()
    ; p) m( v1 \: c
  11. {( `8 B4 F" \) f4 g4 x# I
  12. #ifdef DSP_Lib
    & Z9 |0 V, H8 \. h8 g
  13.   float32_t f_input_cmsis_dsp = 2;) H2 f; e. m5 j+ X
  14.   float32_t f_result_cmsis_dsp;
      d8 Y) l; J' n3 ~; d9 ^  P8 \3 Z9 Z
  15. #endif
    $ {7 [3 c4 Z6 o# J& u$ P2 w
  16.   
    ) V: k. M$ |3 O' P) {& {) d
  17.   float f_input = 2;* J2 ~5 O+ g1 H
  18.   float f_result;9 y4 v' ?, E: `
  19.   3 z3 f5 U& h7 L5 F
  20. * N; J5 W5 U! \6 n/ j7 \
  21. #ifdef DSP_Lib, `- @1 D0 D) F- i9 t/ L
  22.   /* Using CMSIS-DSP library */
    # \4 E# n* }( u8 F* U1 T/ P; E
  23.   arm_sqrt_f32(f_input_cmsis_dsp,&f_result_cmsis_dsp);9 g0 Z2 b8 }8 E! B% j- H
  24.   printf("f1: %f\n",f_result_cmsis_dsp);
    & \- ]1 u4 R- }2 o0 f! @! P
  25. #endif
    . p+ e8 ?( B8 `8 p; e
  26.   
    " K% M8 g# H  t" y+ r0 _
  27.   /* Standard math function */
    - v7 W7 K& k3 B( f* w+ ^& h9 d
  28.   f_result = sqrt(f_input);
    % U0 \; M3 s8 u2 `" o# W0 a
  29.   printf("f2: %f\n",f_result);. \3 V% }) w# h( |* x
  30.   
    3 G" ~' ?7 L1 x9 a) W" H7 k/ G
  31.   return 0;
    ! {; W9 n0 y, W% t2 Q
  32. }
复制代码
结果如下; P( z4 N+ O& T) T7 [
  1. f1: 1.414214 1 _6 S* ~2 a; p8 e1 v
  2. f2: 1.414214
复制代码
接下来,让我们来看看性能。: ]% y* ~/ H4 S/ o- t

+ _+ b/ V' I3 J8 g$ N

. y2 K8 _8 y( ?3 q. L; SIAREmbedded Workbench中的CYCLECOUNTER寄存器可用于检查正在运行的代码所消耗的周期数。在检查上次执行的C/ C ++源代码或汇编程序步骤期间的循环次数时,CCSTEP寄存器非常方便有用。; w1 v* F7 C" c4 {6 f
17.png
设置断点并记下sqrt函数的CCSTEP值:
5 H, w. V. C7 F9 P
18.png
在这种情况下,CMSIS-DSPsqrt功能比标准数学函数快10倍以上。" K% r+ M* S  {& S
  1. arm_sqrt_f32 :    52 cycles
    - l# ?3 R9 ~2 A: q% Q
  2. sqrt :            752 cycles
复制代码
从这个简单的例子中,我们可以看到CMSIS-DSP非常易于使用,并且显着提高了性能。! [% i! S% n8 ?
5 n8 T9 q4 g% D' o5 Z

/ ]! J! @* l& b/ \' _& F. n( N
收藏 评论0 发布时间:2021-9-18 13:07

举报

0个回答

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版