📄 baseasm.asm
字号:
.include "ywbios.h"
DC_Chn .set 0 ;//pin19
PIa_Chn .set 4 ;//pin23
PIb_Chn .set 14 ;//pin5
PIc_Chn .set 9 ;//pin10
PI0_Chn .set 6 ;//pin25
Ua_Chn .set 1 ;//pin20
Ub_Chn .set 3 ;//pin22
Uc_Chn .set 8 ;//pin11
U0_Chn .set 5 ;//pin24
Ux_Chn .set 2 ;//pin21
MIa_Chn .set 15 ;//pin4
MIb_Chn .set 10 ;//pin7
MIc_Chn .set 12 ;//pin9
Ubr1 .set 11 ;pin8
Ubr2 .set 7 ;pin26
Ubr3 .set 13 ;pin6
chl_Num .set 0 ;/* channel number */
pchl_device_name .set 1 ;/* pointer to channel device name */
chl_device_name .set 2 ;/* save channel device name */
pchl_name .set 18 ;/* pointer to channel name */
chl_name .set 19 ;/* save channel name */
chl_calculate_style .set 51 ;/* channel value calculate style */
pchl_value_dimension .set 52 ;/* channel value dimension */
chl_calculate_coefficient .set 53 ;/* channel value calculate coefficient */
chl_correlation_channel .set 54 ;/* correlation channel high 16 bits B phase */
pchl_Sample_Address .set 55 ;/* save sample addree pointer */
;
chla_DC_component .set 56 ;/* save D.C component value */
chla_fundamental_real .set 57 ;/* save fundamental real */
chla_fundamental_imaginary .set 58 ;/* save fundamental imaginary */
chla_2nd_harmonic_real .set 59 ;/* save second harmonic real */
chla_2nd_harmonic_imaginary .set 60 ;/* save second harmonic imaginary */
chla_3rd_harmonic_real .set 61 ;/* save third harmonic real */
chla_3rd_harmonic_imaginary .set 62 ;/* save third harmonic imaginary */
chla_5th_harmonic_real .set 63 ;/* save fifth harmonic real */
chla_5th_harmonic_imaginary .set 64 ;/* save fifth harmonic imaginary */
;
chlb_DC_component .set 65 ;/* save D.C component value */
chlb_fundamental_real .set 66 ;/* save fundamental real */
chlb_fundamental_imaginary .set 67 ;/* save fundamental imaginary */
chlb_2nd_harmonic_real .set 68 ;/* save second harmonic real */
chlb_2nd_harmonic_imaginary .set 69 ;/* save second harmonic imaginary */
chlb_3rd_harmonic_real .set 70 ;/* save third harmonic real */
chlb_3rd_harmonic_imaginary .set 71 ;/* save third harmonic imaginary */
chlb_5th_harmonic_real .set 72 ;/* save fifth harmonic real */
chlb_5th_harmonic_imaginary .set 73 ;/* save fifth harmonic imaginary */
chl_value .set 74 ;modify by fei 2001,9,13
chl_value1 .set 75 ;modify by fei.2001,9,19
chl_scale .set 77
chl_angle_compensate .set 78
chl_angle_compensate_real .set 79
chl_angle_compensate_imaginary .set 80
chl_empty_flag .set 81
;--------------------------------------------------------
DC_COMPONENT .set 1 ;/*direct current */
FUNDAMENTAL .set 2 ;/*fundamental */
HARMONIC_2ND .set 4 ;/*2nd hormonic */
HARMONIC_3RD .set 8 ;/*3rd hormonic */
HARMONIC_5TH .set 16 ;/*5th hormonic */
.global _pSampleDataAddr,_pChannelDataAddr,DIV_F30
.global _FSQRT
;FLOAT FSQRT(FLOAT REAL,FLOAT IMAG)
_FSQRT:
PUSH FP
LDI SP,FP
ABSF *-FP(2),R0
ABSF *-FP(3),R1
CMPF R0,R1
BGE _FSQRT1
LDF R0,R2
LDF R1,R0
LDF R2,R1
_FSQRT1:
LDF R1,R2
MPYF 9.0,R1
BZ _FSQRT2
LDF R0,R3
MPYF 3.0,R3
ADDF R3,R1
MPYF R0,R0
MPYF 5.0,R0
CALL DIV_F30
ADDF R2,R0
_FSQRT2:
POP FP
RETS
*********************************************************************
* _FFRENQ V5.11 - Floating point divide function for TMS3203x/4x
* Copyright (c) 1992-1999 Texas Instruments Incorporated
*********************************************************************
* Inputs: float FFRENQ(void)
* Outputs: R0
* Status: Set from result in R0
* Operation: Result = FFRENQ().
*********************************************************************
;Created By CG. 10-11-2001
;本段程序应加入到MACRO.ASM
.global _Sample_Ptr
.global _pChannelDataAddr
_mFREQ .macro parameter3
;parameter3. frequency calculate data address
;register use: R0 - save accumulate value
;register use: R2 - save temporary value
; R3 - save temporary value
; R4 - save temporary value
;
LDI AR1,AR3 ;把采样值指针存入AR3
LDP parameter3
LDI parameter3,AR4 ;把系数指针存入AR4
LDI 1,IR0
LDF 0,R2 ;initialize R2
LDF 0,R0
; Filter
RPTS Sample_Point * 2 - 1
MPYF3 *AR3++(IR0)%,*AR4++,R0
|| ADDF3 R0,R2,R2
ADDF R0,R2
.endm
;Created By CG. 10-11-2001
;本段程序应加入到BIOCS.ASM
.global _pFREQUENCY_S1
.global _pFREQUENCY_S2
.global _FFRENQ
HighCoeff .float 1/24
Uthreshold .float 100.0
_FFRENQ:
PUSH R4
PUSH R5
PUSH R6
PUSHF R6
PUSH AR4
PUSH AR3
LDI _AD_OneDataSize-1,BK ;采样区尺寸
LDP @_CalculatePtr ;Load data page pointer
LDI @_CalculatePtr,AR1 ;Load sample data address pointer
LDI AR1,R5
LDI *AR1--(50)%,R0
LDP @_pChannelDataAddr
LDI @_pChannelDataAddr,AR3
LDI Ua_Chn,R6
LDI R6,AR2
MPYI _OneChannelSize,AR2
ADDI AR3,AR2
LDP @Uthreshold
LDF @Uthreshold,R0
CMPF *+AR2(75),R0 ;chl_value1=75
BLT _UaNOZERO ;Uc is not zero
LDI Ub_Chn,R6
LDI R6,AR2
MPYI _OneChannelSize,AR2
ADDI AR3,AR2
CMPF *+AR2(75),R0
BLT _UaNOZERO ;Ub is not zero
LDI Uc_Chn,R6
LDI R6,AR2
MPYI _OneChannelSize,AR2
ADDI AR3,AR2
CMPF *+AR2(75),R0
BGT RESULT0 ;Ua is not zero
_UaNOZERO:
MPYI _AD_OneDataSize,R6
ADDI R6,AR1
; LDP @_pFFRENQ_EOF ;modified by lht.2001.12.7
; LDI @_pFFRENQ_EOF,ar0
;S1 calculate
_mFREQ @_pFREQUENCY_S1
LDF R2,R3
; MPYF *ar0,R3
;S2 calculate
_mFREQ @_pFREQUENCY_S2
LDF R2,R4
LDI R5,AR1
LDI *AR1--(56)%,R0
ADDI R6,AR1
;S3 calculate
_mFREQ @_pFREQUENCY_S1
LDF R2,R5
; MPYF *ar0,R5
;S4 calculate
_mFREQ @_pFREQUENCY_S2
ABSF R2,R0
ABSF R4,R1
CMPF R0,R1
BLE _FFRENT1
LDF R4,R2
LDF R3,R5
_FFRENT1: LDF R2,R1
LDF R5,R0
CMPF 0,R1
BNZ _FFRENT2
RESULT0: LDF 0,R0
BR FEND
_FFRENT2:
CALL DIV_F30
LDP @HighCoeff
LDF @HighCoeff,R1
MPYF R0,R1
MPYF R0,R1
MPYF R0,R1
ADDF R1,R0
; LDF 50.0,R1
; SUBF3 R0,R1,R0
FEND:
POP AR3
POP AR4
POPF R6
POP R6
POP R5
POP R4
RETS
;/****************************************************************************************************************/
;/***********************************************************************************************************/
;/************************************************************************************/
; 滤波
;
;/************************************************************************************/
;频率计算系数
.sect ".cinit"
.word Sample_Point * 4, _FREQUENCY_S
_FREQUENCY_S .usect ".FilterCoeff", Sample_Point * 4
_FREQUENCY_S1 .float -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
_FREQUENCY_S2 .float 0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,2,2,2,2,2,2,2,2,2,2,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0
;_FREQUENCY_S1 .float -1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1,-1,-1
;_FREQUENCY_S2 .float 0,0,0,-1,-1,-1,-1,-1,-1,2,2,2,2,2,2,-1,-1,-1,-1,-1,-1,0,0,0
.text
.global _pFREQUENCY_S1, _pFREQUENCY_S2, _AIChn
.global _pFOURIER1,_pFOURIER2,_pFOURIER3,_pFOURIER5
.global _CalculatePtr
_pFREQUENCY_S1 .word _FREQUENCY_S1
_pFREQUENCY_S2 .word _FREQUENCY_S2
_pChannelDataAddr .word _AIChn
.global _fei_calculate
_fei_calculate:
PUSH R7
PUSHF R7
PUSH R6
PUSHF R6
PUSH R5
PUSH R4
LDI _AD_OneDataSize-1,BK
LDP @_CalculatePtr ;Load data page pointer
LDI @_CalculatePtr,AR1
LDP @_pChannelDataAddr ;Load data page pointer
LDF *AR1--(Sample_Point)%,R2
LDI @_pChannelDataAddr,AR2 ;Load channel data address pointer
STF R2,*+AR2(chl_value)
LDI AR1,R3
LDP @_pFOURIER1
LDI _CHL_Number-1,R5 ;SET register R1 (32 sample channel remove from Power, Sum)
LDI @_pFOURIER1,AR0
LDI FUNDAMENTAL,R4
_Calcu_Loop:
ADDI _OneChannelSize,AR2
ADDI _AD_OneDataSize,R3
TSTB *+AR2(chl_calculate_style),R4
BZ _Calcu_Loop1
LDF 0,R0
LDF 0,R2 ;initialize R2
LDI R3,AR1
RPTS Sample_Point-1 ;Place AD_Number channel sample data
MPYF3 *AR1++%,*AR0++,R0
|| ADDF3 R0,R2,R2
ADDF R0,R2,R1
LDI R3,AR1
LDF 0,R0
LDF 0,R2 ;initialize R2
RPTS Sample_Point-1 ;Place AD_Number channel sample data
MPYF3 *AR1++%,*AR0++,R0
|| ADDF3 R0,R2,R2
ADDF R0,R2
LDF *+AR2(chl_angle_compensate_real),R6 ;//校正非同时采样引起的角度偏差
LDF *+AR2(chl_angle_compensate_imaginary),R7
MPYF3 R1,R6,R0
MPYF R7,R1
MPYF R2,R7
MPYF R2,R6
SUBF R7,R0
ADDF R6,R1
LDF *+AR2(chl_calculate_coefficient),R2 ;//比例系数
MPYF *+AR2(chl_scale),R2 ;//校正系数
MPYF R2,R0
MPYF R2,R1
MPYF R0,R0,R6
MPYF R1,R1,R7
ADDF R7,R6
SUBI Sample_Point*2,AR0
_Calcu_Loop1:
SUBI 1,R5
BNZD _Calcu_Loop
STF R0,*+AR2(chla_fundamental_real)
STF R1,*+AR2(chla_fundamental_imaginary)
STF R6,*+AR2(chl_value1)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -