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

📄 dataproc.s

📁 测量脉搏的源码 Cypress公司使用 CY27443 完成相关的功能
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module dataproc.c
	.area data(ram, con, rel)
_timer_pulse:
	.blkb 1
	.area idata
	.byte 190
	.area data(ram, con, rel)
	.dbfile ./dataproc.c
	.dbsym s timer_pulse _timer_pulse X
_timer_update:
	.blkb 1
	.area idata
	.byte 16
	.area data(ram, con, rel)
	.dbfile ./dataproc.c
	.dbsym s timer_update _timer_update X
_state:
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile ./dataproc.c
	.dbsym s state _state c
_index:
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile ./dataproc.c
	.dbsym s index _index c
	.area text(rom, con, rel)
	.dbfile ./dataproc.c
	.dbfunc e SleepTimer_handler _SleepTimer_handler fV
_SleepTimer_handler::
	.dbline -1
	.dbline 41
; #include "PSoCApi.h"
; #include <m8c.h>
; #include "globdefs.h"
; #include "utils.h"
; #include "sigproc.h"
; 
; 
; 
; 
; #define TIMER_PULSE_INIT_VALUE 190
; static volatile BYTE timer_pulse = TIMER_PULSE_INIT_VALUE;
; 
; #define INITTIMER() {timer_pulse = TIMER_PULSE_INIT_VALUE;}
; #define CHECKTIMER()(timer_pulse)
; 
; #define TIMER_UPDATE_INIT_VALUE 16
; static volatile BYTE timer_update = TIMER_UPDATE_INIT_VALUE;
; 
; 
; static BYTE state = RESET;
; static BYTE index = 0;
; 
; #define MEDIAN_FILTER1_LENGHT 13
; #define MEDIAN1 (MEDIAN_FILTER1_LENGHT >> 1)
; 
; #define MEDIAN_FILTER2_LENGHT 5
; #define MEDIAN2 ((MEDIAN_FILTER2_LENGHT >> 1))
; 
; #if (MEDIAN_FILTER1_LENGHT > MEDIAN_FILTER2_LENGHT)
; static PULSE_INTERVAL_TYPE pulse_buffer[MEDIAN_FILTER1_LENGHT];
; #else 
; static PULSE_INTERVAL_TYPE pulse_buffer[MEDIAN_FILTER2_LENGHT];
; #endif
; 
; #if ((MEDIAN_FILTER1_LENGHT < 3) || (MEDIAN_FILTER2_LENGHT < 3))
; #error "please set correct lenght for filters"
; #endif
; 
; #pragma interrupt_handler SleepTimer_handler;
; void SleepTimer_handler(void)
; {
	.dbline 42
	cmp [_timer_pulse],-66
	jnz L3
	.dbline 42
	or REG[4],8
	xjmp L4
L3:
	.dbline 42
;   if (TIMER_PULSE_INIT_VALUE == timer_pulse) SETBIT(LED_PORT, LED_BIT); else CLEARBIT(LED_PORT, LED_BIT);
	and REG[4],-9
L4:
	.dbline 43
;   if (timer_pulse) timer_pulse--;
	cmp [_timer_pulse],0
	jz L5
	.dbline 43
	dec [_timer_pulse]
L5:
	.dbline 45
	cmp [_timer_update],0
	jz L7
	.dbline 45
	dec [_timer_update]
L7:
	.dbline -2
	.dbline 46
;   
;   if (timer_update) timer_update--;
; }
L2:
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e Check_Update_Timeout _Check_Update_Timeout fc
;           temp -> X+0
_Check_Update_Timeout::
	.dbline -1
	push X
	mov X,SP
	add SP,1
	.dbline 49
