spimgr.s51

来自「TI的基于ZIGBEE2006的协议栈」· S51 代码 · 共 1,526 行 · 第 1/5 页

S51
1,526
字号
//  119   SPIMgr_ZAppRxStatus   = SPI_MGR_ZAPP_RX_READY;
//  120 #endif
//  121 
//  122 
//  123 }
        MOV	A,#0x1e
        LCALL	?DEALLOC_XSTACK8
        CFI EndBlock cfiBlock0
        REQUIRE ?Subroutine5
        ; // Fall through to label ?Subroutine5

        RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine5:
        CFI Block cfiBlock1 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 cfiBlock1
//  124 
//  125 /***************************************************************************************************
//  126  * @fn      MT_SerialRegisterTaskID
//  127  *
//  128  * @brief
//  129  *
//  130  *   This function registers the taskID of the application so it knows
//  131  *   where to send the messages whent they come in.
//  132  *
//  133  * @param   void
//  134  *
//  135  * @return  void
//  136  ***************************************************************************************************/

        RSEG BANKED_CODE:CODE:NOROOT(0)
//  137 void SPIMgr_RegisterTaskID( byte taskID )
SPIMgr_RegisterTaskID:
        CFI Block cfiBlock2 Using cfiCommon0
        CFI Function SPIMgr_RegisterTaskID
//  138 {
        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
//  139   App_TaskID = taskID;
        MOV	A,R1
        MOV	DPTR,#App_TaskID
        MOVX	@DPTR,A
//  140 }
        SJMP	?Subroutine5
        CFI EndBlock cfiBlock2
//  141 
//  142 /***************************************************************************************************
//  143  * @fn      SPIMgr_CalcFCS
//  144  *
//  145  * @brief
//  146  *
//  147  *   Calculate the FCS of a message buffer by XOR'ing each byte.
//  148  *   Remember to NOT include SOP and FCS fields, so start at the CMD
//  149  *   field.
//  150  *
//  151  * @param   byte *msg_ptr - message pointer
//  152  * @param   byte len - length (in bytes) of message
//  153  *
//  154  * @return  result byte
//  155  ***************************************************************************************************/

        RSEG BANKED_CODE:CODE:NOROOT(0)
//  156 byte SPIMgr_CalcFCS( uint8 *msg_ptr, uint8 len )
SPIMgr_CalcFCS:
        CFI Block cfiBlock3 Using cfiCommon0
        CFI Function SPIMgr_CalcFCS
//  157 {
        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	R4,A
//  158   byte x;
//  159   byte xorResult;
//  160 
//  161   xorResult = 0;
        MOV	R1,#0x0
//  162 
//  163   for ( x = 0; x < len; x++, msg_ptr++ )
        MOV	R5,#0x0
        SJMP	??SPIMgr_CalcFCS_0
//  164     xorResult = xorResult ^ *msg_ptr;
??SPIMgr_CalcFCS_1:
        MOV	DPL,R2
        MOV	DPH,R3
        MOVX	A,@DPTR
        XCH	A,R1
        XRL	A,R1
        MOV	R1,A
        INC	R5
        INC	DPTR
        MOV	R2,DPL
        MOV	R3,DPH
??SPIMgr_CalcFCS_0:
        MOV	A,R5
        CLR	C
        SUBB	A,R4
        JC	??SPIMgr_CalcFCS_1
//  165 
//  166   return ( xorResult );
        MOV	R7,#0x1
        LJMP	?BANKED_LEAVE_XDATA
        CFI EndBlock cfiBlock3
//  167 }
//  168 
//  169 
//  170 #if defined (ZTOOL_P1) || defined (ZTOOL_P2)
//  171 /***************************************************************************************************
//  172  * @fn      SPIMgr_ProcessZToolRxData
//  173  *
//  174  * @brief   | SOP | CMD  |   Data Length   | FSC  |
//  175  *          |  1  |  2   |       1         |  1   |
//  176  *
//  177  *          Parses the data and determine either is SPI or just simply serial data
//  178  *          then send the data to correct place (MT or APP)
//  179  *
//  180  * @param   pBuffer  - pointer to the buffer that contains the data
//  181  *          length   - length of the buffer
//  182  *
//  183  *
//  184  * @return  None
//  185  ***************************************************************************************************/

        RSEG BANKED_CODE:CODE:NOROOT(0)
//  186 void SPIMgr_ProcessZToolData ( uint8 port, uint8 event )
SPIMgr_ProcessZToolData:
        CFI Block cfiBlock4 Using cfiCommon0
        CFI Function SPIMgr_ProcessZToolData
