打印

STM32 DSP函数库 -- 补丁

[复制链接]
10697|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lut1lut|  楼主 | 2008-12-25 09:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在ST更新STM32 DSP库之前,需要用到256点和1024点FFT运算的同学,不妨用以下的补丁打上。

1. 现有的DSP库函数中,64点FFT是正确的。
2. 256/1024点需要更改以下几个地方
(1)NPT的定义

IAR assembly file: #define NPT  64  =>  #define NPT   256/1024
Keil assembly file: NPT EQU 64 => NPT EQU 256/1024
RIDE assembly file: .equ NPT, 64 => .equ NPT, 256/1024

(2)修改一些汇编代码
IAR assembly file: 

        BUTFLY4ZERO_OPT  MACRO pIN,offset, pOUT
                LDRSH Ai, [pIN, #2]
                LDRSH Ar, [pIN],#NPT
                LDRSH Ci, [pIN, #2]
                LDRSH Cr, [pIN],#NPT
                LDRSH Bi, [pIN, #2]
                LDRSH Br, [pIN],#NPT
                LDRSH Di, [pIN, #2]
                LDRSH Dr, [pIN],#NPT

改成:
          
        BUTFLY4ZERO_OPT  MACRO pIN,offset, pOUT
                LDRSH Ai, [pIN, #2]
                LDRSH Ar, [pIN]
            ADD   pIN, pIN, #NPT
                LDRSH Ci, [pIN, #2]
                LDRSH Cr, [pIN]
                  ADD   pIN, pIN, #NPT
                LDRSH Bi, [pIN, #2]
                LDRSH Br, [pIN]
                  ADD   pIN, pIN, #NPT
                LDRSH Di, [pIN, #2]
                LDRSH Dr, [pIN]
                  ADD   pIN, pIN, #NPT    

 Keil assembly file:
        MACRO
        BUTFLY4ZERO_OPT  $pIN,$offset, $pOUT
                LDRSH Ai, [$pIN, #2]
                LDRSH Ar, [$pIN],#NPT
                LDRSH Ci, [$pIN, #2]
                LDRSH Cr, [$pIN],#NPT
                LDRSH Bi, [$pIN, #2]
                LDRSH Br, [$pIN],#NPT
                LDRSH Di, [$pIN, #2]
                LDRSH Dr, [$pIN],#NPT

改成:
        MACRO
        BUTFLY4ZERO_OPT  $pIN,$offset, $pOUT
                LDRSH Ai, [$pIN, #2]
              LDRSH Ar, [$pIN]
            ADD   $pIN, #NPT
                LDRSH Ci, [$pIN, #2]
                LDRSH Cr, [$pIN]
            ADD   $pIN, #NPT
                LDRSH Bi, [$pIN, #2]
                LDRSH Br, [$pIN]
            ADD   $pIN, #NPT
                LDRSH Di, [$pIN, #2]
                LDRSH Dr, [$pIN]
            ADD   $pIN, #NPT

RIDE assembly file:

        preloop_v7:
                ADD     r14, r1, r12, LSR#24 /*256pts*/ 
                LDRSH r5, [r14, #2]   
                LDRSH r4, [r14],#NPT
                LDRSH r9, [r14, #2]   
                LDRSH r8, [r14],#NPT
                LDRSH r7, [r14, #2]
                LDRSH r6, [r14],#NPT
                LDRSH r11, [r14, #2]
                LDRSH r10, [r14],#NPT
改成:

        preloop_v7:
                ADD     r14, r1, r12, LSR#24 /*256pts*/   
                LDRSH r5, [r14, #2]       
                LDRSH r4, [r14]
                ADD   r14, #NPT
                LDRSH r9, [r14, #2]
                LDRSH r8, [r14]
                ADD   r14, #NPT      
                LDRSH r7, [r14, #2]
                LDRSH r6, [r14]
                ADD   r14, #NPT        
                LDRSH r11, [r14, #2]
                LDRSH r10, [r14]
                ADD   r14, #NPT
评分
参与人数 1威望 +1 收起 理由
casimeslo + 1 很给力!
沙发
colaring| | 2008-12-25 12:45 | 只看该作者

顶!!!

希望ST把DSP函数库的注释写清楚

函数的具体要求,比如定点64  Q14 Q15什么的

别让用户使用起来感觉迷迷糊糊的

使用特权

评论回复
板凳
greatbin| | 2008-12-25 17:00 | 只看该作者

这个要顶,LZ好人啊

使用特权

评论回复
地板
sunke9| | 2008-12-26 08:59 | 只看该作者

感谢楼主!

使用特权

评论回复
5
jinjing999| | 2008-12-29 16:45 | 只看该作者

顶,牛人啊

使用特权

评论回复
6
jinjing999| | 2008-12-29 17:23 | 只看该作者

不行啊,你看有三个错误

..DSPLibsourceasmRVMDKcr4_fft_256_stm32.s(228): error: A1151E: Bad register name symbol
..DSPLibsourceasmRVMDKcr4_fft_256_stm32.s(228): error: A1151E: Bad register name symbol

使用特权

评论回复
7
香水城| | 2008-12-29 17:43 | 只看该作者

8楼用的是哪个版本的MDK?

使用特权

评论回复
8
zhudongpo| | 2008-12-30 13:34 | 只看该作者

ADD pIN, #NPT

8 楼
是这句的问题 ADD   pIN, #NPT  应该为 ADD   $pIN, #NPT

第一次是对的,后面3次的漏掉了$吧, 不知道我的说法正确吗?

使用特权

评论回复
9
eddia2000| | 2009-1-2 19:12 | 只看该作者

编译通过

10楼:按你说的改后编译通过。

使用特权

评论回复
10
jinjing999| | 2009-1-6 09:24 | 只看该作者

谢谢10楼和楼主

牛人啊
汇编我一点也看不懂,还好有牛人在啊

使用特权

评论回复
11
zjj8780| | 2009-1-20 20:59 | 只看该作者

LZ利害

LZ利害,我验证过库函数,64点的算法没有问题,256和1024的算法是错的,但是没有搞明白什么地方出问题了

使用特权

评论回复
12
fugeone| | 2009-2-13 09:40 | 只看该作者

感谢楼主啊

感谢楼主啊

使用特权

评论回复
13
mxinfa| | 2009-3-31 12:58 | 只看该作者

这个例子有问题吧

#define N 64 /*Number of points*/
u32 x[N],y[N]; /* input and output arrays */
u16 real[N], imag[N]; /* real and imaginary arrays */
/* Fill the input array */
for(i=0; i<N; i++)
x = (((u16)(real)) | ((u32)(imag<<16)));
cr4_fft_64_stm32(y, x, N); /*computes the FFT of the x[N] samples*/
输入输出竟然都定义成了无符号的,这样有问题吧?如果输入是实数,虚部为零,那么把输入定义成无符号的,大不了相当于固定加了个正的常数,也就是加了个直流分量,勉勉强强吧。输出是无论如何也不能定义成无符号数的吧?

使用特权

评论回复
14
selina1983| | 2012-1-15 20:01 | 只看该作者
LZ牛人也

使用特权

评论回复
15
nikita-fuck| | 2012-1-16 15:14 | 只看该作者
酷,,

使用特权

评论回复
16
hsbjb| | 2012-1-17 20:02 | 只看该作者
STM32 DSP库的确是需要完善

使用特权

评论回复
17
zjb| | 2012-2-9 11:50 | 只看该作者
现在的库貌似没有汇编了

使用特权

评论回复
18
longzhaocy| | 2012-8-21 10:00 | 只看该作者
我现在用的STM32F10x_DSP_Lib_V2.0.0这个库,fft后,偶次的数据也很大。和奇次的差不多。我是测三相电的谐波。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

483

帖子

3

粉丝