wxl_sampleapp.s51
来自「TI的基于ZIGBEE2006的协议栈」· S51 代码 · 共 1,436 行 · 第 1/4 页
S51
1,436 行
; Auto size: 0
MOV ?V0 + 0,R2
MOV ?V0 + 1,R3
// 140 afIncomingMSGPacket_t *MSGpkt;
// 141
// 142 if ( events & SYS_EVENT_MSG ) //系统信息,
MOV A,#-0x80
ANL A,?V0 + 1
MOV R1,A
CLR A
JNZ ??WXL_SampleApp_ProcessEvent_0
MOV A,R1
??WXL_SampleApp_ProcessEvent_0:
JZ ??WXL_SampleApp_ProcessEvent_1
// 143 {
// 144 MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( WXL_SampleApp_TaskID ); //OS发送过来的信息
; Setup parameters for call to function osal_msg_receive
SJMP ??WXL_SampleApp_ProcessEvent_2
// 145 while ( MSGpkt )
// 146 {
// 147 switch ( MSGpkt->hdr.event )
// 148 {
// 149 // 按键事件
// 150 case KEY_CHANGE:
// 151 //按键处理函数
// 152 WXL_SampleApp_HandleKeys( ((keyChange_t *)MSGpkt)->keys );
// 153 break;
// 154
// 155 // 接收数据事件
// 156 case AF_INCOMING_MSG_CMD:
// 157 //接收数据的处理函数
// 158 WXL_SampleApp_MessageMSGCB( MSGpkt );
// 159 break;
// 160
// 161 // 网络状态发生变化时间
// 162 case ZDO_STATE_CHANGE:
// 163 WXL_SampleApp_NwkState = (devStates_t)(MSGpkt->hdr.status); //获取网络状态
??WXL_SampleApp_ProcessEvent_3:
MOV DPL,R6
MOV DPH,R7
INC DPTR
MOVX A,@DPTR
MOV DPTR,#WXL_SampleApp_NwkState
MOVX @DPTR,A
// 164 if ( (WXL_SampleApp_NwkState == DEV_ZB_COORD) //判断网络类型
// 165 || (WXL_SampleApp_NwkState == DEV_ROUTER)
// 166 || (WXL_SampleApp_NwkState == DEV_END_DEVICE) )
// 167 {
// 168
// 169 }
// 170 else
// 171 {
// 172 // 设备不属于这个网络
// 173 }
// 174 break;
// 175
// 176 default:
// 177 break;
// 178 }
// 179
// 180 // 释放存储器
// 181 osal_msg_deallocate( (uint8 *)MSGpkt );
??WXL_SampleApp_ProcessEvent_4:
; Setup parameters for call to function osal_msg_deallocate
MOV A,R6
MOV R2,A
MOV A,R7
MOV R3,A
MOV DPTR,#(osal_msg_deallocate & 0xffff)
MOV A,#((osal_msg_deallocate >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 182
// 183 // Next - 如果有一个空闲的任务
// 184 MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( WXL_SampleApp_TaskID );
; Setup parameters for call to function osal_msg_receive
??WXL_SampleApp_ProcessEvent_2:
MOV DPTR,#WXL_SampleApp_TaskID
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#(osal_msg_receive & 0xffff)
MOV A,#((osal_msg_receive >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV ?V0 + 2,R2
MOV ?V0 + 3,R3
MOV R6,?V0 + 2
MOV R7,?V0 + 3
MOV A,R6
JNZ ??WXL_SampleApp_ProcessEvent_5
MOV A,R7
??WXL_SampleApp_ProcessEvent_5:
JZ ??WXL_SampleApp_ProcessEvent_6
MOV DPL,R6
MOV DPH,R7
MOVX A,@DPTR
LCALL ?UC_SWITCH_SPARSE
`?<Jumptable for WXL_SampleApp_ProcessEvent>_0`:
DB 0
DB 3
DB 26
DW ??WXL_SampleApp_ProcessEvent_7
DB 192
DW ??WXL_SampleApp_ProcessEvent_8
DB 209
DW ??WXL_SampleApp_ProcessEvent_3
DW ??WXL_SampleApp_ProcessEvent_4
??WXL_SampleApp_ProcessEvent_8:
; Setup parameters for call to function WXL_SampleApp_HandleKeys
MOV DPL,R6
MOV DPH,R7
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#(WXL_SampleApp_HandleKeys & 0xffff)
MOV A,#((WXL_SampleApp_HandleKeys >> 16) & 0xff)
??WXL_SampleApp_ProcessEvent_9:
LCALL ?BCALL ; Banked call to: DPTR()
SJMP ??WXL_SampleApp_ProcessEvent_4
??WXL_SampleApp_ProcessEvent_7:
; Setup parameters for call to function WXL_SampleApp_MessageMSGCB
MOV A,R6
MOV R2,A
MOV A,R7
MOV R3,A
MOV DPTR,#(WXL_SampleApp_MessageMSGCB & 0xffff)
MOV A,#((WXL_SampleApp_MessageMSGCB >> 16) & 0xff)
SJMP ??WXL_SampleApp_ProcessEvent_9
// 185 }
// 186
// 187 // 返回未处理的任务
// 188 return (events ^ SYS_EVENT_MSG);
??WXL_SampleApp_ProcessEvent_6:
MOV R2,?V0 + 0
MOV A,#-0x80
XRL A,?V0 + 1
MOV R3,A
SJMP ??WXL_SampleApp_ProcessEvent_10
// 189 }
// 190 return 0;
??WXL_SampleApp_ProcessEvent_1:
MOV R2,#0x0
MOV R3,#0x0
??WXL_SampleApp_ProcessEvent_10:
MOV R7,#0x4
LJMP ?BANKED_LEAVE_XDATA
CFI EndBlock cfiBlock2
// 191 }
// 192
// 193 /*********************************************************************
// 194 * 事件处理函数
// 195 */
// 196
// 197 /*********************************************************************
// 198 * @函数名 WXL_SampleApp_ProcessEvent
// 199 *
// 200 * 函数功能: 一般应用任务事件处理,这个函数是处理所有的事件到任务,事件包括
// 201 * 时间片、消息和所有其他使用者定义过的时间。
// 202 *
// 203 * @参 数: task_id - OS分配的任务ID. 这个ID将用于发送数据和设置时间片.
// 204 * events - 处理的事件
// 205 *
// 206 * @return none
// 207 */
// 208
// 209 /*********************************************************************
// 210 * @函数名 WXL_SampleApp_HandleKeys
// 211 *
// 212 * @函数功能: 处理所有的按键事件
// 213 *
// 214 * @参数: keys - 返回的按键值
// 215 *
// 216 *
// 217 * @return none
// 218 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 219 void WXL_SampleApp_HandleKeys(uint8 keys )
WXL_SampleApp_HandleKeys:
CFI Block cfiBlock3 Using cfiCommon0
CFI Function WXL_SampleApp_HandleKeys
// 220 {
FUNCALL WXL_SampleApp_HandleKeys, WXL_SampleApp_SendFlashMessage
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
// 221 if ( keys & HAL_KEY_SW_1 )
MOV A,R1
MOV C,0xE0 /* A */.0
JNC ??WXL_SampleApp_HandleKeys_0
// 222 {
// 223 if(WXL_SampleApp_NwkState == DEV_ZB_COORD) //如果是协调器
MOV DPTR,#WXL_SampleApp_NwkState
MOVX A,@DPTR
XRL A,#0x9
JNZ ??WXL_SampleApp_HandleKeys_0
// 224 WXL_SampleApp_SendFlashMessage( "OPEN" ); //发送数据
; Setup parameters for call to function WXL_SampleApp_SendFlashMessage
MOV R2,#(`?<Constant "OPEN">` & 0xff)
MOV R3,#((`?<Constant "OPEN">` >> 8) & 0xff)
MOV DPTR,#(WXL_SampleApp_SendFlashMessage & 0xffff)
MOV A,#((WXL_SampleApp_SendFlashMessage >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 225 else
// 226 {
// 227
// 228 }
// 229 }
// 230 }
??WXL_SampleApp_HandleKeys_0:
LJMP ?Subroutine1 & 0xFFFF
CFI EndBlock cfiBlock3
// 231
// 232 /*********************************************************************
// 233 * @函数名: WXL_SampleApp_MessageMSGCB
// 234 *
// 235 * @函数功能: 接收的数据处理量.根据不同的串ID实现不同的功能。
// 236 *
// 237 * @param none
// 238 *
// 239 * @return none
// 240 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 241 void WXL_SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
WXL_SampleApp_MessageMSGCB:
CFI Block cfiBlock4 Using cfiCommon0
CFI Function WXL_SampleApp_MessageMSGCB
// 242 {
FUNCALL WXL_SampleApp_MessageMSGCB, memcpy
LOCFRAME XSTACK, 16, STACK
ARGFRAME XSTACK, 16, STACK
FUNCALL WXL_SampleApp_MessageMSGCB, HalLedBlink
LOCFRAME XSTACK, 14, STACK
ARGFRAME XSTACK, 14, STACK
FUNCALL WXL_SampleApp_MessageMSGCB, memcpy
LOCFRAME XSTACK, 16, STACK
ARGFRAME XSTACK, 16, STACK
FUNCALL WXL_SampleApp_MessageMSGCB, HalLedBlink
LOCFRAME XSTACK, 14, STACK
ARGFRAME XSTACK, 14, STACK
FUNCALL WXL_SampleApp_MessageMSGCB, WXL_SampleApp_SendData
LOCFRAME XSTACK, 14, STACK
ARGFRAME XSTACK, 14, 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: 4
MOV A,#-0x4
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 14)
MOV A,R2
MOV R6,A
MOV A,R3
MOV R7,A
// 243 unsigned char Rx_Buf[4];
// 244 switch ( pkt->clusterId )
MOV DPL,R6
MOV DPH,R7
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV ?V0 + 0,A
INC DPTR
MOVX A,@DPTR
MOV ?V0 + 1,A
MOV R0,#?V0 + 0
LCALL ?US_SWITCH_DENSE
`?<Jumptable for WXL_SampleApp_MessageMSGCB>_0`:
DW 1
DB 1
DW ??WXL_SampleApp_MessageMSGCB_0
DW ??WXL_SampleApp_MessageMSGCB_1
DW ??WXL_SampleApp_MessageMSGCB_2
// 245 {
// 246 case WXL_SAMPLEAPP_CLUSTERID1:
// 247 memcpy(Rx_Buf,pkt->cmd.Data,3);
??WXL_SampleApp_MessageMSGCB_1:
; Setup parameters for call to function memcpy
MOV ?V0 + 0,#0x3
MOV ?V0 + 1,#0x0
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 16)
LCALL ?Subroutine0 & 0xFFFF
??CrossCallReturnLabel_0:
LCALL ?XSTACK_DISP0_8
MOV R2,DPL
MOV R3,DPH
MOV DPTR,#(memcpy & 0xffff)
MOV A,#((memcpy >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,#0x2
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 14)
// 248 if((Rx_Buf[0] == 'Y') && (Rx_Buf[1] == 'E') && (Rx_Buf[2] == 'S'))
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX A,@DPTR
XRL A,#0x59
JZ $+5
LJMP ??WXL_SampleApp_MessageMSGCB_0 & 0xFFFF
MOV A,#0x1
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
XRL A,#0x45
JZ $+5
LJMP ??WXL_SampleApp_MessageMSGCB_0 & 0xFFFF
MOV A,#0x2
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
XRL A,#0x53
JZ $+5
LJMP ??WXL_SampleApp_MessageMSGCB_0 & 0xFFFF
// 249 {
// 250 HalLedBlink( HAL_LED_4, 4, 50, 250); //小灯闪烁四次
; Setup parameters for call to function HalLedBlink
MOV R4,#-0x6
MOV R5,#0x0
MOV R3,#0x32
MOV R2,#0x4
MOV R1,#0x8
MOV DPTR,#(HalLedBlink & 0xffff)
MOV A,#((HalLedBlink >> 16) & 0xff)
SJMP ??WXL_SampleApp_MessageMSGCB_3
// 251 }
// 252 break;
// 253
// 254 case WXL_SAMPLEAPP_CLUSTERID2:
// 255 memcpy(Rx_Buf,pkt->cmd.Data,4);
??WXL_SampleApp_MessageMSGCB_2:
; Setup parameters for call to function memcpy
MOV ?V0 + 0,#0x4
MOV ?V0 + 1,#0x0
MOV R0,#?V0 + 0
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 16)
LCALL ?Subroutine0 & 0xFFFF
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?