登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

请大侠帮我把下面的C程序用DM642翻译一下

作者:zx_jianke 栏目:DSP技术
请大侠帮我把下面的C程序用DM642翻译一下
 
2楼: >>参与讨论
zx_jianke
程序如下
--  c转化成线性汇编有问题
语言:
void FiltLpf( Word16 *Tv, Word16 *Buff, Word16 ScGn,Word16 Indx,Word16 Gain, Word16 Sfc )
{
int i ;

Word32 Acc0 ;
//----6.7_1-------//
for ( i = 0 ; i < SubFrLen ; i ++ ) {
Acc0 = L_mult( Buff[PitchMax+(int)Sfc*SubFrLen+i], ScGn ) ;
Acc0 = L_mac( Acc0, Buff[PitchMax+(int)Sfc*SubFrLen+(int)Indx+i],
Gain ) ;
Tv[(int)Sfc*SubFrLen+i] = round( Acc0 ) ;
}
内联后的c
/* for ( i = 0 ; i < SubFrLen ; i ++ ) {
Acc0 = L_mult( Buff[PitchMax+(int)Sfc*SubFrLen+i], Pf.ScGn ) ;
Acc0 = L_mac( Acc0, Buff[PitchMax+(int)Sfc*SubFrLen+(int)Pf.Indx+i],
Pf.Gain ) ;
Tv[(int)Sfc*SubFrLen+i] = round( Acc0 ) ;
}
for ( i = 0 ; i < SubFrLen ; i +=4 ) {
Acc0 = _smpy( Buff[PitchMax+(int)Sfc*SubFrLen+i], Pf.ScGn ) ;
Acc0 = _sadd(Acc0, _smpy(Buff[PitchMax+(int)Sfc*SubFrLen+(int)Pf.Indx+i],
Pf.Gain)) ;
Tv[(int)Sfc*SubFrLen+i] = _sadd( Acc0 ,0x8000L)>>16;

Acc0 = _smpy( Buff[PitchMax+(int)Sfc*SubFrLen+i+1], Pf.ScGn ) ;
Acc0 = _sadd(Acc0, _smpy(Buff[PitchMax+(int)Sfc*SubFrLen+(int)Pf.Indx+i+1],
Pf.Gain)) ;
Tv[(int)Sfc*SubFrLen+i+1] = _sadd( Acc0 ,0x8000L)>>16;

Acc0 = _smpy( Buff[PitchMax+(int)Sfc*SubFrLen+i+2], Pf.ScGn ) ;
Acc0 = _sadd(Acc0, _smpy(Buff[PitchMax+(int)Sfc*SubFrLen+(int)Pf.Indx+i+2],
Pf.Gain)) ;
Tv[(int)Sfc*SubFrLen+i+2] = _sadd( Acc0 ,0x8000L)>>16;

Acc0 = _smpy( Buff[PitchMax+(int)Sfc*SubFrLen+i+3], Pf.ScGn ) ;
Acc0 = _sadd(Acc0, _smpy(Buff[PitchMax+(int)Sfc*SubFrLen+(int)Pf.Indx+i+3],
Pf.Gain)) ;
Tv[(int)Sfc*SubFrLen+i+3] = _sadd( Acc0 ,0x8000L)>>16;
}*/

return;
}
线性汇编:
.GLOBAL _FiltLpf

_FiltLpf: .cproc Tv,Buff,PfScGn,PfIndex,PfGain,Sfc
.reg cntr,con1,con2,con3,sfc1,add1,add2,buff1,buff2,t1:t2,t3:t4,a0,a1,a2,a3,b0,b1,b2,b3
;zero cntr
;zero con1
;zero con2
mvk 15,cntr
mvk 145,con1
mvk 60, con2
zero con3
mvkl 0x8000,con3


mpy Sfc,con2,sfc1 ;sfc*60
add con1,sfc1,add1 ;145+sfc*60

add add1,PfIndex,add2 ;145+sfc*60+PfIndex

add Buff,add1,buff1



add Buff,add2,buff2
;lddw *buff2++,t3:t4 ;读取64位的数据


loop: .trip 15
lddw *buff1++,t1:t2 ;读取64位的数据(t2为低位)
lddw *buff2++,t3:t4 ;读取64位的数据
smpyhl t2,PfScGn,a1
smpyhl t1,PfScGn,a3
smpy t2,PfScGn,a0
smpy t1,PfScGn,a2

smpyhl t4,PfGain,b1
smpyhl t3,PfGain,b3
smpy t4,PfGain,b0
smpy t3,PfGain,b2

sadd a1,b1,a1
sadd a3,b3,a3
sadd a0,b0,a0
sadd a2,b2,a2

sadd a1,con3,a1
sadd a0,con3,a0
sadd a2,con3,a2
sadd a3,con3,a3

;shr a1,16,a1
;shr a0,16,a0
;shr a2,16,a2
;shr a3,16,a3
;packh2 a1,a0,a0
;packh2 a3,a2,a1
packh2 a1,a0,a0
packh2 a3,a2,a1

stdw a1:a0,*sfc1++


[cntr] sub cntr,1,cntr
[cntr] B loop
.endproc 

参与讨论
昵称:
讨论内容:
 
 
相关帖子
请教有关F2812的XINTF的一个问题?
ti的28系列DSP是否可以用更廉价的供电方法?
[求助]ccs环境下程序运行时间为何测不起来?
有没有人研究过麦克风阵列阿?
展示一块高密度DM642主板,并发布招聘信息
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号