; 
; BYTE Check_Update_Timeout(void)
; {
	.dbline 50
;   BYTE temp = 0;
	mov [X+0],0
	.dbline 52
;   
;   M8C_DisableGInt;
		and F, FEh

	.dbline 53
;   if (!timer_update) 
	cmp [_timer_update],0
	jnz L10
	.dbline 54
;   { 
	.dbline 55
;     timer_update = TIMER_UPDATE_INIT_VALUE;
	mov [_timer_update],16
	.dbline 56
;     temp = TRUE;
	mov [X+0],1
	.dbline 57
;   }
L10:
	.dbline 58
;   M8C_EnableGInt;
		or  F, 01h

	.dbline 60
;   
;   return temp;
	mov A,[X+0]
	.dbline -2
L9:
	add SP,-1
	pop X
	.dbline 0 ; func end
	ret
	.dbsym l temp 0 c
	.dbend
	.dbfunc e median_filter _median_filter fV
;        changed -> X+3
;           temp -> X+1
;              i -> X+0
;            len -> X-6
;         buffer -> X-5
_median_filter::
	.dbline -1
	push X
	mov X,SP
	add SP,4
	.dbline 64
; }
; 
; void median_filter(PULSE_INTERVAL_TYPE *buffer, BYTE len)
; {
L13:
	.dbline 68
;  PULSE_INTERVAL_TYPE temp;
;  BYTE i, changed;
; 
;   do {
	.dbline 69
;        changed = 0;
	mov [X+3],0
	.dbline 70
;        for (i = 0; i < (len-1); i++)
	mov [X+0],0
	xjmp L19
L16:
	.dbline 71
;         if (buffer[i] > buffer[i+1]) 
	mov A,[X+0]
	mov [__r1],A
	mov [__r0],0
	asl [__r1]
	rlc [__r0]
	mov A,[X-4]
	add [__r1],A
	mov A,[X-5]
	adc [__r0],A
	mvi A,[__r1]
	mov [__r0],A
	mvi A,[__r1]
	mov [__r1],A
	mov A,[X+0]
	mov [__r3],A
	mov [__r2],0
	add [__r3],1
	adc [__r2],0
	asl [__r3]
	rlc [__r2]
	mov A,[X-4]
	add [__r3],A
	mov A,[X-5]
	adc [__r2],A
	mvi A,[__r3]
	mov [__r2],A
	mvi A,[__r3]
	mov [__r3],A
	mov A,[__r0]
	cmp A,[__r2]
	jnz X1
	mov A,[__r1]
	cmp A,[__r3]
	jz L20
X1:
	jc L20
X0:
	.dbline 72
;         {
	.dbline 73
;            changed = 1;
	mov [X+3],1
	.dbline 75
;            
;            temp = buffer[i]; 
	mov A,[X+0]
	mov [__r1],A
	mov [__r0],0
	asl [__r1]
	rlc [__r0]
	mov A,[X-4]
	add [__r1],A
	mov A,[X-5]
	adc [__r0],A
	mvi A,[__r1]
	mov [X+1],A
	mvi A,[__r1]
	mov [X+2],A
	.dbline 76
;            buffer[i] = buffer[i+1];
	mov A,[X+0]
	mov [__r1],A
	mov [__r0],0
	asl [__r1]
	rlc [__r0]
	mov A,[X-4]
	add [__r1],A
	mov A,[X-5]
	adc [__r0],A
	mov A,[X+0]
	mov [__r3],A
	mov [__r2],0
	add [__r3],1
	adc [__r2],0
	asl [__r3]
	rlc [__r2]
	mov A,[X-4]
	add [__r3],A
	mov A,[X-5]
	adc [__r2],A
	mvi A,[__r3]
	mov [__r2],A
	mvi A,[__r3]
	mov [__r3],A
	mov A,[__r2]
	mvi [__r1],A
	mov A,[__r3]
	mvi [__r1],A
	.dbline 77
;            buffer[i+1] = temp;
	mov A,[X+0]
	mov [__r1],A
	mov [__r0],0
	add [__r1],1
	adc [__r0],0
	asl [__r1]
	rlc [__r0]
	mov A,[X-4]
	add [__r1],A
	mov A,[X-5]
	adc [__r0],A
	mov A,[X+1]
	mvi [__r1],A
	mov A,[X+2]
	mvi [__r1],A
	.dbline 78
;         }
L20:
L17:
	.dbline 70
	inc [X+0]
L19:
	.dbline 70
	mov A,[X-6]
	sub A,1
	mov [__r0],A
	mov A,[X+0]
	cmp A,[__r0]
	jz X2
	jc L16
X2:
	.dbline 79
L14:
	.dbline 79
;  } while (changed);
	cmp [X+3],0
	jnz L13
	.dbline -2
	.dbline 80
; }
L12:
	add SP,-4
	pop X
	.dbline 0 ; func end
	ret
	.dbsym l changed 3 c
	.dbsym l temp 1 i
	.dbsym l i 0 c
	.dbsym l len 0 I
	.dbsym l len -6 c
	.dbsym l buffer -5 pi
	.dbend
	.dbfunc e Pulse_Instant_Calculate _Pulse_Instant_Calculate fI
;  instant_pulse -> X+0
_Pulse_Instant_Calculate::
	.dbline -1
	push X
	mov X,SP
	add SP,2
	.dbline 83
