📄 mac_radio.s51
字号:
LJMP ??Subroutine0_1 & 0xFFFF
CFI EndBlock cfiBlock10
// 299
// 300
// 301 /**************************************************************************************************
// 302 * @fn macRadioSetChannel
// 303 *
// 304 * @brief Set radio channel.
// 305 *
// 306 * @param channel - channel number, valid range is 11 through 26
// 307 *
// 308 * @return none
// 309 **************************************************************************************************
// 310 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 311 void macRadioSetChannel(uint8 channel)
macRadioSetChannel:
CFI Block cfiBlock11 Using cfiCommon0
CFI Function macRadioSetChannel
// 312 {
FUNCALL macRadioSetChannel, halAssertHandler
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
FUNCALL macRadioSetChannel, macRadioUpdateChannel
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
MOV A,#-0x9
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 V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 9)
; Saved register size: 9
; Auto size: 0
MOV A,R1
MOV R6,A
// 313 halIntState_t s;
// 314
// 315 MAC_ASSERT((channel >= 11) && (channel <= 28)); /* illegal channel */
CLR C
SUBB A,#0xb
JC ??macRadioSetChannel_0
MOV A,R6
CLR C
SUBB A,#0x1d
JC ??macRadioSetChannel_1
??macRadioSetChannel_0:
; Setup parameters for call to function halAssertHandler
MOV DPTR,#(halAssertHandler & 0xffff)
MOV A,#((halAssertHandler >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 316
// 317 /* critical section to make sure transmit does not start while updating channel */
// 318 HAL_ENTER_CRITICAL_SECTION(s);
??macRadioSetChannel_1:
MOV C,0xa8.7
CLR A
MOV 0xE0 /* A */.0,C
MOV R7,A
CLR 0xa8.7
// 319
// 320 /* set requested channel */
// 321 reqChannel = channel;
MOV A,R6
MOV DPTR,#??reqChannel
MOVX @DPTR,A
// 322
// 323 /*
// 324 * If transmit is not active, update the radio hardware immediately. If transmit is active,
// 325 * the channel will be updated at the end of the current transmit.
// 326 */
// 327 if (!macTxActive)
MOV DPTR,#macTxActive
MOVX A,@DPTR
JNZ ??macRadioSetChannel_2
// 328 {
// 329 macRadioUpdateChannel();
; Setup parameters for call to function macRadioUpdateChannel
MOV DPTR,#(macRadioUpdateChannel & 0xffff)
MOV A,#((macRadioUpdateChannel >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 330 }
// 331
// 332 HAL_EXIT_CRITICAL_SECTION(s);
??macRadioSetChannel_2:
MOV A,R7
MOV C,0xE0 /* A */.0
MOV 0xa8.7,C
CFI EndBlock cfiBlock11
// 333 }
REQUIRE ?Subroutine1
; // Fall through to label ?Subroutine1
RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine1:
CFI Block cfiBlock12 Using cfiCommon0
CFI NoFunction
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 9)
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
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(-9)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V0 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)))
MOV R7,#0x1
LJMP ?BANKED_LEAVE_XDATA
CFI EndBlock cfiBlock12
// 334
// 335
// 336 /**************************************************************************************************
// 337 * @fn macRadioUpdateChannel
// 338 *
// 339 * @brief Update the radio channel if a new channel has been requested.
// 340 *
// 341 * @param none
// 342 *
// 343 * @return none
// 344 **************************************************************************************************
// 345 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 346 void macRadioUpdateChannel(void)
macRadioUpdateChannel:
CFI Block cfiBlock13 Using cfiCommon0
CFI Function macRadioUpdateChannel
// 347 {
FUNCALL macRadioUpdateChannel, halAssertHandler
LOCFRAME ISTACK, 2, STACK
ARGFRAME ISTACK, 2, STACK
FUNCALL macRadioUpdateChannel, macRxOff
LOCFRAME ISTACK, 2, STACK
ARGFRAME ISTACK, 2, STACK
FUNCALL macRadioUpdateChannel, macRxOnRequest
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
// 348 halIntState_t s;
// 349
// 350 MAC_ASSERT(!macTxActive); /* cannot change channel during a transmit */
MOV DPTR,#macTxActive
MOVX A,@DPTR
JZ ??macRadioUpdateChannel_0
; Setup parameters for call to function halAssertHandler
MOV DPTR,#(halAssertHandler & 0xffff)
MOV A,#((halAssertHandler >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 351
// 352 /* if the channel has changed, set the radio to the new channel */
// 353 HAL_ENTER_CRITICAL_SECTION(s);
??macRadioUpdateChannel_0:
MOV C,0xa8.7
CLR A
MOV 0xE0 /* A */.0,C
CLR 0xa8.7
// 354 if (reqChannel != macPhyChannel)
MOV DPTR,#??reqChannel
MOVX A,@DPTR
MOV R2,A
MOV DPTR,#macPhyChannel
MOVX A,@DPTR
XRL A,R2
JZ ??macRadioUpdateChannel_1
// 355 {
// 356 macPhyChannel = reqChannel;
MOV DPTR,#??reqChannel
MOVX A,@DPTR
MOV DPTR,#macPhyChannel
MOVX @DPTR,A
// 357 HAL_EXIT_CRITICAL_SECTION(s);
MOV 0xa8.7,C
// 358
// 359 /* changing the channel stops any receive in progress */
// 360 macRxOff();
; Setup parameters for call to function macRxOff
MOV DPTR,#(macRxOff & 0xffff)
MOV A,#((macRxOff >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 361 MAC_RADIO_SET_CHANNEL(macPhyChannel);
MOV B,#0x5
MOV DPTR,#macPhyChannel
MOVX A,@DPTR
MUL AB
ADD A,#0x2e
MOV DPTR,#-0x20ef
MOVX @DPTR,A
// 362 macRxOnRequest();
; Setup parameters for call to function macRxOnRequest
MOV DPTR,#(macRxOnRequest & 0xffff)
MOV A,#((macRxOnRequest >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
SJMP ??macRadioUpdateChannel_2
// 363 }
// 364 else
// 365 {
// 366 HAL_EXIT_CRITICAL_SECTION(s);
??macRadioUpdateChannel_1:
MOV 0xa8.7,C
// 367 }
// 368 }
??macRadioUpdateChannel_2:
LJMP ??Subroutine0_1 & 0xFFFF
CFI EndBlock cfiBlock13
// 369
// 370
// 371 /**************************************************************************************************
// 372 * @fn macRadioStartScan
// 373 *
// 374 * @brief Puts radio into selected scan mode.
// 375 *
// 376 * @param scanMode - scan mode, see #defines in .h file
// 377 *
// 378 * @return none
// 379 **************************************************************************************************
// 380 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 381 void macRadioStartScan(uint8 scanMode)
macRadioStartScan:
CFI Block cfiBlock14 Using cfiCommon0
CFI Function macRadioStartScan
// 382 {
FUNCALL macRadioStartScan, halAssertHandler
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
FUNCALL macRadioStartScan, halAssertHandler
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
FUNCALL macRadioStartScan, halAssertHandler
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
MOV A,#-0x9
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 V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 9)
; Saved register size: 9
; Auto size: 0
MOV A,R1
MOV R6,A
// 383 MAC_ASSERT(macSleepState == MAC_SLEEP_STATE_AWAKE); /* radio must be awake */
MOV DPTR,#macSleepState
MOVX A,@DPTR
JZ ??macRadioStartScan_0
; Setup parameters for call to function halAssertHandler
MOV DPTR,#(halAssertHandler & 0xffff)
MOV A,#((halAssertHandler >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 384 MAC_ASSERT(macRxFilter == RX_FILTER_OFF); /* all filtering must be off to start scan */
??macRadioStartScan_0:
MOV DPTR,#macRxFilter
MOVX A,@DPTR
JZ ??macRadioStartScan_1
; Setup parameters for call to function halAssertHandler
MOV DPTR,#(halAssertHandler & 0xffff)
MOV A,#((halAssertHandler >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 385
// 386 /* set the receive filter based on the selected scan mode */
// 387 if (scanMode == MAC_SCAN_ED)
??macRadioStartScan_1:
MOV A,R6
JNZ ??macRadioStartScan_2
// 388 {
// 389 macRxFilter = RX_FILTER_ALL;
MOV A,#0x1
??macRadioStartScan_3:
MOV DPTR,#macRxFilter
SJMP ??macRadioStartScan_4
// 390 }
// 391 else if (scanMode == MAC_SCAN_ORPHAN)
??macRadioStartScan_2:
MOV A,#0x3
XRL A,R6
JNZ ??macRadioStartScan_5
// 392 {
// 393 macRxFilter = RX_FILTER_NON_COMMAND_FRAMES;
MOV A,#0x3
SJMP ??macRadioStartScan_3
// 394 }
// 395 else
// 396 {
// 397 MAC_ASSERT((scanMode == MAC_SCAN_ACTIVE) || (scanMode == MAC_SCAN_PASSIVE)); /* invalid scan type */
??macRadioStartScan_5:
MOV A,#0x1
XRL A,R6
JZ ??macRadioStartScan_6
MOV A,#0x2
XRL A,R6
JZ ??macRadioStartScan_6
; Setup parameters for call to function halAssertHandler
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -