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

📄 macs.lst

📁 无线传感器星型网络的节点的基站程序,采用802.15.4协议
💻 LST
📖 第 1 页 / 共 4 页
字号:
   1               		.file	"macs.c"
   2               		.arch atmega128
   3               	__SREG__ = 0x3f
   4               	__SP_H__ = 0x3e
   5               	__SP_L__ = 0x3d
   6               	__tmp_reg__ = 0
   7               	__zero_reg__ = 1
   8               		.global __do_copy_data
   9               		.global __do_clear_bss
  11               		.text
  12               	.Ltext0:
 222               		.data
 223               	.LC0:
 224 0000 0A2D 2D2D 		.string	"\n-------it is in scan confirm---------"
 224      2D2D 2D2D 
 224      6974 2069 
 224      7320 696E 
 224      2073 6361 
 225               		.text
 228               	.global	mlmeScanConfirm
 230               	mlmeScanConfirm:
   1:macs.c        **** #include "mac.h"
   2:macs.c        **** extern MAC_STATE_TYPE     mac_current_state;
   3:macs.c        **** extern MAC_PIB  mac_pib_data;
   4:macs.c        **** extern uint8_t                                         current_pending_num;
   5:macs.c        **** extern SHORT_ADDR  default_short_addr;
   6:macs.c        **** 
   7:macs.c        **** void mlmeScanConfirm(MLME_SCAN_CONFIRM  scan_result_info)
   8:macs.c        **** {
 232               	.LM1:
 233               	/* prologue: frame size=0 */
 234 0000 CF93      		push r28
 235 0002 DF93      		push r29
 236 0004 CDB7      		in r28,__SP_L__
 237 0006 DEB7      		in r29,__SP_H__
 238               	/* prologue end (size=4) */
   9:macs.c        ****        //根据scan_result_info来修改对应的mac层和PHY层的pib信息
  10:macs.c        ****        //本来有个复杂的选择算法,这里简单处理第一个
  11:macs.c        ****      //printf("\n-------it is in scan confirm---------\n");
  12:macs.c        **** 	if((scan_result_info.status==SUCCESS)&&(scan_result_info.scanType==ORPHAN_SCAN))
 240               	.LM2:
 241 0008 8D81      		ldd r24,Y+5
 242 000a 8823      		tst r24
 243 000c 09F0      		breq .+2
 244 000e 45C0      		rjmp .L8
 246               	.LM3:
 247 0010 8E81      		ldd r24,Y+6
 248 0012 8330      		cpi r24,lo8(3)
 249 0014 11F4      		brne .L10
  13:macs.c        **** 	{
  14:macs.c        **** 	   //printf("\n----SUCCESSFULL ORPHAN SCAN----\n");
  15:macs.c        **** 	     mac_current_state=MAC_STATE_IDLE;
 251               	.LM4:
 252 0016 80E1      		ldi r24,lo8(16)
 253 0018 41C0      		rjmp .L11
 254               	.L10:
  16:macs.c        **** 	     return;	 
  17:macs.c        **** 	}
  18:macs.c        ****        if((scan_result_info.status==SUCCESS)&&(scan_result_info.scanType==ACTIVE_PASSIVE_SCAN))
 256               	.LM5:
 257 001a 8130      		cpi r24,lo8(1)
 258 001c F1F5      		brne .L8
  19:macs.c        ****        {
  20:macs.c        **** 	   printf("\n-------it is in scan confirm---------\n");
 260               	.LM6:
 261 001e 80E0      		ldi r24,lo8(.LC0)
 262 0020 90E0      		ldi r25,hi8(.LC0)
 263 0022 0E94 0000 		call puts
  21:macs.c        ****            mac_current_state=MAC_STATE_ACTIVE_PASSIVE_SCAN_FINISHED;
 265               	.LM7:
 266 0026 8AE0      		ldi r24,lo8(10)
 267 0028 8093 0000 		sts mac_current_state,r24
  22:macs.c        ****            //printf("\n-----the macbeacon is %02x\n",scan_result_info.pPANDescriptorList[0].superfr
  23:macs.c        **** 	    mac_pib_data.macBeaconOrder=((scan_result_info.pPANDescriptorList[0].superframeSpec.SF.bytes.L
 269               	.LM8:
 270 002c 8A8D      		ldd r24,Y+26
 271 002e 982F      		mov r25,r24
 272 0030 9F70      		andi r25,lo8(15)
 273 0032 9093 0000 		sts mac_pib_data+8,r25
  24:macs.c        **** 	    mac_pib_data.macSuperframeOrder=((scan_result_info.pPANDescriptorList[0].superframeSpec.SF.byt
 275               	.LM9:
 276 0036 8295      		swap r24
 277 0038 8F70      		andi r24,0x0f
 278 003a 8093 0000 		sts mac_pib_data+42,r24
  25:macs.c        **** 	    mac_pib_data.macPANId.Val=scan_result_info.pPANDescriptorList[0].coordinator.panID.Val; 		
 280               	.LM10:
 281 003e 888D      		ldd r24,Y+24
 282 0040 998D      		ldd r25,Y+25
 283 0042 9093 0000 		sts (mac_pib_data+28)+1,r25
 284 0046 8093 0000 		sts mac_pib_data+28,r24
  26:macs.c        **** 	    if(scan_result_info.pPANDescriptorList[0].coordinator.addrMode==0x02)	
 286               	.LM11:
 287 004a 8D85      		ldd r24,Y+13
 288 004c 8230      		cpi r24,lo8(2)
 289 004e 39F4      		brne .L4
  27:macs.c        **** 	    	{
  28:macs.c        **** 	           mac_pib_data.macCoordShortAddress.Val=scan_result_info.pPANDescriptorList[0].coordinato
 291               	.LM12:
 292 0050 8E89      		ldd r24,Y+22
 293 0052 9F89      		ldd r25,Y+23
 294 0054 9093 0000 		sts (mac_pib_data+22)+1,r25
 295 0058 8093 0000 		sts mac_pib_data+22,r24
 296 005c 1AC0      		rjmp .L5
 297               	.L4:
  29:macs.c        **** 	    	}
  30:macs.c        **** 	    else if(scan_result_info.pPANDescriptorList[0].coordinator.addrMode==0x03)	
 299               	.LM13:
 300 005e 8330      		cpi r24,lo8(3)
 301 0060 C1F4      		brne .L5
  31:macs.c        **** 	    	{
  32:macs.c        **** 	    	    mac_pib_data.macCoordExtendedAddress.longaddr=scan_result_info.pPANDescriptorList[0].coor
 303               	.LM14:
 304 0062 2E85      		ldd r18,Y+14
 305 0064 3F85      		ldd r19,Y+15
 306 0066 4889      		ldd r20,Y+16
 307 0068 5989      		ldd r21,Y+17
 308 006a 6A89      		ldd r22,Y+18
 309 006c 7B89      		ldd r23,Y+19
 310 006e 8C89      		ldd r24,Y+20
 311 0070 9D89      		ldd r25,Y+21
 312 0072 2093 0000 		sts mac_pib_data+14,r18
 313 0076 3093 0000 		sts mac_pib_data+15,r19
 314 007a 4093 0000 		sts mac_pib_data+16,r20
 315 007e 5093 0000 		sts mac_pib_data+17,r21
 316 0082 6093 0000 		sts mac_pib_data+18,r22
 317 0086 7093 0000 		sts mac_pib_data+19,r23
 318 008a 8093 0000 		sts mac_pib_data+20,r24
 319 008e 9093 0000 		sts mac_pib_data+21,r25
 320               	.L5:
  33:macs.c        **** 	    	}
  34:macs.c        **** 	    ppib.phyCurrentChanel=scan_result_info.pPANDescriptorList[0].logicalChannel;
 322               	.LM15:
 323 0092 8C85      		ldd r24,Y+12
 324 0094 8093 0000 		sts ppib,r24
 325 0098 03C0      		rjmp .L1
 326               	.L8:
  35:macs.c        **** 	    //PLME_SET_request(phyCurrentChanel_id, ppib.phyCurrentChanel);
  36:macs.c        **** 	    //OS_post(synrequest_task);
  37:macs.c        ****        }
  38:macs.c        ****  	else
  39:macs.c        ****  	{
  40:macs.c        ****  	   if(!IS_COORDINATOR)
  41:macs.c        ****  	   	{
  42:macs.c        ****  	   mac_current_state=MAC_STATE_UNSTARTED;
  43:macs.c        **** 	 //printf("\n--PASSIVE SCAN FAILURE-----\n");
  44:macs.c        ****  	   	}
  45:macs.c        **** 	   else
  46:macs.c        **** 	   	{
  47:macs.c        **** 	   mac_current_state=MAC_STATE_ACTIVE_PASSIVE_SCAN_FINISHED;
 328               	.LM16:
 329 009a 8AE0      		ldi r24,lo8(10)
 330               	.L11:
 331 009c 8093 0000 		sts mac_current_state,r24
 332               	.L1:
 333               	/* epilogue: frame size=0 */
 334 00a0 DF91      		pop r29
 335 00a2 CF91      		pop r28
 336 00a4 0895      		ret
 337               	/* epilogue end (size=3) */
 338               	/* function mlmeScanConfirm size 83 (76) */
 341               	.global	mlmeStartConfirm
 343               	mlmeStartConfirm:
  48:macs.c        **** 	 //printf("\n---doesn't exist any 802.15.4 network ----\n");
  49:macs.c        **** 	 //printf("---I will be the coordinator----");
  50:macs.c        **** 	   	}
  51:macs.c        **** 	   //OS_post(scan_task);	
  52:macs.c        ****  	} 
  53:macs.c        ****        
  54:macs.c        **** }
  55:macs.c        **** 
  56:macs.c        **** void mlmeStartConfirm(void)
  57:macs.c        **** {
 345               	.LM17:
 346               	/* prologue: frame size=0 */
 347               	/* prologue end (size=0) */
 348               	/* epilogue: frame size=0 */
 349 00a6 0895      		ret
 350               	/* epilogue end (size=1) */
 351               	/* function mlmeStartConfirm size 1 (0) */
 353               		.data
 354               	.LC1:
 355 0027 0A2D 2D2D 		.string	"\n----the association request frame is no acked-----"
 355      2D74 6865 
 355      2061 7373 
 355      6F63 6961 
 355      7469 6F6E 
 356               	.LC2:
 357 005b 0A2D 2D2D 		.string	"\n---didn't received the association response frame---"
 357      6469 646E 
 357      2774 2072 
 357      6563 6569 
 357      7665 6420 
 358               		.text
 362               	.global	mlmeAssociateConfirm
 364               	mlmeAssociateConfirm:
  58:macs.c        **** 	//通知高层发送完毕。
  59:macs.c        **** 	//可以通过post高层任务来完成高层的函数任务
  60:macs.c        **** 	//空函数,高层实现
  61:macs.c        **** }
  62:macs.c        **** 
  63:macs.c        **** 
  64:macs.c        **** void mlmeAssociateConfirm(SHORT_ADDR AssocShortAddress, BYTE status)
  65:macs.c        **** {
 366               	.LM18:
 367               	/* prologue: frame size=0 */
 368 00a8 CF93      		push r28
 369 00aa DF93      		push r29
 370               	/* prologue end (size=2) */
 371 00ac EC01      		movw r28,r24
  66:macs.c        **** 	//printf("\n------success associate------ %d\n",status);
  67:macs.c        **** 	//printf("\nthe allocated short address is %04x\n",AssocShortAddress.Val);
  68:macs.c        **** 	if(status==NO_ACK)
 373               	.LM19:
 374 00ae 693E      		cpi r22,lo8(-23)
 375 00b0 19F4      		brne .L14
  69:macs.c        **** 		{
  70:macs.c        **** 		
  71:macs.c        **** 		printf("\n----the association request frame is no acked-----\n");
 377               	.LM20:
 378 00b2 80E0      		ldi r24,lo8(.LC1)
 379 00b4 90E0      		ldi r25,hi8(.LC1)
 380 00b6 04C0      		rjmp .L18
 381               	.L14:
  72:macs.c        **** 		
  73:macs.c        **** 		//mac_current_state=MAC
  74:macs.c        **** 		}
  75:macs.c        **** 	//两种情况为NO_DATA
  76:macs.c        **** 	if(status==NO_DATA)
 383               	.LM21:
 384 00b8 6B3E      		cpi r22,lo8(-21)
 385 00ba 29F4      		brne .L15
  77:macs.c        **** 		printf("\n---didn't received the association response frame---\n");
 387               	.LM22:
 388 00bc 80E0      		ldi r24,lo8(.LC2)
 389 00be 90E0      		ldi r25,hi8(.LC2)
 390               	.L18:
 391 00c0 0E94 0000 		call puts
 392 00c4 18C0      		rjmp .L16
 393               	.L15:
  78:macs.c        **** 		
  79:macs.c        **** 	if(status==SUCCESS)
 395               	.LM23:
 396 00c6 6623      		tst r22
 397 00c8 B1F4      		brne .L16
  80:macs.c        **** 	{
  81:macs.c        **** 	mac_current_state=MAC_STATE_ASSOC_FINISHED;
 399               	.LM24:
 400 00ca 84E0      		ldi r24,lo8(4)
 401 00cc 8093 0000 		sts mac_current_state,r24
  82:macs.c        **** 	//mac_current_state=MAC_STATE_IDLE;
  83:macs.c        **** 	//mac_current_state_saved=MAC_STATE_IDLE;
  84:macs.c        **** 	phy_channel_state=PHY_IDLE;
 403               	.LM25:
 404 00d0 6093 0000 		sts phy_channel_state,r22
  85:macs.c        **** 	PLME_SET_TRX_STATE_request(RX_ON);
 406               	.LM26:
 407 00d4 86E0      		ldi r24,lo8(6)
 408 00d6 0E94 0000 		call PLME_SET_TRX_STATE_request
  86:macs.c        **** 	mac_pib_data.macShortAddress=AssocShortAddress;
 410               	.LM27:
 411 00da D093 0000 		sts (mac_pib_data+32)+1,r29
 412 00de C093 0000 		sts mac_pib_data+32,r28
  87:macs.c        **** 	cc2420_setshortaddress((uint16_t)mac_pib_data.macShortAddress.Val);
 414               	.LM28:
 415 00e2 CE01      		movw r24,r28
 416 00e4 0E94 0000 		call cc2420_setshortaddress
  88:macs.c        ****        cc2420_setpanid((uint16_t)mac_pib_data.macPANId.Val);		
 418               	.LM29:
 419 00e8 8091 0000 		lds r24,mac_pib_data+28
 420 00ec 9091 0000 		lds r25,(mac_pib_data+28)+1
 421 00f0 0E94 0000 		call cc2420_setpanid
 422 00f4 03C0      		rjmp .L13
 423               	.L16:
  89:macs.c        **** 	}
  90:macs.c        **** 	else 
  91:macs.c        **** 	{
  92:macs.c        **** 	   //主要工作由网络层决定
  93:macs.c        **** 	   mac_current_state=MAC_STATE_ACTIVE_PASSIVE_SCAN_FINISHED;
 425               	.LM30:
 426 00f6 8AE0      		ldi r24,lo8(10)
 427 00f8 8093 0000 		sts mac_current_state,r24
 428               	.L13:
 429               	/* epilogue: frame size=0 */
 430 00fc DF91      		pop r29
 431 00fe CF91      		pop r28
 432 0100 0895      		ret
 433               	/* epilogue end (size=3) */
 434               	/* function mlmeAssociateConfirm size 45 (40) */
 441               	.global	mlmeAssociateResponse
 443               	mlmeAssociateResponse:
  94:macs.c        **** 	}
  95:macs.c        **** }
  96:macs.c        **** 
  97:macs.c        **** //**************************//
  98:macs.c        **** void mlmeAssociateIndication(MLME_ASSOCIATE_INDICATION   mlme_associate_indication_info)
  99:macs.c        **** {
 100:macs.c        **** 	//协调者在收到associate request帧后通知高层
 101:macs.c        **** 	//可以post高层任务

⌨️ 快捷键说明

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