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

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

[复制链接]
STMCU小助手 发布时间:2021-9-18 13:07
01 DSP简介1 t1 O; Q  G/ k* f6 r3 a" F
提到DSP,作为电子专业的学生,大部分第一时间想到的是DSP芯片,DSP芯片的内部采用程序和数据分开的哈佛结构,具有专门的硬件乘法器,广泛采用流水线操作,提供特殊的DSP指令,可以用来快速的实现各种数字信号处理算法。
# H2 ]& Q) D  _. f! b) g$ P2 ~+ P3 ^# Z7 s# U* K7 p
. D7 a1 P' m4 N+ ^9 u( `% w
实际上,DSP的全称是数字信号处理(DigitalSignalProcessing,简称DSP)。在过去的二十多年时间里,数字信号处理已经在通信等领域得到极为广泛DSP技术图解的应用。$ `/ U& s* ~, F0 q9 [) O2 r1 w
( B! P; \) H& x4 G( k! x
! v5 _" l' m! q# _
如下面ARM官方描述的,ARM处理器是支持DSP的。: m9 f/ K, X# q% M
13.png
主要是在cortex-R和Cortex-M内核支持。
, C7 [: s5 o5 [' b& f+ R- i: m
14.png
Arm 的数字信号控制器Cortex-M4、Cortex-M7、Cortex-M33、Cortex-M35P和Cortex-M55处理器满足了对高性能通用代码处理以及数字信号处理应用的需求。4 F2 f" j4 O0 U" T! J# f) J/ N
15.png
向Thumb 指令集添加DSP 扩展和可选浮点单元(FPU),旨在提高数值算法的性能。此外,它们提供了直接在 Cortex-M处理器上执行信号处理操作的机会,同时保持Cortex-M程序员模型的易用性。
6 J+ k8 D. W6 p6 d, ~5 F7 O' X! _  z5 f3 d
02 IAR中DSP Libary的使用9 q4 U. Y' o: k, x6 ?5 d6 ~
% n" j: k* C1 r# Y# A) H) y( O' f- w

- B: \6 M& K! u# y. HArmCortex-M3 /M4处理器提供信号处理指令,例如SIMD(单指令多数据)。特别是Cortex-M4专为DSP应用而设计,它支持高级SIMD,MAC(乘法和累加)指令。此外,Cortex-M4F器件具有FPU(浮点单元),用于处理浮点计算。
3 n5 A2 ~9 e& Z; j( ]& O: U/ Y$ k9 @4 J. D( i
" c& ]# U- A& a
有几种方法可以使用这些指令,例如使用汇编程序例程或内部函数,但最实用的方法之一是使用ArmCortex微控制器软件接口标准(CMSIS)DSP库。CMSIS-DSP库专为Cortex-M处理器而设计,它为数字信号处理提供优化的功能,如矩阵函数,统计函数,高级数学函数等。
. h7 e; t: t: E) W: P, V2 y, r7 A9 T. q2 v6 \1 V& X

' b) C6 G+ K+ m* z) C* y% `IAREmbedded Workbench forArm中提供了预构建的CMSIS-DSP库及其源代码,在本文中,我们将了解如何将CMSIS-DSP库与IAREmbedded Workbench for Arm一起使用以及如何改进性能。
) U# S( M" o( U8 v, U+ z0 e: ]- n& @2 t, \+ r
+ y  l! ~' b& ]
Configuringthe CMSIS-DSP library, B6 B% q+ c' r' O/ J) U; `0 T; E8 L
: K: W4 q2 s) d. i& ?5 b/ E& N
+ ~2 F5 o4 k$ l0 u; j
配置CMSIS-DSP库
7 T( I! F! l. K) M9 T$ ^9 [* o4 t  q
16.png
让我们看看如何调用CMSIS-DSP功能及其性能。这里我们将使用sqrt(平方根)函数并与标准数学函数进行比较:
- w0 ?5 u5 A6 d" {' O
  1. ' h/ j  [: C3 f$ T0 ^5 D* z% m
  2. //#define DSP_Lib  p7 y, X1 N8 X* ?7 z; ]  W' c

  3. + }3 R: @0 g0 e$ @: y& q' x  o; _
  4. #ifdef DSP_Lib
    : ?2 P% J/ E: N5 u/ h
  5. #include <arm_math.h>
    3 x$ _# U. B( v& V0 e
  6. #endif
    3 {& M9 @! u8 k" Y
  7. 3 e6 A, b& B0 ^: L9 h7 C
  8. #include <math.h>
    ; M4 q8 \2 w2 R' x
  9. #include <stdio.h>9 @! W; d# u% @: t
  10. int main()
    0 d4 m" |; X6 [  T% t9 C9 U7 U
  11. {
    4 B5 `- L) J) D- k8 T. b  H
  12. #ifdef DSP_Lib! i# W5 A2 i" h$ X: i+ Q
  13.   float32_t f_input_cmsis_dsp = 2;9 G, `  e" ]1 U
  14.   float32_t f_result_cmsis_dsp;6 {+ K/ r$ j& Q, y8 @; L$ T
  15. #endif# N- i! z, g7 D3 I/ S: u! e; Q" h  ^
  16.   
    8 x4 X1 [/ q. I" i
  17.   float f_input = 2;
    ; b$ t) S9 v! j4 O7 T% r$ ^) y
  18.   float f_result;
    # ~" Y' n1 |% O. j5 o2 O  A
  19.   
    6 @$ |4 {* A$ r
  20. & ~+ ~( v) {. g5 k3 V
  21. #ifdef DSP_Lib
      A  z1 _" \5 W
  22.   /* Using CMSIS-DSP library */7 w% G0 `. N4 B( @4 N& b
  23.   arm_sqrt_f32(f_input_cmsis_dsp,&f_result_cmsis_dsp);0 J, j% g: a# {4 p6 r; A+ s9 b
  24.   printf("f1: %f\n",f_result_cmsis_dsp);! c5 a+ J4 e  V  A
  25. #endif
    + l* G  y* R& I$ n5 y# U, Q
  26.   , V3 R' [: G- X$ D, F. g
  27.   /* Standard math function */5 l4 q* }) N/ r
  28.   f_result = sqrt(f_input);; w0 C' C: R0 T5 X
  29.   printf("f2: %f\n",f_result);4 O, g& Z+ q# \5 |
  30.   + P5 \1 e/ r5 M! A4 |# `
  31.   return 0;$ w: C* ^  a0 P5 i) y
  32. }
