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

📄 power.s

📁 mega128平台下
💻 S
字号:
	.module power.c
	.area data(ram, con, rel)
_disabled::
	.blkb 1
	.area idata
	.byte 1
	.area data(ram, con, rel)
	.area text(rom, con, rel)
;           diff -> <dead>
	.even
_getPowerLevel::
; #include <iom128v.h>
; #include <macros.h>
; 
; 
; extern   void PowerEnable();
; extern   void PowerDisable();
; 
;    unsigned char disabled = 1;
; 
;     enum {
; 	IDLE = 0,
; 	ADC_NR = (1 << SM0),
; 	POWER_DOWN = (1 << SM1),
; 	POWER_SAVE = (1 << SM0) + (1 << SM1),
; 	STANDBY = (1 << SM2) + (1 << SM1),
; 	EXT_STANDBY =  (1 << SM0) + (1 << SM1) + (1 << SM2)
;     };
; 
; 
;     unsigned char getPowerLevel() 
; 	{
; 	    unsigned char diff;
; 		if ((TIMSK) & ( ~(1<<TOIE0) ) ) { // Are external timers
	in R24,0x37
	andi R24,254
	breq L3
; 						       // running?  
; 	    	return IDLE;
	clr R16
	xjmp L2
L3:
; 			//return POWER_SAVE;
; 		}// else if (bit_is_set(SPCR, SPIE)) { // SPI (Radio stack on mica)
; 	   // return IDLE;
; 	    //	} else if (bit_is_set(ACSR, ACIE)) { //Analog comparator
; 	    //	    return IDLE;
; 	 else if ((ADCSRA & (1<<ADEN))) { // ADC is enabled
	sbis 0x6,7
	rjmp L5
; 	    return ADC_NR;
	ldi R16,8
	xjmp L2
L5:
; 	} else if ((TIMSK) & (1<<TOIE0) ) {
	in R2,0x37
	sbrs R2,0
	rjmp L7
; 	    //diff = inp(OCR0) - inp(TCNT0);
; 	    //if (diff < 16) 
; 		//return EXT_STANDBY;
; 	    return POWER_SAVE;
	ldi R16,24
	xjmp L2
L7:
; 	} else {
; 	    return POWER_DOWN;
	ldi R16,16
L2:
	.dbline 0 ; func end
	ret
;            foo -> R22
;            mcu -> R20
	.even
_doAdjustment::
	xcall push_gset2
; 	}
;  }
;     
;     void doAdjustment() {
; 	unsigned char foo, mcu;
; 	foo = getPowerLevel();
	xcall _getPowerLevel
	mov R22,R16
; 	mcu = MCUCR;
	in R20,0x35
; 	mcu &= 0xe3;
	andi R20,227
	cpi R16,28
	breq L12
	cpi R16,24
	brne L10
L12:
; 	if ((foo == EXT_STANDBY) || (foo == POWER_SAVE)) {
; 	    mcu |= IDLE;
	xjmp L14
L13:
	nop
L14:
; 	    while (((ASSR) & 0x7) != 0) {
	in R24,0x30
	andi R24,7
	brne L13
; 		asm("nop");
; 	    }
; 	    mcu &= 0xe3;
	andi R20,227
; 	}
L10:
; 	mcu |= foo;
	or R20,R22
; 	MCUCR =mcu;
	out 0x35,R20
; 	MCUCR |= (1<<SE);
	in R24,0x35
	ori R24,32
	out 0x35,R24
L9:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
;            mcu -> R20
	.even
_adjustPower::
	xcall push_gset1
; 	
;     }    
;    unsigned char adjustPower() {
;         unsigned char mcu;
;         if (!disabled){
	lds R2,_disabled
	tst R2
	brne L17
; 		/*mcu = MCUCR;
	ldi R16,<PL_doAdjustment
	ldi R17,>PL_doAdjustment
	xcall _post
	xjmp L18
L17:
; 	  		mcu &= 0xe3;
; 	  		mcu |= POWER_SAVE;
; 			MCUCR =mcu;
; 			MCUCR |= (1<<SE);
;         //*/  post(doAdjustment);
;         }else {
; 	  		mcu = MCUCR;
	in R20,0x35
; 	  		mcu &= 0xe3;
	andi R20,227
; 	  		mcu |= IDLE;
; 			MCUCR =mcu;
	out 0x35,R20
; 			MCUCR |= (1<<SE);
	in R24,0x35
	ori R24,32
	out 0x35,R24
;         }
L18:
; 	return 0;
	clr R16
L16:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.even
_PowerEnable::
;     }
; 
;    void PowerEnable() {
;       disabled = 0;
	clr R2
	sts _disabled,R2
L19:
	.dbline 0 ; func end
	ret
	.even
_PowerDisable::
; 
;     }
; 
;    void PowerDisable() {
;       disabled = 1;
	ldi R24,1
	sts _disabled,R24
L20:
	.dbline 0 ; func end
	ret
	.area func_lit
PL_doAdjustment:	.word `_doAdjustment

⌨️ 快捷键说明

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