//  187 {
        FUNCALL SPIMgr_ProcessZToolData, Hal_UART_RxBufLen
        LOCFRAME XSTACK, 11, STACK
        ARGFRAME XSTACK, 11, STACK
        FUNCALL SPIMgr_ProcessZToolData, HalUARTRead
        LOCFRAME XSTACK, 11, STACK
        ARGFRAME XSTACK, 11, STACK
        FUNCALL SPIMgr_ProcessZToolData, osal_msg_allocate
        LOCFRAME XSTACK, 11, STACK
        ARGFRAME XSTACK, 11, STACK
        FUNCALL SPIMgr_ProcessZToolData, SPIMgr_CalcFCS
        LOCFRAME XSTACK, 11, STACK
        ARGFRAME XSTACK, 11, STACK
        FUNCALL SPIMgr_ProcessZToolData, osal_msg_send
        LOCFRAME XSTACK, 11, STACK
        ARGFRAME XSTACK, 11, STACK
        FUNCALL SPIMgr_ProcessZToolData, osal_msg_deallocate
        LOCFRAME XSTACK, 11, STACK
        ARGFRAME XSTACK, 11, 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: 1
        MOV	A,#-0x1
        LCALL	?ALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 11)
//  188   uint8  ch;
//  189 
//  190   /* Verify events */
//  191   if (event == HAL_UART_TX_FULL)
        MOV	A,#0x8
        XRL	A,R2
        JZ	??SPIMgr_ProcessZToolData_0
//  192   {
//  193     // Do something when TX if full
//  194     return;
//  195   }
//  196 
//  197   if (event & (HAL_UART_RX_FULL | HAL_UART_RX_ABOUT_FULL | HAL_UART_RX_TIMEOUT))
        MOV	A,#0x7
        ANL	A,R2
        JNZ	??SPIMgr_ProcessZToolData_1
??SPIMgr_ProcessZToolData_0:
        MOV	A,#0x1
        LCALL	?DEALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 10)
        MOV	R7,#0x2
        LJMP	?BANKED_LEAVE_XDATA
        CFI CFA_XSP16 add(XSP16, 11)
//  198   {
//  199     while (Hal_UART_RxBufLen(SPI_MGR_DEFAULT_PORT))
//  200     {
//  201       HalUARTRead (SPI_MGR_DEFAULT_PORT, &ch, 1);
//  202 
//  203       switch (state)
//  204       {
//  205         case SOP_STATE:
//  206           if (ch == SOP_VALUE)
//  207             state = CMD_STATE1;
//  208           break;
//  209 
//  210         case CMD_STATE1:
//  211           CMD_Token[0] = ch;
??SPIMgr_ProcessZToolData_2:
        MOV	DPL,?XSP + 0
        MOV	DPH,?XSP + 1
        MOVX	A,@DPTR
        MOV	DPTR,#CMD_Token
        MOVX	@DPTR,A
//  212           state = CMD_STATE2;
        MOV	A,#0x2
??SPIMgr_ProcessZToolData_3:
        MOV	DPTR,#state
??SPIMgr_ProcessZToolData_4:
        MOVX	@DPTR,A
??SPIMgr_ProcessZToolData_1:
        ; Setup parameters for call to function Hal_UART_RxBufLen
        MOV	R1,#0x0
        MOV	DPTR,#(Hal_UART_RxBufLen & 0xffff)
        MOV	A,#((Hal_UART_RxBufLen >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
        MOV	A,R2
        JNZ	??SPIMgr_ProcessZToolData_5
        MOV	A,R3
??SPIMgr_ProcessZToolData_5:
        JZ	??SPIMgr_ProcessZToolData_0
        ; Setup parameters for call to function HalUARTRead
        MOV	R4,#0x1
        MOV	R5,#0x0
        MOV	DPL,?XSP + 0
        MOV	DPH,?XSP + 1
        MOV	R2,DPL
        MOV	R3,DPH
        MOV	R1,#0x0
        MOV	DPTR,#(HalUARTRead & 0xffff)
        MOV	A,#((HalUARTRead >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
        MOV	DPTR,#state
        MOVX	A,@DPTR
        LCALL	?UC_SWITCH_DENSE
`?<Jumptable for SPIMgr_ProcessZToolData>_0`:
        DB        0
        DB        5
        DW        ??SPIMgr_ProcessZToolData_1
        DW        ??SPIMgr_ProcessZToolData_6
        DW        ??SPIMgr_ProcessZToolData_2
        DW        ??SPIMgr_ProcessZToolData_7
        DW        ??SPIMgr_ProcessZToolData_8
        DW        ??SPIMgr_ProcessZToolData_9
        DW        ??SPIMgr_ProcessZToolData_10
??SPIMgr_ProcessZToolData_6:
        MOV	DPL,?XSP + 0
        MOV	DPH,?XSP + 1
        MOVX	A,@DPTR
        XRL	A,#0x2
        JNZ	??SPIMgr_ProcessZToolData_1
        MOV	A,#0x1
        SJMP	??SPIMgr_ProcessZToolData_3
//  213           break;
//  214 
//  215         case CMD_STATE2:
//  216           CMD_Token[1] = ch;
??SPIMgr_ProcessZToolData_7:
        MOV	DPL,?XSP + 0
        MOV	DPH,?XSP + 1
        MOVX	A,@DPTR
        MOV	DPTR,#(CMD_Token + 1)
        MOVX	@DPTR,A
//  217           state = LEN_STATE;
        MOV	A,#0x3
        SJMP	??SPIMgr_ProcessZToolData_3
//  218           break;
//  219 
//  220         case LEN_STATE:
//  221           LEN_Token = ch;
??SPIMgr_ProcessZToolData_8:
        MOV	DPL,?XSP + 0
        MOV	DPH,?XSP + 1

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?