复制代码
结果如下) g& u3 s6 f, k" x( [4 ]
  1. f1: 1.414214
    & F2 Y& _; a' j6 v1 C- b* A" R% k
  2. f2: 1.414214
复制代码
接下来,让我们来看看性能。* W; r) h0 ]: _
; M7 P7 D6 O5 V; {* h7 k+ \: W& P1 |

5 c4 ~5 g+ U. `% h9 }, L  h5 KIAREmbedded Workbench中的CYCLECOUNTER寄存器可用于检查正在运行的代码所消耗的周期数。在检查上次执行的C/ C ++源代码或汇编程序步骤期间的循环次数时,CCSTEP寄存器非常方便有用。
8 c+ c0 z0 t& p5 k
17.png
设置断点并记下sqrt函数的CCSTEP值:
3 q& j( [2 P' }+ L- X" M
18.png
在这种情况下,CMSIS-DSPsqrt功能比标准数学函数快10倍以上。1 h# x% r# M4 C* y" l3 G6 d
  1. arm_sqrt_f32 :    52 cycles
    8 u8 ~) H9 t6 S6 w
  2. sqrt :            752 cycles
复制代码
从这个简单的例子中,我们可以看到CMSIS-DSP非常易于使用,并且显着提高了性能。
" n' E. ]* [8 u0 Y) z' ?& q9 O3 j* z3 E5 d7 u

6 n- P$ S' A( B  X, c  B) R* F$ R
收藏 评论0 发布时间:2021-9-18 13:07

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版