📄 mac_beacon_handler.s51
字号:
SUBB A,R0
MOV ?V0 + 0,A
CLR A
SUBB A,#0x0
MOV ?V0 + 1,A
; Setup parameters for call to function mbcnGetBeaconMargin
MOV DPTR,#(mbcnGetBeaconMargin & 0xffff)
MOV A,#((mbcnGetBeaconMargin >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,?V0 + 0
MOV B,R1
MUL AB
MOV R0,A
MOV R2,B
MOV B,R1
MOV A,?V0 + 1
MUL AB
ADD A,R2
MOV R1,A
MOV A,R0
CLR C
RLC A
MOV R0,A
MOV A,R1
RLC A
MOV R1,A
MOV A,#0x2
ADD A,R0
MOV ?V0 + 0,A
CLR A
ADDC A,R1
MOV ?V0 + 1,A
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_FOUR
CFI CFA_XSP16 add(XSP16, 20)
MOV R1,#(mbcnRxBeaconTimeout & 0xff)
MOV R2,#((mbcnRxBeaconTimeout >> 8) & 0xff)
MOV R3,#((mbcnRxBeaconTimeout >> 16) & 0xff)
LCALL mtimSetCallback & 0xFFFF
MOV A,#0x4
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 16)
// 105
// 106 // Finish this task, but keep the reservation!
// 107 mschRemoveTask(pTask->priority, MSCH_KEEP_TASK_RESERVED_BM);
; Setup parameters for call to function mschRemoveTask
MOV R2,#0x1
MOV DPL,R6
MOV DPH,R7
MOVX A,@DPTR
MOV R1,A
LCALL mschRemoveTask & 0xFFFF
// 108 }
// 109
// 110 } // mbcnRxPeriodicalBeaconTask
??mbcnRxPeriodicalBeaconTask_2:
SJMP ??Subroutine1_0
CFI EndBlock cfiBlock2
RSEG NEAR_CODE:CODE:NOROOT(0)
?Subroutine1:
CFI Block cfiBlock3 Using cfiCommon0
CFI NoFunction
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 18)
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-15)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-16)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-14)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-13)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V7 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI Invalid
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 16)
CFI Valid
??Subroutine1_0:
MOV R7,#0x8
LJMP ?BANKED_LEAVE_XDATA
CFI EndBlock cfiBlock3
// 111
// 112
// 113
// 114
// 115 //-------------------------------------------------------------------------------------------------------
// 116 // void mbcnRxBeaconTimeout(void)
// 117 //
// 118 // DESCRIPTION:
// 119 // Called when no beacon has been received. Decrements the counter which will give "beacon loss"
// 120 // when it reaches zero. This timeout is set up in mbcnRxPeriodicalBeaconTask().
// 121 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 122 void mbcnRxBeaconTimeout(void) NEAR {
mbcnRxBeaconTimeout:
CFI Block cfiBlock4 Using cfiCommon0
CFI Function mbcnRxBeaconTimeout
FUNCALL mbcnRxBeaconTimeout, mrxDecrOnCounter
LOCFRAME ISTACK, 2, STACK
ARGFRAME ISTACK, 2, STACK
PUSH DPL
CFI DPL0 Frame(CFA_SP, 4)
CFI CFA_SP SP+-4
PUSH DPH
CFI DPH0 Frame(CFA_SP, 5)
CFI CFA_SP SP+-5
; Saved register size: 2
; Auto size: 0
// 123
// 124 // The beacon reception interval is over (mbcnRxBeacon)
// 125 mrxDecrOnCounter();
; Setup parameters for call to function mrxDecrOnCounter
MOV DPTR,#(mrxDecrOnCounter & 0xffff)
MOV A,#((mrxDecrOnCounter >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 126
// 127 // Update the tracking counter...
// 128 mbcnInfo.noBcnCountdown--;
MOV DPTR,#(mbcnInfo + 7)
MOVX A,@DPTR
DEC A
LJMP ?Subroutine2
CFI EndBlock cfiBlock4
// 129
// 130 } // mbcnRxBeaconTimeout
// 131
// 132
// 133
// 134
// 135 /*******************************************************************************************************
// 136 *******************************************************************************************************
// 137 ************************** BEACON TRANSMISSION **************************
// 138 *******************************************************************************************************
// 139 *******************************************************************************************************/
// 140
// 141
// 142 #if MAC_OPT_FFD
// 143
// 144 //-------------------------------------------------------------------------------------------------------
// 145 // void mbcnTxPeriodicalBeacon(void)
// 146 //
// 147 // DESCRIPTION:
// 148 // Creates the task that handles transmission of periodical beacons (in a beacon-enabled PAN)
// 149 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 150 void mbcnTxPeriodicalBeacon(void) NEAR {
mbcnTxPeriodicalBeacon:
CFI Block cfiBlock5 Using cfiCommon0
CFI Function mbcnTxPeriodicalBeacon
FUNCALL mbcnTxPeriodicalBeacon, mschAddTask
LOCFRAME XSTACK, 14, STACK
ARGFRAME XSTACK, 14, STACK
MOV A,#-0xb
LCALL ?BANKED_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 11)
; Saved register size: 11
; Auto size: 0
// 151 mschAddTask(mbcnInfo.txTaskNumber, MAC_TASK_PRI_HIGHEST, mbcnTxPeriodicalBeaconTask, NULL);
; Setup parameters for call to function mschAddTask
MOV ?V0 + 0,#(mbcnTxPeriodicalBeaconTask & 0xff)
MOV ?V0 + 1,#((mbcnTxPeriodicalBeaconTask >> 8) & 0xff)
MOV ?V0 + 2,#((mbcnTxPeriodicalBeaconTask >> 16) & 0xff)
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_THREE
CFI CFA_XSP16 add(XSP16, 14)
MOV R4,#0x0
MOV R5,#0x0
MOV R2,#0x3
MOV DPTR,#mbcnInfo
LJMP ?Subroutine0
CFI EndBlock cfiBlock5
// 152 } // mbcnTxPeriodicalBeacon
// 153
// 154
// 155
// 156
// 157 //-------------------------------------------------------------------------------------------------------
// 158 // void mbcnTxPeriodicalBeaconTask(MAC_TASK_INFO *pTask)
// 159 //
// 160 // DESCRIPTION:
// 161 // This task is responsible for beacon transmission, and a few other housekeeping procedures (see
// 162 // the function comments. When finished, this task will continue in the mtxStartTransmission
// 163 // function (the task function pointer and the state is modified.
// 164 //
// 165 // TASK DATA:
// 166 // 0
// 167 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 168 void mbcnTxPeriodicalBeaconTask(MAC_TASK_INFO *pTask) NEAR {
mbcnTxPeriodicalBeaconTask:
CFI Block cfiBlock6 Using cfiCommon0
CFI Function mbcnTxPeriodicalBeaconTask
FUNCALL mbcnTxPeriodicalBeaconTask, msupSetChannel
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mbcnTxPeriodicalBeaconTask, msupCalcBeaconInterval
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mbcnTxPeriodicalBeaconTask, mbcnUpdateBufferedPibAttributes
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mbcnTxPeriodicalBeaconTask, mschRemoveTask
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mbcnTxPeriodicalBeaconTask, miqUnrequestAll
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mbcnTxPeriodicalBeaconTask, miqDecrTimeToLive
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mbcnTxPeriodicalBeaconTask, mschReserveTask
LOCFRAME ISTACK, 1, STACK
LOCFRAME XSTACK, 25, STACK
ARGFRAME ISTACK, 1, STACK
ARGFRAME XSTACK, 25, STACK
FUNCALL mbcnTxPeriodicalBeaconTask, mschAddTask
LOCFRAME XSTACK, 25, STACK
ARGFRAME XSTACK, 25, STACK
FUNCALL mbcnTxPeriodicalBeaconTask, mbcnPrepareBeacon
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mbcnTxPeriodicalBeaconTask, T2_GET_OVERFLOW_COUNTER
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mbcnTxPeriodicalBeaconTask, mtimSetCallback
LOCFRAME XSTACK, 26, STACK
ARGFRAME XSTACK, 26, STACK
FUNCALL mbcnTxPeriodicalBeaconTask, mtimSetCallback
LOCFRAME XSTACK, 26, STACK
ARGFRAME XSTACK, 26, STACK
FUNCALL mbcnTxPeriodicalBeaconTask, mrxAutoIncrOnCounter
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mbcnTxPeriodicalBeaconTask, mtimSetCallback
LOCFRAME XSTACK, 26, STACK
ARGFRAME XSTACK, 26, STACK
FUNCALL mbcnTxPeriodicalBeaconTask, msupCalcSuperframeDuration
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mbcnTxPeriodicalBeaconTask, mtimSetCallback
LOCFRAME XSTACK, 26, STACK
ARGFRAME XSTACK, 26, STACK
FUNCALL mbcnTxPeriodicalBeaconTask, T2_GET_OVERFLOW_COUNTER
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
FUNCALL mbcnTxPeriodicalBeaconTask, mtimSetCallback
LOCFRAME XSTACK, 26, STACK
ARGFRAME XSTACK, 26, STACK
FUNCALL mbcnTxPeriodicalBeaconTask, mschRemoveTask
LOCFRAME XSTACK, 22, STACK
ARGFRAME XSTACK, 22, STACK
MOV A,#-0x10
LCALL ?BANKED_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V7 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-13)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-14)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-15)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-16)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 16)
; Saved register size: 16
; Auto size: 6
MOV A,#-0x6
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 22)
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R3
MOVX @DPTR,A
// 169 static UINT32 oldBeaconInterval;
// 170 MAC_TX_PACKET *pPacket = mbcnInfo.pTxPacket;
MOV DPTR,#(mbcnInfo + 2)
MOVX A,@DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV A,#0x2
LCALL ?XSTACK_DISP0_8
MOV A,R0
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -