📄 audio module - zero_crossing_.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 + -