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

📄 kertimer.lst

📁 无线传感器星型网络的节点的基站程序,采用802.15.4协议
💻 LST
📖 第 1 页 / 共 3 页
字号:
 103:kertimer.c    **** 			                mInterval=interval;
 513               	.LM40:
 514 014e A092 0000 		sts mInterval,r10
 104:kertimer.c    **** 			                timer0_setInterval(mInterval);
 516               	.LM41:
 517 0152 8A2D      		mov r24,r10
 518 0154 0E94 0000 		call timer0_setInterval
 105:kertimer.c    **** 			                setIntervalFlag = 0;
 520               	.LM42:
 521 0158 1092 0000 		sts setIntervalFlag,__zero_reg__
 522               	.L15:
 106:kertimer.c    **** 			                
 107:kertimer.c    **** 			              }
 108:kertimer.c    **** 			} 
 109:kertimer.c    **** 	os_atomic_end(_nesc_atomic); }
 524               	.LM43:
 525 015c 8C2F      		mov r24,r28
 526 015e 0E94 0000 		call os_atomic_end
 527               	.L11:
 528               	.LBE5:
 110:kertimer.c    ****        return SUCCESS;
 111:kertimer.c    **** }
 530               	.LM44:
 531 0162 80E0      		ldi r24,lo8(0)
 532 0164 90E0      		ldi r25,hi8(0)
 533               	/* epilogue: frame size=0 */
 534 0166 CF91      		pop r28
 535 0168 1F91      		pop r17
 536 016a 0F91      		pop r16
 537 016c FF90      		pop r15
 538 016e EF90      		pop r14
 539 0170 DF90      		pop r13
 540 0172 CF90      		pop r12
 541 0174 BF90      		pop r11
 542 0176 AF90      		pop r10
 543 0178 0895      		ret
 544               	/* epilogue end (size=10) */
 545               	/* function kertimer_start size 116 (97) */
 552               	.global	kertimer_stop
 554               	kertimer_stop:
 112:kertimer.c    **** 
 113:kertimer.c    **** void kertimer_stop(uint8_t id)
 114:kertimer.c    **** {
 556               	.LM45:
 557               	/* prologue: frame size=0 */
 558 017a EF92      		push r14
 559 017c FF92      		push r15
 560 017e 0F93      		push r16
 561 0180 1F93      		push r17
 562               	/* prologue end (size=4) */
 115:kertimer.c    **** 	if (id>=KER_TIMERS) return FAIL;
 564               	.LM46:
 565 0182 8330      		cpi r24,lo8(3)
 566 0184 E8F5      		brsh .L16
 116:kertimer.c    ****        if (mState&(0x1L<<id)) 
 568               	.LM47:
 569 0186 91E0      		ldi r25,lo8(1)
 570 0188 E92E      		mov r14,r25
 571 018a F12C      		mov r15,__zero_reg__
 572 018c 012D      		mov r16,__zero_reg__
 573 018e 112D      		mov r17,__zero_reg__
 574 0190 04C0      		rjmp 2f
 575 0192 EE0C      	1:	lsl r14
 576 0194 FF1C      		rol r15
 577 0196 001F      		rol r16
 578 0198 111F      		rol r17
 579 019a 8A95      	2:	dec r24
 580 019c D2F7      		brpl 1b
 581 019e 8091 0000 		lds r24,mState
 582 01a2 9091 0000 		lds r25,(mState)+1
 583 01a6 A091 0000 		lds r26,(mState)+2
 584 01aa B091 0000 		lds r27,(mState)+3
 585 01ae 8E21      		and r24,r14
 586 01b0 9F21      		and r25,r15
 587 01b2 A023      		and r26,r16
 588 01b4 B123      		and r27,r17
 589 01b6 0097      		sbiw r24,0
 590 01b8 A105      		cpc r26,__zero_reg__
 591 01ba B105      		cpc r27,__zero_reg__
 592 01bc 09F1      		breq .L16
 593               	.LBB8:
 117:kertimer.c    **** 	   	{ // if the timer is running 
 118:kertimer.c    **** 			    { os_atomic_t _nesc_atomic = os_atomic_start();
 595               	.LM48:
 596 01be 0E94 0000 		call os_atomic_start
 119:kertimer.c    **** 				{mState &= ~(0x1L<<id);
 598               	.LM49:
 599 01c2 E094      		com r14
 600 01c4 F094      		com r15
 601 01c6 0095      		com r16
 602 01c8 1095      		com r17
 603 01ca 8091 0000 		lds r24,mState
 604 01ce 9091 0000 		lds r25,(mState)+1
 605 01d2 A091 0000 		lds r26,(mState)+2
 606 01d6 B091 0000 		lds r27,(mState)+3
 607 01da 8E21      		and r24,r14
 608 01dc 9F21      		and r25,r15
 609 01de A023      		and r26,r16
 610 01e0 B123      		and r27,r17
 611 01e2 8093 0000 		sts mState,r24
 612 01e6 9093 0000 		sts (mState)+1,r25
 613 01ea A093 0000 		sts (mState)+2,r26
 614 01ee B093 0000 		sts (mState)+3,r27
 120:kertimer.c    **** 				if (!mState)
 616               	.LM50:
 617 01f2 0097      		sbiw r24,0
 618 01f4 A105      		cpc r26,__zero_reg__
 619 01f6 B105      		cpc r27,__zero_reg__
 620 01f8 19F4      		brne .L16
 121:kertimer.c    **** 					{
 122:kertimer.c    **** 			        		setIntervalFlag = 1;
 622               	.LM51:
 623 01fa 81E0      		ldi r24,lo8(1)
 624 01fc 8093 0000 		sts setIntervalFlag,r24
 625               	.L16:
 626               	.LBE8:
 627               	/* epilogue: frame size=0 */
 628 0200 1F91      		pop r17
 629 0202 0F91      		pop r16
 630 0204 FF90      		pop r15
 631 0206 EF90      		pop r14
 632 0208 0895      		ret
 633               	/* epilogue end (size=5) */
 634               	/* function kertimer_stop size 73 (64) */
 638               	KERTimer_fired:
 123:kertimer.c    **** 			    		} 	
 124:kertimer.c    **** 		              return SUCCESS;}
 125:kertimer.c    **** 			       os_atomic_end(_nesc_atomic); }
 126:kertimer.c    ****         	}
 127:kertimer.c    ****        
 128:kertimer.c    **** 	 return FAIL; //timer not running
 129:kertimer.c    **** }
 130:kertimer.c    **** 
 131:kertimer.c    **** static void adjustInterval(void) {
 132:kertimer.c    ****         uint8_t i, val = maxTimerInterval;
 133:kertimer.c    ****         if ( mState) 
 134:kertimer.c    **** 			{
 135:kertimer.c    **** 			            for (i=0;i<KER_TIMERS;i++)
 136:kertimer.c    **** 					{
 137:kertimer.c    **** 			                if ((mState&(0x1L<<i)) && (mTimerList[i].ticksLeft <val )) 
 138:kertimer.c    **** 								{
 139:kertimer.c    **** 			                   				 val = mTimerList[i].ticksLeft;
 140:kertimer.c    **** 								}
 141:kertimer.c    **** 			              }
 142:kertimer.c    **** 						
 143:kertimer.c    **** 				        { os_atomic_t _nesc_atomic = os_atomic_start();
 144:kertimer.c    **** 						{
 145:kertimer.c    **** 				                mInterval =  val;
 146:kertimer.c    **** 				                timer0_setInterval(mInterval);
 147:kertimer.c    **** 				                setIntervalFlag = 0;
 148:kertimer.c    **** 				               }
 149:kertimer.c    **** 					    os_atomic_end(_nesc_atomic);
 150:kertimer.c    **** 					 }
 151:kertimer.c    **** 
 152:kertimer.c    **** 		        } 
 153:kertimer.c    **** 	else 
 154:kertimer.c    **** 		        {
 155:kertimer.c    **** 					{ os_atomic_t _nesc_atomic = os_atomic_start();
 156:kertimer.c    **** 						{
 157:kertimer.c    **** 				              mInterval=maxTimerInterval;
 158:kertimer.c    **** 				              timer0_setInterval(mInterval);
 159:kertimer.c    **** 				              setIntervalFlag = 0;
 160:kertimer.c    **** 			             }
 161:kertimer.c    **** 				      os_atomic_end(_nesc_atomic); }
 162:kertimer.c    **** 
 163:kertimer.c    **** 		        }
 164:kertimer.c    **** 			
 165:kertimer.c    **** 		    }
 166:kertimer.c    **** 
 167:kertimer.c    **** static void   enqueue(uint8_t value) 
 168:kertimer.c    **** {
 169:kertimer.c    ****       if (queue_tail == KER_TIMERS - 1)
 170:kertimer.c    **** 	  	queue_tail = -1;
 171:kertimer.c    ****       queue_tail++;
 172:kertimer.c    ****       queue_size++;
 173:kertimer.c    ****       queue[(uint8_t)queue_tail] = value;
 174:kertimer.c    **** }
 175:kertimer.c    **** static uint8_t dequeue() 
 176:kertimer.c    **** {
 177:kertimer.c    ****       if (queue_size == 0)
 178:kertimer.c    ****             return KER_TIMERS;
 179:kertimer.c    ****       if (queue_head == KER_TIMERS - 1)
 180:kertimer.c    ****             queue_head = -1;
 181:kertimer.c    ****       queue_head++;
 182:kertimer.c    ****       queue_size--;
 183:kertimer.c    ****       return queue[(uint8_t)queue_head];
 184:kertimer.c    ****  }
 185:kertimer.c    **** static void KERTimer_fired(void)
 186:kertimer.c    **** {
 640               	.LM52:
 641               	/* prologue: frame size=0 */
 642               	/* prologue end (size=0) */
 643               	.LBB9:
 644               	.LBB10:
 646               	.LM53:
 647 020a 9091 0000 		lds r25,queue_size
 648 020e 9923      		tst r25
 649 0210 19F4      		brne .L21
 651               	.LM54:
 652 0212 23E0      		ldi r18,lo8(3)
 653 0214 30E0      		ldi r19,hi8(3)
 654 0216 16C0      		rjmp .L22
 655               	.L21:
 657               	.LM55:
 658 0218 8091 0000 		lds r24,queue_head
 659 021c 8230      		cpi r24,lo8(2)
 660 021e 19F4      		brne .L23
 662               	.LM56:
 663 0220 8FEF      		ldi r24,lo8(-1)
 664 0222 8093 0000 		sts queue_head,r24
 665               	.L23:
 667               	.LM57:
 668 0226 8091 0000 		lds r24,queue_head
 669 022a 8F5F      		subi r24,lo8(-(1))
 670 022c 8093 0000 		sts queue_head,r24
 672               	.LM58:
 673 0230 9150      		subi r25,lo8(-(-1))
 674 0232 9093 0000 		sts queue_size,r25
 675 0236 E82F      		mov r30,r24
 676 0238 FF27      		clr r31
 677 023a E050      		subi r30,lo8(-(queue))
 678 023c F040      		sbci r31,hi8(-(queue))
 679 023e 8081      		ld r24,Z
 680 0240 282F      		mov r18,r24
 681 0242 3327      		clr r19
 682               	.L22:
 683               	.LBE10:
 684               	.LBE9:
 187:kertimer.c    ****       void (*func)(void );
 188:kertimer.c    ****       uint8_t itimer = dequeue();
 189:kertimer.c    ****       //printf("\n------1----\n");
 190:kertimer.c    ****       if (itimer < KER_TIMERS)
 686               	.LM59:
 687 0244 2330      		cpi r18,lo8(3)
 688 0246 80F4      		brsh .L20
 191:kertimer.c    **** 	  	{ 
 192:kertimer.c    **** 	  	       //printf("\n------2-----\n");
 193:kertimer.c    **** 	  		func=mTimerList[itimer].tp;
 690               	.LM60:
 691 0248 3327      		clr r19
 692 024a 8BE0      		ldi r24,lo8(11)
 693 024c 90E0      		ldi r25,hi8(11)
 694 024e 289F      		mul r18,r24
 695 0250 F001      		movw r30,r0
 696 0252 299F      		mul r18,r25
 697 0254 F00D      		add r31,r0
 698 0256 389F      		mul r19,r24
 699 0258 F00D      		add r31,r0
 700 025a 1124      		clr r1
 701 025c E050      		subi r30,lo8(-(mTimerList))
 702 025e F040      		sbci r31,hi8(-(mTimerList))
 703 0260 0184      		ldd __tmp_reg__,Z+9
 704 0262 F285      		ldd r31,Z+10
 705 0264 E02D      		mov r30,__tmp_reg__
 194:kertimer.c    ****                  	func();
 707               	.LM61:
 708 0266 0995      		icall
 709               	.L20:
 710 0268 0895      		ret
 711               	/* epilogue: frame size=0 */
 712 026a 0895      		ret
 713               	/* epilogue end (size=1) */
 714               	/* function KERTimer_fired size 49 (48) */
 719               	.global	KERTimer_Fire
 721               	KERTimer_Fire:
 195:kertimer.c    ****       	       }
 196:kertimer.c    ****      
 197:kertimer.c    **** }
 198:kertimer.c    **** 
 199:kertimer.c    **** void KERTimer_Fire(void) 
 200:kertimer.c    **** {
 723               	.LM62:
 724               	/* prologue: frame size=0 */
 725 026c 4F92      		push r4
 726 026e 5F92      		push r5
 727 0270 6F92      		push r6
 728 0272 7F92      		push r7
 729 0274 9F92      		push r9
 730 0276 AF92      		push r10
 731 0278 BF92      		push r11
 732 027a CF92      		push r12
 733 027c DF92      		push r13
 734 027e EF92      		push r14
 735 0280 FF92      		push r15
 736 0282 0F93      		push r16
 737 0284 1F93      		push r17
 738 0286 CF93      		push r28
 739 0288 DF93      		push r29
 740               	/* prologue end (size=15) */
 201:kertimer.c    ****         uint8_t i; 
 202:kertimer.c    **** 	 setIntervalFlag = 1;
 742               	.LM63:
 743 028a 81E0      		ldi r24,lo8(1)
 744 028c 8093 0000 		sts setIntervalFlag,r24
 203:kertimer.c    ****         if (mState) 
 746               	.LM64:
 747 0290 8091 0000 		lds r24,mState
 748 0294 9091 0000 		lds r25,(mState)+1
 749 0298 A091 0000 		lds r26,(mState)+2
 750 029c B091 0000 		lds r27,(mState)+3
 751 02a0 0097      		sbiw r24,0
 752 02a2 A105      		cpc r26,__zero_reg__
 753 02a4 B105      		cpc r27,__zero_reg__
 754 02a6 09F4      		brne .+2
 755 02a8 89C0      		rjmp .L26
 204:kertimer.c    **** 	{
 205:kertimer.c    ****             for (i=0;i<KER_TIMERS;i++) 
 757               	.LM65:
 758 02aa 9924      		clr r9
 759 02ac 60E0      		ldi r22,lo8(mTimerList)
 760 02ae C62E      		mov r12,r22
 761 02b0 60E0      		ldi r22,hi8(mTimerList)
 762 02b2 D62E      		mov r13,r22
 763 02b4 AA24      		clr r10
 764 02b6 BB24      		clr r11
 765               	.L36:
 206:kertimer.c    **** 	     {
 207:kertimer.c    ****                 if (mState&(0x1L<<i)) 
 767               	.LM66:
 768 02b8 51E0      		ldi r21,lo8(1)
 769 02ba E52E      		mov r14,r21
 770 02bc F12C      		mov r15,__zero_reg__
 771 02be 012D      		mov r16,__zero_reg__
 772 02c0 112D      		mov r17,__zero_reg__
 773 02c2 0A2C      		mov r0,r10
 774 02c4 04C0      		rjmp 2f
 775 02c6 EE0C      	1:	lsl r14
 776 02c8 FF1C      		rol r15
 777 02ca 001F      		rol r16
 778 02cc 111F      		rol r17
 779 02ce 0A94      	2:	dec r0
 780 02d0 D2F7      		brpl 1b
 781 02d2 4090 0000 		lds r4,mState
 782 02d6 5090 0000 		lds r5,(mState)+1
 783 02da 6090 0000 		lds r6,(mState)+2
 784 02de 7090 0000 		lds r7,(mState)+3
 785 02e2 D301      		movw r26,r6
 786 02e4 C201      		movw r24,r4
 787 02e6 8E21      		and r24,r14
 788 02e8 9F21      		and r25,r15
 789 02ea A023      		and r26,r16
 790 02ec B123      		and r27,r17
 791 02ee 0097      		sbiw r24,0

⌨️ 快捷键说明

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