; 
; INT Pulse_Instant_Calculate(void)
; {
	.dbline 84
;   INT instant_pulse = GetPulseDelta();  
	xcall _GetPulseDelta
	mov A,[__r1]
	mov [X+1],A
	mov A,[__r0]
	mov [X+0],A
	.dbline 86
; 
;   if (instant_pulse)
	cmp [X+0],0
	jnz X3
	cmp [X+1],0
	jz L23
X3:
	.dbline 87
;   {
	.dbline 88
;     INITTIMER();
	.dbline 88
	mov [_timer_pulse],-66
	.dbline 88
	.dbline 88
	.dbline 89
;     pulse_buffer[index++] = instant_pulse;
	mov [__r1],[_index]
	mov [__r0],0
	mov A,[__r1]
	add A,1
	mov [__r3],A
	mov A,0
	adc A,0
	mov [_index],[__r3]
	asl [__r1]
	rlc [__r0]
	add [__r1],<_pulse_buffer
	adc [__r0],>_pulse_buffer
	mov A,[X+0]
	mvi [__r1],A
	mov A,[X+1]
	mvi [__r1],A
	.dbline 91
;     
;     if (MEDIAN_FILTER1_LENGHT == index)
	cmp [_index],13
	jnz L25
	.dbline 92
;     {
	.dbline 93
;       index = 0;
	mov [_index],0
	.dbline 94
;       median_filter(pulse_buffer, MEDIAN_FILTER1_LENGHT);
	mov A,13
	push A
	mov A,>_pulse_buffer
	push A
	mov A,<_pulse_buffer
	push A
	xcall _median_filter
	add SP,-3
	.dbline 96
;       
;       instant_pulse = pulse_buffer[MEDIAN1 + 1] - pulse_buffer[MEDIAN1 - 1];
	mov A,[_pulse_buffer+14+1]
	sub A,[_pulse_buffer+10+1]
	mov [__r1],A
	mov A,[_pulse_buffer+14]
	sbb A,[_pulse_buffer+10]
	mov [__r0],A
	mov A,[__r1]
	mov [X+1],A
	mov A,[__r0]
	mov [X+0],A
	.dbline 97
;       instant_pulse <<= 3;
	asl [X+1]
	rlc [X+0]
	asl [X+1]
	rlc [X+0]
	asl [X+1]
	rlc [X+0]
	.dbline 98
;       if (instant_pulse > pulse_buffer[MEDIAN1]) return PULSE_CALC_ERROR;
	mov A,[X+0]
	cmp A,[_pulse_buffer+12]
	jnz X5
	mov A,[X+1]
	cmp A,[_pulse_buffer+12+1]
	jz L29
X5:
	jc L29
X4:
	.dbline 98
	mov [__r1],-1
	mov [__r0],-1
	xjmp L22
L29:
	.dbline 100
;              
;       instant_pulse = pulse_buffer[MEDIAN1] + pulse_buffer[MEDIAN1-1] + pulse_buffer[MEDIAN1+1];      
	mov A,[_pulse_buffer+12+1]
	add A,[_pulse_buffer+10+1]
	mov [__r1],A
	mov A,[_pulse_buffer+12]
	adc A,[_pulse_buffer+10]
	mov [__r0],A
	mov A,[_pulse_buffer+14+1]
	add [__r1],A
	mov A,[_pulse_buffer+14]
	adc [__r0],A
	mov A,[__r1]
	mov [X+1],A
	mov A,[__r0]
	mov [X+0],A
	.dbline 101
;       return (LONG)(3*60*PULSE_ADC_SAMPLE_FREQ)/instant_pulse;
	mov A,[X+1]
	mov [__r3],A
	mov A,[X+0]
	mov [__r2],A
	tst [__r2],-128
	jz X6
	mov [__r1],-1
	mov [__r0],-1
	jmp X7
X6:
	mov [__r1],0
	mov [__r0],0
X7:
	mov A,[__r0]
	push A
	mov A,[__r1]
	push A
	mov A,[__r2]
	push A
	mov A,[__r3]
	push A
	mov A,0
	push A
	push A
	mov A,70
	push A
	mov A,80
	push A
	xcall __divmod_32X32_32
	pop A
	mov [__r3],A
	pop A
	mov [__r2],A
	pop A
	pop A
	add SP,-4
	mov [__r1],[__r3]
	mov [__r0],[__r2]
	xjmp L22
L25:
	.dbline 103
;     }
;       return PULSE_IN_PROGRESS;
	mov [__r1],0
	mov [__r0],0
	xjmp L22
L23:
	.dbline 106
;   }
;     else 
;   if (CHECKTIMER()) return PULSE_IN_PROGRESS; else
	cmp [_timer_pulse],0
	jz L35
	.dbline 106
	mov [__r1],0
	mov [__r0],0
	xjmp L22
L35:
	.dbline 107
;   {
	.dbline 108
;     index = 0;
	mov [_index],0
	.dbline 109
;     return PULSE_CALC_ERROR;   
	mov [__r1],-1
	mov [__r0],-1
	.dbline -2
L22:
	add SP,-2
	pop X
	.dbline 0 ; func end
	ret
	.dbsym l instant_pulse 0 I
	.dbend
	.dbfunc e Pulse_Init_Calculate _Pulse_Init_Calculate fV

⌨️ 快捷键说明

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