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

📄 audio module - zero_crossing_.asm

📁 语音信号进行Fir滤波
💻 ASM
字号:
#include <asm_sprt.h>
#include "AudioModule_spt.h"
#include <asm_sprt.h>
#define C_FUNC( FUNC ) 	_ ## FUNC
#define ASM_FUNC( FUNC )	FUNC
#define xC_FUNC( FUNC )	_x ## FUNC

/* 
	SHARC Audio Module
	
	Function Name 		:	Zero-Crossing Detector
	 
	Setup Cycle Count 	:	5
	Routine Cycle Count	:	14
	Cleanup Cycle Count :	NA
	
	Registers Used		:	r0, r1, r2, r4, r8, r12, i4
	
	Description
	|
	|
	|
	
*/	
#include "Audio Module - zero_crossing.h"


/* if the algorithm does support SIMD, remove this warning */
#ifdef SIMD_SUPPORT
#warning ** SHARC AudioModule Warning : SIMD not supported by ROUTINE function
#endif

.section /pm seg_pmco;


/* _________________________________________________________________________*/
/* Setup Function */
/* If your setup function is written in assembly, place it here.  If not
   then remove these setup entries as well as the SETUP definition above */
   
C_FUNC(Setup_Zero_Crossing_Detect):
.global C_FUNC(Setup_Zero_Crossing_Detect);

	call ASM_FUNC(Setup_Zero_Crossing_Detect) (db);
	i4 = r4;
	i12=dm(m7,i6);
	
	jump (m14,i12) (db);
	nop;	
	RFRAME;	

C_FUNC(Setup_Zero_Crossing_Detect).end:
	
ASM_FUNC(Setup_Zero_Crossing_Detect):
.global ASM_FUNC(Setup_Zero_Crossing_Detect);
	
	r4 = 0;
	dm( CZero_Crossing_Detect_LastState, i4 ) = r4;
	rts (db);
	dm( CZero_Crossing_Detect_Threshold, i4 ) = r8;
	dm( CZero_Crossing_Detect_Edge,		 i4 ) = r12;


ASM_FUNC(Setup_Zero_Crossing_Detect).end:

/* _________________________________________________________________________*/
/* Routine */
C_FUNC(Zero_Crossing_Detect):
.global C_FUNC(Zero_Crossing_Detect);

	call ASM_FUNC(Zero_Crossing_Detect) (db);
    i4 = r4;
    r8 = dm(CZero_Crossing_Detect_Input,i4);						// <- change to struct input location
	leaf_exit;

C_FUNC(Zero_Crossing_Detect).end:


xC_FUNC(Zero_Crossing_Detect):
.global xC_FUNC(Zero_Crossing_Detect);

	call ASM_FUNC(Zero_Crossing_Detect) (db);
    i4 = r4;
    dm(CZero_Crossing_Detect_Input,i4) = r8;						// <- change to struct input location
	leaf_exit;
xC_FUNC(Zero_Crossing_Detect).end:



ASM_FUNC(Zero_Crossing_Detect):
.global ASM_FUNC(Zero_Crossing_Detect);

	r0 = r0 xor r0,	r4 = dm(CZero_Crossing_Detect_Threshold,	i4);
	f12 = -f4,		r2 = dm(CZero_Crossing_Detect_LastState,	i4);

	r2 = pass r2, 	r1 = dm(CZero_Crossing_Detect_Edge,	i4);

	if NE jump state_1;
state_0:
	comp(f8,f12);
	if GT rts;
		// falling edge detected - what mode are we in?
		r2 = 1;
		dm(CZero_Crossing_Detect_LastState,	i4) = r2;
		
		r2 = 0x2;
		r2 = r2 and r1;
		if EQ rts;
		rts (db);
		r0 = 1;
		nop;

state_1:
	comp(f8,f4);
	if LT rts;
		// rising edge detected - what mode are we in?
		r2 = 0;
		dm(CZero_Crossing_Detect_LastState,	i4) = r2;
		
		r2 = 0x1;
		r2 = r2 and r1;
		if EQ rts;
		rts (db);
		r0 = 1;
		nop;
           
ASM_FUNC(Zero_Crossing_Detect).end:    

#ifdef SETUP
#undef SETUP
#endif
#ifdef ROUTINE
#undef ROUTINE
#endif
#ifdef CLEANUP
#undef CLEANUP
#endif

⌨️ 快捷键说明

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