📄 onboard.s51
字号:
RSEG BANKED_CODE:CODE:NOROOT(0)
// 211 byte OnBoard_SendKeys( byte keys, byte state )
OnBoard_SendKeys:
CFI Block cfiBlock2 Using cfiCommon0
CFI Function OnBoard_SendKeys
// 212 {
FUNCALL OnBoard_SendKeys, osal_msg_allocate
LOCFRAME XSTACK, 10, STACK
ARGFRAME XSTACK, 10, STACK
FUNCALL OnBoard_SendKeys, osal_msg_send
LOCFRAME XSTACK, 10, STACK
ARGFRAME XSTACK, 10, STACK
MOV A,#-0xa
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 V1 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 10)
; Saved register size: 10
; Auto size: 0
MOV A,R1
MOV R6,A
MOV A,R2
MOV R7,A
// 213 keyChange_t *msgPtr;
// 214
// 215 if ( registeredKeysTaskID != NO_TASK_ID )
MOV DPTR,#??registeredKeysTaskID
MOVX A,@DPTR
XRL A,#0xff
JZ ??OnBoard_SendKeys_0
// 216 {
// 217 // Send the address to the task
// 218 msgPtr = (keyChange_t *)osal_msg_allocate( sizeof(keyChange_t) );
; Setup parameters for call to function osal_msg_allocate
MOV R2,#0x4
MOV R3,#0x0
MOV DPTR,#(osal_msg_allocate & 0xffff)
MOV A,#((osal_msg_allocate >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 219 if ( msgPtr )
MOV A,R2
JNZ ??OnBoard_SendKeys_1
MOV A,R3
??OnBoard_SendKeys_1:
JZ ??OnBoard_SendKeys_2
// 220 {
// 221 msgPtr->hdr.event = KEY_CHANGE;
MOV A,#-0x40
MOV DPL,R2
MOV DPH,R3
MOVX @DPTR,A
// 222 msgPtr->state = state;
MOV A,R7
INC DPTR
INC DPTR
MOVX @DPTR,A
// 223 msgPtr->keys = keys;
MOV A,R6
MOV DPL,R2
MOV DPH,R3
INC DPTR
INC DPTR
INC DPTR
MOVX @DPTR,A
// 224
// 225 osal_msg_send( registeredKeysTaskID, (uint8 *)msgPtr );
; Setup parameters for call to function osal_msg_send
MOV DPTR,#??registeredKeysTaskID
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#(osal_msg_send & 0xffff)
MOV A,#((osal_msg_send >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 226 }
// 227 return ( ZSuccess );
??OnBoard_SendKeys_2:
MOV R1,#0x0
SJMP ??OnBoard_SendKeys_3
// 228 }
// 229 else
// 230 return ( ZFailure );
??OnBoard_SendKeys_0:
MOV R1,#0x1
??OnBoard_SendKeys_3:
MOV R7,#0x2
LJMP ?BANKED_LEAVE_XDATA
CFI EndBlock cfiBlock2
// 231 }
// 232
// 233 /*********************************************************************
// 234 * @fn OnBoard_KeyCallback
// 235 *
// 236 * @brief Callback service for keys
// 237 *
// 238 * @param keys - keys that were pressed
// 239 * state - shifted
// 240 *
// 241 * @return void
// 242 *********************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 243 void OnBoard_KeyCallback ( uint8 keys, uint8 state )
OnBoard_KeyCallback:
CFI Block cfiBlock3 Using cfiCommon0
CFI Function OnBoard_KeyCallback
// 244 {
FUNCALL OnBoard_KeyCallback, OnBoard_SendKeys
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
// 245 uint8 shift;
// 246
// 247 // shift key (S1) is used to generate key interrupt
// 248 // applications should not use S1 when key interrupt is enabled
// 249 shift = (OnboardKeyIntEnable == HAL_KEY_INTERRUPT_ENABLE) ? false : ((keys & HAL_KEY_SW_6) ? true : false);
MOV DPTR,#OnboardKeyIntEnable
MOVX A,@DPTR
XRL A,#0x1
JNZ ??OnBoard_KeyCallback_0
MOV R2,#0x0
SJMP ??OnBoard_KeyCallback_1
??OnBoard_KeyCallback_0:
MOV A,R1
MOV C,0xE0 /* A */.5
JNC ??OnBoard_KeyCallback_2
SETB B.0
SJMP ??OnBoard_KeyCallback_3
??OnBoard_KeyCallback_2:
CLR B.0
??OnBoard_KeyCallback_3:
MOV C,B.0
CLR A
MOV 0xE0 /* A */.0,C
MOV R2,A
// 250
// 251 if ( OnBoard_SendKeys( keys, shift ) != ZSuccess )
??OnBoard_KeyCallback_1:
; Setup parameters for call to function OnBoard_SendKeys
MOV DPTR,#(OnBoard_SendKeys & 0xffff)
MOV A,#((OnBoard_SendKeys >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 252 {
// 253 // Process SW1 here
// 254 if ( keys & HAL_KEY_SW_1 ) // Switch 1
// 255 {
// 256 }
// 257 // Process SW2 here
// 258 if ( keys & HAL_KEY_SW_2 ) // Switch 2
// 259 {
// 260 }
// 261 // Process SW3 here
// 262 if ( keys & HAL_KEY_SW_3 ) // Switch 3
// 263 {
// 264 }
// 265 // Process SW4 here
// 266 if ( keys & HAL_KEY_SW_4 ) // Switch 4
// 267 {
// 268 }
// 269 // Process SW5 here
// 270 if ( keys & HAL_KEY_SW_5 ) // Switch 5
// 271 {
// 272 }
// 273 // Process SW6 here
// 274 if ( keys & HAL_KEY_SW_6 ) // Switch 6
// 275 {
// 276 }
// 277 }
// 278 }
SJMP ?Subroutine0
CFI EndBlock cfiBlock3
// 279
// 280 /*********************************************************************
// 281 * SLEEP MANAGEMENT FUNCTIONS
// 282 *
// 283 * These functions support processing of MAC and ZStack power mode
// 284 * transitions, used when the system goes into or awakes from sleep.
// 285 */
// 286
// 287 /*********************************************************************
// 288 * @fn OnBoard_stack_used()
// 289 *
// 290 * @brief
// 291 *
// 292 * Runs through the stack looking for touched memory.
// 293 *
// 294 * @param none
// 295 *
// 296 * @return number of bytes used by the stack
// 297 *********************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 298 uint16 OnBoard_stack_used( void )
OnBoard_stack_used:
CFI Block cfiBlock4 Using cfiCommon0
CFI Function OnBoard_stack_used
// 299 {
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
// 300 byte *pStack = (byte*)MCU_RAM_END;
MOV R0,#-0x1
MOV R1,#-0x1
// 301 byte *pHold;
// 302 byte found = false;
// 303 byte x;
// 304
// 305 // Look from the end of RAM for MIN_RAM_INIT number of "pattern" bytes
// 306 // This should be the high water stack mark.
// 307 while ( !found && pStack )
// 308 {
// 309 // Found an init value?
// 310 if ( *pStack == STACK_INIT_VALUE )
??OnBoard_stack_used_0:
MOV DPL,R0
MOV DPH,R1
MOVX A,@DPTR
XRL A,#0xa5
JNZ ??OnBoard_stack_used_1
// 311 {
// 312 // Look for a bunch in a row
// 313 pHold = pStack;
// 314 for ( x = 0; x < MIN_RAM_INIT; x++ )
MOV R2,#0x0
SJMP ??OnBoard_stack_used_2
// 315 {
// 316 if ( *pHold != STACK_INIT_VALUE )
// 317 break;
// 318 else
// 319 pHold--;
??OnBoard_stack_used_3:
MOV A,DPL
ADD A,#-0x1
MOV DPL,A
MOV A,DPH
ADDC A,#-0x1
MOV DPH,A
INC R2
MOV A,R2
CLR C
SUBB A,#0xc
JNC ??OnBoard_stack_used_4
??OnBoard_stack_used_2:
MOVX A,@DPTR
XRL A,#0xa5
JZ ??OnBoard_stack_used_3
// 320 }
// 321 // Did we find the needed minimum number in a row
// 322 if ( x >= MIN_RAM_INIT )
// 323 found = true;
// 324 }
// 325 if ( !found )
// 326 pStack--;
??OnBoard_stack_used_1:
MOV A,R0
ADD A,#-0x1
DEC R0
MOV A,R1
ADDC A,#-0x1
MOV R1,A
MOV A,R0
JNZ ??OnBoard_stack_used_5
MOV A,R1
??OnBoard_stack_used_5:
JNZ ??OnBoard_stack_used_0
// 327 }
// 328
// 329 if ( pStack )
??OnBoard_stack_used_4:
MOV A,R0
JNZ ??OnBoard_stack_used_6
MOV A,R1
??OnBoard_stack_used_6:
JZ ??OnBoard_stack_used_7
// 330 return ( (uint16)((byte*)MCU_RAM_END - pStack) );
MOV A,#-0x1
CLR C
SUBB A,R0
MOV R2,A
MOV A,#-0x1
SUBB A,R1
MOV R3,A
SJMP ??OnBoard_stack_used_8
// 331 else
// 332 return ( 0 );
??OnBoard_stack_used_7:
MOV R2,#0x0
MOV R3,#0x0
CFI EndBlock cfiBlock4
??OnBoard_stack_used_8:
REQUIRE ?Subroutine0
; // Fall through to label ?Subroutine0
// 333 }
RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine0:
CFI Block cfiBlock5 Using cfiCommon0
CFI NoFunction
CFI CFA_SP SP+-5
CFI DPL0 Frame(CFA_SP, 4)
CFI DPH0 Frame(CFA_SP, 5)
POP DPH
CFI CFA_SP SP+-4
CFI DPH0 SameValue
POP DPL
CFI CFA_SP SP+-3
CFI DPL0 SameValue
LJMP ?BRET
CFI EndBlock cfiBlock5
// 334
// 335 /*********************************************************************
// 336 * @fn _itoa
// 337 *
// 338 * @brief convert a 16bit number to ASCII
// 339 *
// 340 * @param num -
// 341 * buf -
// 342 * radix -
// 343 *
// 344 * @return void
// 345 *
// 346 *********************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 347 void _itoa(uint16 num, byte *buf, byte radix)
_itoa:
CFI Block cfiBlock6 Using cfiCommon0
CFI Function _itoa
// 348 {
MOV A,#-0xe
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 V5 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-13)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-14)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 14)
; Saved register size: 14
; Auto size: 5
MOV A,#-0x5
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 19)
MOV A,R2
MOV R6,A
MOV A,R3
MOV R7,A
MOV ?V0 + 0,R4
MOV ?V0 + 1,R5
MOV ?V0 + 5,R1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -