⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 g7231_basop.h

📁 G723.1语音压缩解压在tms320c54系列上的实现代码,本人已在CCS上仿真通过. 包含全部源代码,主函数请自已写(本人的就不奉送了:
💻 H
字号:
#include <stdlib.h>
#include <intrindefs.h>
#include "typedef.h"
#ifndef _H_G7231BASOP
#define _H_G7231BASOP

#define G7231MAX_32 (Word32)0x7fffffffL
#define G7231MIN_32 (Word32)0x80000000L

#define G7231MAX_16 (Word16)0x7fff
#define G7231MIN_16 (Word16)0x8000


extern Word16 G7231div_s(Word16 var1, Word16 var2); /* Short division,18 */

#ifdef C54X_MODE
extern Word16 c54_sadd2(Word32 var1, Word32 var2);
extern Word32 c54_sadd(Word32 var1,Word32 var2);
extern Word16 c54_abs2(Word16 var1);
extern Word32 c54_smpy(Word16 var1,Word16 var2);
extern Word32 c54_sshvl(Word32 var1,Word32 var2);
extern Word32 c54_sshvr(Word32 var1,Word32 var2);
extern Word32 c54_spack2(Word32 var1,Word32 var2);
extern Word32 c54_mpyus( Word32 Lv, Word32 v );
extern Word32 c54_smpylh( Word32 v,  Word32 Lv);
extern Word32 c54_abs(Word32 v);
extern Word32 c54_mpy(Word16 var1, Word16 var2);
extern Word32 c54_ssub( Word32 v,  Word32 Lv);
extern Word16 c54_norm(Word32 v);
#endif


Word32 G7231L_mls( Word32, Word16 ); 
Word16 G7231div_l( Word32, Word16 );



inline Word16 G7231add(Word16 var1, Word16 var2)     /* Short add,           1 */
{
    #ifdef C54X_MODE
    return c54_sadd2(var1, var2);
    #else
    return _sadd2(var1, var2);
    #endif
}

inline Word16 G7231sub(Word16 var1, Word16 var2)     /* Short sub,           1 */
{
    #ifdef C54X_MODE
    return c54_sadd2(var1, -var2);
    #else
    return _sadd2(var1, -var2);
    #endif
}

inline Word16 G7231abs_s(Word16 var1)
{
	#ifdef C54X_MODE
	return c54_abs2(var1);
	#else
	return _abs2(var1);
	#endif
}

inline Word16 G7231shl(Word16 var1,Word16 var2)
{
	Word32 L_result;
	#ifdef  C54X_MODE
	L_result = c54_sshvl((Word32)var1, (Word32)var2);
	return (Word16)c54_spack2(L_result,L_result);
	#else  
	L_result = _sshvl((Word32)var1, (Word32)var2);
	return (Word16)_spack2(L_result,L_result);
	#endif
}

inline Word16 G7231shr(Word16 var1,Word16 var2)
{
	Word32 L_result;
	#ifdef  C54X_MODE
	L_result = c54_sshvr((Word32)var1, (Word32)var2);
	return (Word16)c54_spack2(L_result,L_result);
	#else  
	L_result = _sshvr((Word32)var1, (Word32)var2);
	return (Word16)_spack2(L_result, L_result);
        #endif
}

inline Word16 G7231mult(Word16 var1, Word16 var2)
{
	Word32 c54_temp;
	#ifdef C54X_MODE
	c54_temp = c54_smpy(var1, var2);
	return (Word16)(c54_temp >> 16);
	#else
	return (Word16)(_smpy(var1, var2)>>16);
	#endif
}

inline Word32 G7231L_mult(Word16 var1,Word16 var2)
{
	#ifdef C54X_MODE
	return c54_smpy(var1, var2);
	#else
	return _smpy(var1, var2);
	#endif
}

inline Word16 G7231negate(Word16 var1)
{
    return (var1 == G7231MIN_16) ? G7231MAX_16 : -var1;
}

inline Word16 G7231extract_h(Word32 L_var1)
{
    return (L_var1 >> 16);
}

inline Word16 G7231extract_l(Word32 L_var1)
{
    return (Word16) L_var1;
}

inline Word16 G7231round(Word32 L_var1)
{
	#ifdef C54X_MODE
	return (Word16)(c54_sadd(L_var1, (Word32)0x00008000L)>>16);
	#else
    	return (Word16)(_sadd(L_var1, (Word32)0x00008000L)>>16);
	#endif
}

inline Word32 G7231L_mac(Word32 L_var3, Word16 var1, Word16 var2)
{
	#ifdef C54X_MODE
	return (c54_sadd(L_var3, c54_smpy(var1,var2)));
	#else
	return (_sadd(L_var3, _smpy(var1,var2)));
	#endif
}

inline Word32 G7231L_msu(Word32 L_var3, Word16 var1, Word16 var2)
{
	#ifdef C54X_MODE
	return (c54_ssub(L_var3, c54_smpy(var1,var2)));
	#else
	return (_ssub(L_var3, _smpy(var1,var2)));
	#endif
}

inline Word32 G7231L_add(Word32 L_var1, Word32 L_var2)
{
	#ifdef C54X_MODE
	 return c54_sadd(L_var1, L_var2);
	#else
    	 return _sadd(L_var1, L_var2);
	#endif
}

inline Word32 G7231L_sub(Word32 L_var1, Word32 L_var2)
{
	#ifdef C54X_MODE
	return c54_ssub(L_var1, L_var2);
	#else
    	return _ssub(L_var1, L_var2);
	#endif
}

inline Word32 G7231L_negate(Word32 L_var1)
{
    return (L_var1 == G7231MIN_32) ? G7231MAX_32 : -L_var1;
}

inline Word32 G7231L_shl(Word32 L_var1, Word16 var2)
{
	#ifdef  C54X_MODE
	return c54_sshvl(L_var1,var2);
	#else  
	return _sshvl(L_var1,var2);
	#endif
}

inline Word32 G7231L_shr(Word32 L_var1, Word16 var2)
{
            #ifdef  C54X_MODE
     	    return c54_sshvr(L_var1,var2);
            #else  
            return _sshvr(L_var1,var2);
            #endif
}

inline Word32 G7231L_deposit_h(Word16 var1)
{
    return (Word32) var1 << 16; 
}

inline Word32 G7231L_deposit_l(Word16 var1)
{
    return (Word32) var1;
}

inline Word32 G7231L_abs(Word32 L_var1)
{
        #ifdef C54X_MODE
	return c54_abs(L_var1);
	#else
	return _abs(L_var1);
	#endif
}

inline Word16 G7231norm_s(Word16 var1)
{
	#ifdef  C54X_MODE
	return (c54_norm(var1)-16)*(var1!=0);
	#else
	return (_norm(var1)-16)*(var1!=0);
	#endif
}

inline Word16 G7231norm_l(Word32 L_var1)
{
	#ifdef  C54X_MODE
	return c54_norm(L_var1)*(L_var1!=0);
	#else
	return _norm(L_var1)*(L_var1!=0);
	#endif
}

inline Word16 G7231i_mult(Word16 a, Word16 b)
{
	#ifdef  C54X_MODE
	return (Word16)c54_mpy(a, b);
	#else
	return (Word16)_mpy(a, b);
	#endif
}

inline Word16 G7231mult_r(Word16 var1, Word16 var2)
{
	#ifdef C54X_MODE
	return ((c54_smpy(var1, var2)+0x00008000L)>>16);
	#else
	return ((_smpy(var1, var2)+0x00008000L)>>16);
	#endif
}

#endif //_H_G7231BASOP

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -