📄 levelmeter.eve
字号:
// 僒儞僾儖僾儘僌儔儉 LevelMeter.eve
//
// 怣崋偺儗儀儖傪専弌偡傞僾儘僌儔儉偱偡丅
// REG0 傪儗儀儖曐懚梡儗僕僗僞偲偟偰梡偄偰偄傑偡丅
// SDI0 偺 Lch 擖椡怣崋傪慡攇惍棳偟偨抣 (Drec0) 偲丄REG0 傪斾妑偟丄
// Drec0>=REG0 偺偲偒 REG0=Drec0丅
// Drec0<REG0 偺偲偒 REG0=REG0*decay丅(decay 偼尭悐検)
// 偲偄偆傾儖僑儕僘儉偱 REG0 傪峏怴偟丄偙偺 REG0 傪 MIREG0 傊弌椡偟傑偡丅
// MIREG0 傪儅僀僐儞僀儞僞乕僼僃僀僗宱桼偱撉傒弌偡偙偲偵傛傝丄儗儀儖傪専
// 抦偡傞偙偲偑偱偒傑偡丅
//
// SDO0 偺 Lch 偵偼 SDI0 偺 Lch 擖椡傪偦偺傑傑弌椡偟偰偄傑偡丅
// SDO0 偺 Lch 埲奜偺僠儍儞僱儖偵偼 0 傪弌椡偟偰偄傑偡丅
//
// 偙偺僾儘僌儔儉傪傾僙儞僽儔 EveAsm.exe 偱傾僙儞僽儖偡傞偙偲偵傛傝
// LevelMeter.datEve 偑嶌惉偝傟傑偡丅
//
// -----------------------------------------------------------------
//
// Sample program LevelMeter.eve
//
// This is the program for detecting the signal level.
// REG0 is used for storing the level.
// Comparing the full-wave-rectified SDI Lch (Drec0) and REG0, updating
// REG0 in accordance with the following algorithm, and after that, output
// REG0 to MIREG0.
// When Drec0>=REG0, REG0=Drec0.
// When Drec0<REG0, REG0=REG0*decay.
// The level can be detected by reading MIREG0 via microprocessor interface.
//
// SDI0 Lch signal is output from SDO0 Lch as it is.
// The other channels except for SDO0 Lch are all zero output.
//
// LevelMeter.datEve is assemble from this program by executing EveAsm.exe.
// -----------------------------------------------------------------
// -----------------------------------------------------------------
// -----------------------------------------------------------------
#define ERAM_TYPE NO_ERAM //奜晅 RAM 側偟
//============================================================
// EVE Program
// LevelMeter
//============================================================
// COEF define
// fs 偵傛偭偰曄壔偟側偄學悢
CDat P0.5 (-1, 0x4000); // +0.5
CDat M0.5 (-1, 0xC000); // -0.5
CDat decay (-1, 0x7FF6); // 0.9997 (level 尭悐検)
// Inner DATA define
DAdr Dtmp (0); // temporary 梡
DAdr Drec0 (1); // 慡攇惍棳屻偺 IN0
//------------------------------------------------------------
// 幚峴僐儅儞僪僽儘僢僋
// | ERAM | BUS | MAC/JMP
//------------------------------------------------------------
// 慡攇惍棳
//------------------------------------------------------------
; Dtmp = IN0; ACC0 = Dtmp *P0.5; // ACC0=IN0*(+0.5)
; ; ACC1 = Dtmp *M0.5; // ACC1=IN0*(-0.5)
; ; ;
; ; ;
; Drec0 = ACC0Fs1; ; // Drec0=IN0 偲偟偰偍偔丅
; ; if (ACC>=0) jmp COMP; // ACC0 偑惓偺偲偒偼偦偺傑傑 COMP 傊丅
; Drec0 = ACC1Fs1; ; // ACC0 偑晧偺偲偒偼 Drec0=-IN0丅
//------------------------------------------------------------
// 慜抣偲斾妑
//------------------------------------------------------------
COMP: ; ; ACC0 = Drec0 *P0.5; // Drec0 偲 REG0 傪斾妑丅
; Dtmp = REG0; ACC0+= Dtmp *M0.5;
; ; ;
; ; ACC0 = Dtmp *decay; // REG0*decay 傪寁嶼偟偰偍偔丅
; REG0 = ACC0Fs1; ; // REG0=Drec0 偲偟偰偍偔丅
; ; ;
; ; if (ACC>=0) jmp MIREG; // Drec0>=REG0 偺偲偒 REG0=Drec0 偺傑傑 MIREG 傊丅
//--------------------------
; REG0 = ACC0F; ; // Drec0<REG0 偺偲偒丄REG0=REG0*decay丅
//------------------------------------------------------------
MIREG: ; MIREG0 = REG0; ; // 儗儀儖(REG0) 傪 MIREG0 傊丅
// ----------------------------------------------------------------------
; OUT0 = IN0; ; // OUT0=IN0 傪弌椡丅
; OUT1 = $ZERO; ; // 懠偺 channel 傪 0 clear丅
; OUT2 = $ZERO; ; // 懠偺 channel 傪 0 clear丅
; OUT3 = $ZERO; ; // 懠偺 channel 傪 0 clear丅
; OUT4 = $ZERO; ; // 懠偺 channel 傪 0 clear丅
; OUT5 = $ZERO; ; // 懠偺 channel 傪 0 clear丅
; OUT6 = $ZERO; ; // 懠偺 channel 傪 0 clear丅
; OUT7 = $ZERO; ; // 懠偺 channel 傪 0 clear丅
// ----------------------------------------------------------------------
; MPEND = $0.5; ; // program 廔椆丅
; ; ;
; ; ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -