📄 mac.lst
字号:
##############################################################################
# #
# IAR 8051 C/C++ Compiler V7.20H/W32 11/Dec/2008 13:41:48 #
# Copyright 2004-2006 IAR Systems. All rights reserved. #
# #
# Core = plain #
# Code model = near #
# Data model = large #
# Calling convention = xdata reentrant #
# Constant location = data #
# Dptr setup = 1,16 #
# Source file = D:\zigbee\演示程序\简化协议的无线收发演示\demo_pr #
# o\src\mac.c #
# Command line = -lC D:\zigbee\演示程序\简化协议的无线收发演示\dem #
# o_pro\Debug\List\ -lA D:\zigbee\演示程序\简化协议 #
# 的无线收发演示\demo_pro\Debug\List\ -o #
# D:\zigbee\演示程序\简化协议的无线收发演示\demo_pr #
# o\Debug\Obj\ -e -z2 --no_cse --no_unroll #
# --no_inline --no_code_motion --no_tbaa --debug #
# --core=plain --dptr=16,1 --data_model=large #
# --code_model=near --calling_convention=xdata_reen #
# trant --place_constants=data --nr_virtual_regs 8 #
# -I "C:\Program Files\IAR Systems\Embedded #
# Workbench 4.05 Evaluation version\8051\INC\" -I #
# "C:\Program Files\IAR Systems\Embedded Workbench #
# 4.05 Evaluation version\8051\INC\CLIB\" #
# D:\zigbee\演示程序\简化协议的无线收发演示\demo_pr #
# o\src\mac.c #
# List file = D:\zigbee\演示程序\简化协议的无线收发演示\demo_pr #
# o\Debug\List\mac.lst #
# Object file = D:\zigbee\演示程序\简化协议的无线收发演示\demo_pr #
# o\Debug\Obj\mac.r51 #
# #
# #
##############################################################################
D:\zigbee\演示程序\简化协议的无线收发演示\demo_pro\src\mac.c
1
2 /*
3 V0.1 Initial Release 10/July/2006 RBR
4
5 */
6
7
8 #include "compiler.h"
9 #include "lrwpan_config.h" //user configurations
10 #include "lrwpan_common_types.h" //types common acrosss most files
11 #include "ieee_lrwpan_defs.h"
12 #include "console.h"
13 #include "hal.h"
14 #include "halstack.h"
15 #include "phy.h"
16 #include "mac.h"
17
18 #include "sendpack.h"
19 //#include "nwk.h"
20
21 //#include "neighbor.h"
\ In segment XDATA_Z, align 1, keep-with-next
\ 000000 REQUIRE __INIT_XDATA_Z
22 SUB_MAC_FRAME submacCurrentFrame;
\ submacCurrentFrame:
\ 000000 DS 62
23 /*
24 typedef enum _MAC_RXSTATE_ENUM {
25 MAC_RXSTATE_IDLE,
26 MAC_RXSTATE_NWK_HANDOFF,
27 MAC_RXSTATE_CMD_PENDING
28 } MAC_RXSTATE_ENUM;*/
29 //
30 //static MAC_RXSTATE_ENUM macRxState;
31
\ In segment XDATA_Z, align 1, keep-with-next
\ 000000 REQUIRE __INIT_XDATA_Z
32 MAC_PIB mac_pib;
\ mac_pib:
\ 000000 DS 551
33 //MAC_SERVICE a_mac_service;
34 //MAC_STATE_ENUM macState;
35
\ In segment XDATA_Z, align 1, keep-with-next
\ 000000 REQUIRE __INIT_XDATA_Z
36 NODE_INFO macInfo;
\ macInfo:
\ 000000 DS 13
37
38
39 //there can only be one TX in progress at a time, so
40 //a_mac_tx_data contains the arguments for that TX.
\ In segment XDATA_Z, align 1, keep-with-next
\ 000000 REQUIRE __INIT_XDATA_Z
41 MAC_TX_DATA a_mac_tx_data;
\ a_mac_tx_data:
\ 000000 DS 18
42
43 //this is used for parsing of current packet.
\ In segment XDATA_Z, align 1, keep-with-next
\ 000000 REQUIRE __INIT_XDATA_Z
44 MAC_RX_DATA a_mac_rx_data;
\ a_mac_rx_data:
\ 000000 DS 25
45
\ In segment XDATA_Z, align 1, keep-with-next
\ 000000 REQUIRE __INIT_XDATA_Z
46 LRWPAN_STATUS_ENUM macTxFSM_status;
\ macTxFSM_status:
\ 000000 DS 1
47
48
49 //locals
50 //static UINT32 mac_utility_timer; //utility timer
51
52 //local functions
53 //static void macTxData(void);
54 static void macParseHdr(void);
55 static void macRxFSM(void);
56
57
58
59
60 //does not turn on radio.
\ In segment NEAR_CODE, align 1, keep-with-next
61 void macInit(void){
\ macInit:
\ 000000 74F5 MOV A,#-0xb
\ 000002 12.... LCALL ?FUNC_ENTER_XDATA
\ 000005 ; Saved register size: 11
\ 000005 ; Auto size: 0
62
63 BYTE *p;
64 //macState = MAC_STATE_IDLE;
65 //macRxState = MAC_RXSTATE_IDLE;
66 mac_pib.flags.val = 0;
\ 000005 90.... MOV DPTR,#__Constant_0
\ 000008 78.. MOV R0,#?V0 + 0
\ 00000A 12.... LCALL ?L_MOV_X
\ 00000D 90.... MOV DPTR,#(mac_pib + 4)
\ 000010 78.. MOV R0,#?V0 + 0
\ 000012 12.... LCALL ?L_MOV_TO_X
67 mac_pib.rxTail = 0;
\ 000015 7400 MOV A,#0x0
\ 000017 90.... MOV DPTR,#(mac_pib + 39)
\ 00001A F0 MOVX @DPTR,A
68 mac_pib.rxHead = 0;
\ 00001B 7400 MOV A,#0x0
\ 00001D 90.... MOV DPTR,#(mac_pib + 40)
\ 000020 F0 MOVX @DPTR,A
69 mac_pib.macPANID = LRWPAN_DEFAULT_PANID;
\ 000021 90.... MOV DPTR,#(mac_pib + 18)
\ 000024 7447 MOV A,#0x47
\ 000026 F0 MOVX @DPTR,A
\ 000027 A3 INC DPTR
\ 000028 7413 MOV A,#0x13
\ 00002A F0 MOVX @DPTR,A
70 //mac_pib.macMaxAckRetries = aMaxFrameRetries;
71
72 macInfo.panID.Val=0xffff;
\ 00002B 90.... MOV DPTR,#(macInfo + 11)
\ 00002E 74FF MOV A,#-0x1
\ 000030 F0 MOVX @DPTR,A
\ 000031 A3 INC DPTR
\ 000032 74FF MOV A,#-0x1
\ 000034 F0 MOVX @DPTR,A
73 macInfo.panID.Val=0xffff;
\ 000035 90.... MOV DPTR,#(macInfo + 11)
\ 000038 74FF MOV A,#-0x1
\ 00003A F0 MOVX @DPTR,A
\ 00003B A3 INC DPTR
\ 00003C 74FF MOV A,#-0x1
\ 00003E F0 MOVX @DPTR,A
74
75
76 p = (BYTE*) &macInfo.longAddr;// Initialize the MAC address
\ 00003F 7A.. MOV R2,#((macInfo + 1) & 0xff)
\ 000041 7B.. MOV R3,#(((macInfo + 1) >> 8) & 0xff)
77 *p++ = (DEFAULTID >>8)&0xFF; //MAC_LONG_ADDR_BYTE1;
\ 000043 7404 MOV A,#0x4
\ 000045 8A82 MOV DPL,R2
\ 000047 8B83 MOV DPH,R3
\ 000049 F0 MOVX @DPTR,A
\ 00004A 8A82 MOV DPL,R2
\ 00004C 8B83 MOV DPH,R3
\ 00004E A3 INC DPTR
\ 00004F AA82 MOV R2,DPL
\ 000051 AB83 MOV R3,DPH
78 *p++ = DEFAULTID & 0xFF; //MAC_LONG_ADDR_BYTE0;
\ 000053 7403 MOV A,#0x3
\ 000055 8A82 MOV DPL,R2
\ 000057 8B83 MOV DPH,R3
\ 000059 F0 MOVX @DPTR,A
79
80
81
82 //ntInitAddressMap(); //init the address map
83 #ifdef LRWPAN_COORDINATOR
84 mac_pib.depth = 0;
\ 00005A 7400 MOV A,#0x0
\ 00005C 90.... MOV DPTR,#(mac_pib + 21)
\ 00005F F0 MOVX @DPTR,A
85 #else
86 mac_pib.depth = 1; //depth will be at least one
87 #endif
88 mac_pib.bcnDepth = 0xFF; //remembers depth of node that responded to beacon
\ 000060 74FF MOV A,#-0x1
\ 000062 90.... MOV DPTR,#(mac_pib + 33)
\ 000065 F0 MOVX @DPTR,A
89 //other capability information
90 mac_pib.macCapInfo = 0;
\ 000066 7400 MOV A,#0x0
\ 000068 90.... MOV DPTR,#(mac_pib + 22)
\ 00006B F0 MOVX @DPTR,A
91 #ifdef LRWPAN_ALT_COORDINATOR //not supported, included for completeness
92 LRWPAN_SET_CAPINFO_ALTPAN(mac_pib.macCapInfo);
93 #endif
94 #ifdef LRWPAN_FFD
95 LRWPAN_SET_CAPINFO_DEVTYPE(mac_pib.macCapInfo);
\ 00006C 90.... MOV DPTR,#(mac_pib + 22)
\ 00006F E0 MOVX A,@DPTR
\ 000070 D2E1 SETB 0xE0 /* A */.1
\ 000072 F0 MOVX @DPTR,A
96 #endif
97 #ifdef LRWPAN_ACMAIN_POWERED
98 LRWPAN_SET_CAPINFO_PWRSRC(mac_pib.macCapInfo);
\ 000073 90.... MOV DPTR,#(mac_pib + 22)
\ 000076 E0 MOVX A,@DPTR
\ 000077 D2E2 SETB 0xE0 /* A */.2
\ 000079 F0 MOVX @DPTR,A
99 #endif
100 #ifdef LRWPAN_RCVR_ON_WHEN_IDLE
101 LRWPAN_SET_CAPINFO_RONIDLE(mac_pib.macCapInfo);
\ 00007A 90.... MOV DPTR,#(mac_pib + 22)
\ 00007D E0 MOVX A,@DPTR
\ 00007E D2E3 SETB 0xE0 /* A */.3
\ 000080 F0 MOVX @DPTR,A
102 #endif
103 #ifdef LRWPAN_SECURITY_CAPABLE
104 LRWPAN_SET_CAPINFO_SECURITY(mac_pib.macCapInfo);
105 #endif
106 //always allocate a short address
107 LRWPAN_SET_CAPINFO_ALLOCADDR(mac_pib.macCapInfo);
\ 000081 90.... MOV DPTR,#(mac_pib + 22)
\ 000084 E0 MOVX A,@DPTR
\ 000085 D2E7 SETB 0xE0 /* A */.7
\ 000087 F0 MOVX @DPTR,A
108
109
110 }
\ 000088 7F04 MOV R7,#0x4
\ 00008A 02.... LJMP ?FUNC_LEAVE_XDATA
111
112 //this assumes that phyInit, macInit has previously been called.
113 //turns on the radio
114
\ In segment NEAR_CODE, align 1, keep-with-next
115 LRWPAN_STATUS_ENUM macInitRadio(void) {
\ macInitRadio:
\ 000000 74F5 MOV A,#-0xb
\ 000002 12.... LCALL ?FUNC_ENTER_XDATA
\ 000005 ; Saved register size: 11
\ 000005 ; Auto size: 0
116
117 phy_pib.phyCurrentFrequency = LRWPAN_DEFAULT_FREQUENCY;
\ 000005 7400 MOV A,#0x0
\ 000007 90.... MOV DPTR,#phy_pib
\ 00000A F0 MOVX @DPTR,A
118 phy_pib.phyCurrentChannel = LRWPAN_DEFAULT_START_CHANNEL;
\ 00000B 740B MOV A,#0xb
\ 00000D 90.... MOV DPTR,#(phy_pib + 1)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -