您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> 混合编程求指导
本帖共有471个阅读者
发表帖子 发表投票 回复主题
混合编程求指导
bd7bq(论坛新手)
bd7bq
头衔:社区公民
帮派:无帮无派
帖数:25
金钱:329
积分:27
注册时间:2013/7/8
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
混合编程求指导

一段求近似正弦值的汇编程序,想整进C程序里. 对于格式,入口,出口,保护等问题,查了半天资料仍不太理解,谁能指导下吗?



/*
Sine Approximation: Y = Sin(x)
Calling Parameters
      AX0 = x in scaled 1.15 format
      M3 = 1
      L3 = 0
Return Values: AR = y in 1.15 format
Altered Registers:  AY0,AF,AR,MY1,MX1,MF,MR,SR,I3
Computation Time:   25 cycles
*/


.var sin_coeff[5]=0x3240,0x0053,0xAACC,0x08B7,0x1CCE;

sin:    I3=sin_coeff;                          //Pointer to coeff. buffer
        AY0=0x4000;
        AR=AX0, AF=AX0 and AY0;                //Check 2nd or 4th quad.
        if NE AR=-AX0;                         //如果不为0, negate input
        AY0=0x7FFF;
        AR=AR AND AY0;                         //Remove sign bit
        MY1=AR;
        MF=AR*MY1 (RND), MX1=DM(I3,M3);        //MF = x*x
        MR=MX1*MY1 (SS), MX1=DM(I3,M3);        //MR = C1*x
        CNTR=3;
        do approx until CE;
        MR=MR+MX1*MF (SS);
approx:
        MF=AR*MF (RND), MX1=DM(I3,M3);
        MR=MR+MX1*MF (SS);
        SR=ASHIFT MR1 BY 3 (HI);
        SR=SR OR LSHIFT MR0 BY 3 (LO);         //Convert to 1.15 format
        AR=PASS SR1;
        IF LT AR=PASS AY0;                     //Saturate if needed
        AF=PASS AX0;
        IF LT AR=-AR;                          //Negate output if needed
        RTS;


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2013/8/22 10:23:16
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
VDSP 下有自己的精简指令集,也有 自带的sin 和sind函数,你可以搜索帮助文件如何用。、
汇编代码和自己处理器的指令集结合的很紧,不能直接使用,要么你读懂,然后按VDSP的汇编自己写一个,不过太麻烦,建议你直接使用VDSP自带的。或者找C代码的再移植

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/8/22 20:40:42
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159271 Call, 1 Queries, Processed in 0.031006 second(s),