📄 mac_radio.s51
字号:
; Saved register size: 10
; Auto size: 0
// 217 halIntState_t s;
// 218
// 219 /* if the selected dBm is out of range, use the closest available */
// 220 if (txPower > MAC_RADIO_TX_POWER_MAX_MINUS_DBM)
MOV A,R1
CLR C
SUBB A,#0x1a
JC ??macRadioSetTxPower_0
// 221 {
// 222 txPower = MAC_RADIO_TX_POWER_MAX_MINUS_DBM;
MOV R1,#0x19
// 223 }
// 224
// 225 /*
// 226 * Set the global variable reqTxPower. This variable is referenced
// 227 * by the function macRadioUpdateTxPower() to write the radio register.
// 228 *
// 229 * A lookup table is used to translate the power level to the register
// 230 * value.
// 231 */
// 232 HAL_ENTER_CRITICAL_SECTION(s);
??macRadioSetTxPower_0:
MOV C,0xa8.7
CLR A
MOV 0xE0 /* A */.0,C
MOV R2,A
CLR 0xa8.7
// 233 reqTxPower = macRadioDefsTxPowerTable[txPower];
MOV ?V0 + 0,R1
MOV A,?V0 + 0
ADD A,#(macRadioDefsTxPowerTable & 0xff)
MOV DPL,A
CLR A
ADDC A,#((macRadioDefsTxPowerTable >> 8) & 0xff)
MOV DPH,A
CLR A
MOVC A,@A+DPTR
MOV DPTR,#??reqTxPower
MOVX @DPTR,A
// 234 HAL_EXIT_CRITICAL_SECTION(s);
MOV A,R2
MOV C,0xE0 /* A */.0
MOV 0xa8.7,C
// 235
// 236 /* update the radio power setting */
// 237 macRadioUpdateTxPower();
; Setup parameters for call to function macRadioUpdateTxPower
MOV DPTR,#(macRadioUpdateTxPower & 0xffff)
MOV A,#((macRadioUpdateTxPower >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 238 }
MOV R7,#0x2
LJMP ?BANKED_LEAVE_XDATA
CFI EndBlock cfiBlock9
// 239
// 240 #else
// 241 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
// 242
// 243 void macRadioSetTxPower(uint8 txPower)
// 244 {
// 245 halIntState_t s;
// 246
// 247 /* same as above but with no lookup table, use raw register value */
// 248 HAL_ENTER_CRITICAL_SECTION(s);
// 249 reqTxPower = txPower;
// 250 HAL_EXIT_CRITICAL_SECTION(s);
// 251
// 252 /* update the radio power setting */
// 253 macRadioUpdateTxPower();
// 254 }
// 255
// 256 #endif
// 257
// 258
// 259 /**************************************************************************************************
// 260 * @fn macRadioUpdateTxPower
// 261 *
// 262 * @brief Update the radio's transmit power if a new power level has been requested
// 263 *
// 264 * @param reqTxPower - file scope variable that holds the last request power level
// 265 * macPhyTxPower - global variable that holds radio's set power level
// 266 *
// 267 * @return none
// 268 **************************************************************************************************
// 269 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 270 void macRadioUpdateTxPower(void)
macRadioUpdateTxPower:
CFI Block cfiBlock10 Using cfiCommon0
CFI Function macRadioUpdateTxPower
// 271 {
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
// 272 halIntState_t s;
// 273
// 274 /*
// 275 * If the requested power setting is different from the actual radio setting,
// 276 * attempt to udpate to the new power setting.
// 277 */
// 278 HAL_ENTER_CRITICAL_SECTION(s);
MOV C,0xa8.7
CLR A
MOV 0xE0 /* A */.0,C
MOV R3,A
CLR 0xa8.7
// 279 if (reqTxPower != macPhyTxPower)
MOV DPTR,#??reqTxPower
MOVX A,@DPTR
MOV R2,A
MOV DPTR,#macPhyTxPower
MOVX A,@DPTR
XRL A,R2
JZ ??macRadioUpdateTxPower_0
// 280 {
// 281 /*
// 282 * Radio power cannot be updated when the radio is physically transmitting.
// 283 * If there is a possibility radio is transmitting, do not change the power
// 284 * setting. This function will be called again after the current transmit
// 285 * completes.
// 286 */
// 287 if (!macRxOutgoingAckFlag && !MAC_TX_IS_PHYSICALLY_ACTIVE())
MOV DPTR,#macRxOutgoingAckFlag
MOVX A,@DPTR
JNZ ??macRadioUpdateTxPower_0
MOV DPTR,#macTxActive
MOVX A,@DPTR
MOV C,0xE0 /* A */.7
JC ??macRadioUpdateTxPower_0
// 288 {
// 289 /*
// 290 * Set new power level; update the shadow value and write
// 291 * the new value to the radio hardware.
// 292 */
// 293 macPhyTxPower = reqTxPower;
MOV DPTR,#??reqTxPower
MOVX A,@DPTR
MOV DPTR,#macPhyTxPower
MOVX @DPTR,A
// 294 MAC_RADIO_SET_TX_POWER(macPhyTxPower);
MOV DPTR,#-0x20f5
MOVX @DPTR,A
// 295 }
// 296 }
// 297 HAL_EXIT_CRITICAL_SECTION(s);
??macRadioUpdateTxPower_0:
MOV A,R3
MOV C,0xE0 /* A */.0
MOV 0xa8.7,C
// 298 }
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:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -