⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spimgr.lst

📁 用IAR开发的ZIGBEE网络路由例子
💻 LST
📖 第 1 页 / 共 4 页
字号:
    180           * @param   pBuffer  - pointer to the buffer that contains the data
    181           *          length   - length of the buffer
    182           *
    183           *
    184           * @return  None
    185           ***************************************************************************************************/
    186          void SPIMgr_ProcessZToolData ( uint8 port, uint8 event )
    187          {
    188            uint8  ch;
    189          
    190            /* Verify events */
    191            if (event == HAL_UART_TX_FULL)
    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))
    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;
    212                    state = CMD_STATE2;
    213                    break;
    214          
    215                  case CMD_STATE2:
    216                    CMD_Token[1] = ch;
    217                    state = LEN_STATE;
    218                    break;
    219          
    220                  case LEN_STATE:
    221                    LEN_Token = ch;
    222                    if (ch == 0)
    223                      state = FCS_STATE;
    224                    else
    225                      state = DATA_STATE;
    226          
    227                    tempDataLen = 0;
    228          
    229                    /* Allocate memory for the data */
    230                    SPI_Msg = (mtOSALSerialData_t *)osal_msg_allocate( sizeof ( mtOSALSerialData_t ) + 2+1+LEN_Token );
    231          
    232                    if (SPI_Msg)
    233                    {
    234                      /* Fill up what we can */
    235                      SPI_Msg->hdr.event = CMD_SERIAL_MSG;
    236                      SPI_Msg->msg = (uint8*)(SPI_Msg+1);
    237                      SPI_Msg->msg[0] = CMD_Token[0];
    238                      SPI_Msg->msg[1] = CMD_Token[1];
    239                      SPI_Msg->msg[2] = LEN_Token;
    240                    }
    241                    else
    242                    {
    243                      state = SOP_STATE;
    244                      return;
    245                    }
    246          
    247                    break;
    248          
    249                  case DATA_STATE:
    250                      SPI_Msg->msg[3 + tempDataLen++] = ch;
    251                      if ( tempDataLen == LEN_Token )
    252                        state = FCS_STATE;
    253                    break;
    254          
    255                  case FCS_STATE:
    256          
    257                    FSC_Token = ch;
    258          
    259                    /* Make sure it's correct */
    260                    if ((SPIMgr_CalcFCS ((uint8*)&SPI_Msg->msg[0], 2 + 1 + LEN_Token) == FSC_Token))
    261                    {
    262                      osal_msg_send( MT_TaskID, (byte *)SPI_Msg );
    263                    }
    264                    else
    265                    {
    266                      /* deallocate the msg */
    267                      osal_msg_deallocate ( (uint8 *)SPI_Msg);
    268                    }
    269          
    270                    /* Reset the state, send or discard the buffers at this point */
    271                    state = SOP_STATE;
    272          
    273                    break;
    274          
    275                  default:
    276                   break;
    277                }
    278          
    279          
    280              }
    281            }
    282          }
    283          #endif //ZTOOL
    284          
    285          #if defined (ZAPP_P1) || defined (ZAPP_P2)
    286          /***************************************************************************************************
    287           * @fn      SPIMgr_ProcessZAppRxData
    288           *
    289           * @brief   | SOP | CMD  |   Data Length   | FSC  |
    290           *          |  1  |  2   |       1         |  1   |
    291           *
    292           *          Parses the data and determine either is SPI or just simply serial data
    293           *          then send the data to correct place (MT or APP)
    294           *
    295           * @param   pBuffer  - pointer to the buffer that contains the data
    296           *          length   - length of the buffer
    297           *
    298           *
    299           * @return  None
    300           ***************************************************************************************************/

   \                                 In segment BANKED_CODE, align 1, keep-with-next
    301          void SPIMgr_ProcessZAppData ( uint8 port, uint8 event )
   \                     SPIMgr_ProcessZAppData:
    302          {
   \   000000   74F4         MOV     A,#-0xc
   \   000002   12....       LCALL   ?BANKED_ENTER_XDATA
   \   000005                ; Saved register size: 12
   \   000005                ; Auto size: 0
   \   000005   8A..         MOV     ?V0 + 0,R2
    303          
    304            osal_event_hdr_t  *msg_ptr;
    305            uint16 length = 0;
    306            uint16 rxBufLen  = Hal_UART_RxBufLen(SPI_MGR_DEFAULT_PORT);
   \   000007                ; Setup parameters for call to function Hal_UART_RxBufLen
   \   000007   7901         MOV     R1,#0x1
   \   000009   90....       MOV     DPTR,#(Hal_UART_RxBufLen & 0xffff)
   \   00000C   74..         MOV     A,#((Hal_UART_RxBufLen >> 16) & 0xff)
   \   00000E   12....       LCALL   ?BCALL               ; Banked call to: DPTR()
   \   000011   8A..         MOV     ?V0 + 2,R2
   \   000013   8B..         MOV     ?V0 + 3,R3
   \   000015   A8..         MOV     R0,?V0 + 2
   \   000017   A9..         MOV     R1,?V0 + 3
    307          
    308            /*
    309               If maxZAppBufferLength is 0 or larger than current length
    310               the entire length of the current buffer is returned.
    311            */
    312            if ((SPIMgr_MaxZAppBufLen != 0) && (SPIMgr_MaxZAppBufLen <= rxBufLen))
   \   000019   90....       MOV     DPTR,#SPIMgr_MaxZAppBufLen
   \   00001C   E0           MOVX    A,@DPTR
   \   00001D   7002         JNZ     ??SPIMgr_ProcessZAppData_0
   \   00001F   A3           INC     DPTR
   \   000020   E0           MOVX    A,@DPTR
   \                     ??SPIMgr_ProcessZAppData_0:
   \   000021   6018         JZ      ??SPIMgr_ProcessZAppData_1
   \   000023   90....       MOV     DPTR,#SPIMgr_MaxZAppBufLen
   \   000026   E0           MOVX    A,@DPTR
   \   000027   FA           MOV     R2,A
   \   000028   A3           INC     DPTR
   \   000029   E0           MOVX    A,@DPTR
   \   00002A   FB           MOV     R3,A
   \   00002B   C3           CLR     C
   \   00002C   E8           MOV     A,R0
   \   00002D   9A           SUBB    A,R2
   \   00002E   E9           MOV     A,R1
   \   00002F   9B           SUBB    A,R3
   \   000030   4009         JC      ??SPIMgr_ProcessZAppData_1
    313            {
    314              length = SPIMgr_MaxZAppBufLen;
   \   000032   90....       MOV     DPTR,#SPIMgr_MaxZAppBufLen
   \   000035   E0           MOVX    A,@DPTR
   \   000036   FE           MOV     R6,A
   \   000037   A3           INC     DPTR
   \   000038   E0           MOVX    A,@DPTR
   \   000039   8003         SJMP    ??SPIMgr_ProcessZAppData_2
    315            }
    316            else
    317            {
    318              length = rxBufLen;
   \                     ??SPIMgr_ProcessZAppData_1:
   \   00003B   E8           MOV     A,R0
   \   00003C   FE           MOV     R6,A
   \   00003D   E9           MOV     A,R1
   \                     ??SPIMgr_ProcessZAppData_2:
   \   00003E   FF           MOV     R7,A
    319            }
    320          
    321            /* Verify events */
    322            if (event == HAL_UART_TX_FULL)
   \   00003F   7408         MOV     A,#0x8
   \   000041   65..         XRL     A,?V0 + 0
   \   000043   606E         JZ      ??SPIMgr_ProcessZAppData_3
    323            {
    324              // Do something when TX if full
    325              return;
    326            }
    327          
    328            if (event & ( HAL_UART_RX_FULL | HAL_UART_RX_ABOUT_FULL | HAL_UART_RX_TIMEOUT))
   \   000045   7407         MOV     A,#0x7
   \   000047   55..         ANL     A,?V0 + 0
   \   000049   6068         JZ      ??SPIMgr_ProcessZAppData_3
    329            {
    330              if ( App_TaskID )
   \   00004B   90....       MOV     DPTR,#App_TaskID
   \   00004E   E0           MOVX    A,@DPTR
   \   00004F   6062         JZ      ??SPIMgr_ProcessZAppData_3
    331              {
    332                /*
    333                   If Application is ready to receive and there is something
    334                   in the Rx buffer then send it up
    335                */
    336                if ((SPIMgr_ZAppRxStatus == SPI_MGR_ZAPP_RX_READY ) && (length != 0))
   \   000051   90....       MOV     DPTR,#SPIMgr_ZAppRxStatus
   \   000054   E0           MOVX    A,@DPTR
   \   000055   6401         XRL     A,#0x1
   \   000057   705A         JNZ     ??SPIMgr_ProcessZAppData_3
   \   000059   EE           MOV     A,R6
   \   00005A   7001         JNZ     ??SPIMgr_ProcessZAppData_4
   \   00005C   EF           MOV     A,R7
   \                     ??SPIMgr_ProcessZAppData_4:
   \   00005D   6054         JZ      ??SPIMgr_ProcessZAppData_3
    337                {
    338                  /* Disable App flow control until it processes the current data */

⌨️ 快捷键说明

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