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

📄 spimgr.lst

📁 用IAR开发的ZIGBEE网络路由例子
💻 LST
📖 第 1 页 / 共 3 页
字号:
     85            halUARTCfg_t uartConfig;
     86          
     87            /* Initialize APP ID */
     88            App_TaskID = 0;
   \   000004   E4           CLR     A
   \   000005                REQUIRE ?Subroutine0
   \   000005                ; // Fall through to label ?Subroutine0
     89          
     90            /* UART Configuration */
     91            uartConfig.configured           = TRUE;
     92            uartConfig.baudRate             = SPI_MGR_DEFAULT_BAUDRATE;
     93            uartConfig.flowControl          = SPI_MGR_DEFAULT_OVERFLOW;
     94            uartConfig.flowControlThreshold = SPI_MGR_DEFAULT_THRESHOLD;
     95            uartConfig.rx.maxBufSize        = SPI_MGR_DEFAULT_MAX_RX_BUFF;
     96            uartConfig.tx.maxBufSize        = SPI_MGR_DEFAULT_MAX_TX_BUFF;
     97            uartConfig.idleTimeout          = SPI_MGR_DEFAULT_IDLE_TIMEOUT;
     98            uartConfig.intEnable            = TRUE;
     99          #if defined (ZTOOL_P1) || defined (ZTOOL_P2)
    100            uartConfig.callBackFunc         = SPIMgr_ProcessZToolData;
    101          #elif defined (ZAPP_P1) || defined (ZAPP_P2)
    102            uartConfig.callBackFunc         = SPIMgr_ProcessZAppData;
    103          #else
    104            uartConfig.callBackFunc         = NULL;
    105          #endif
    106          
    107            /* Start UART */
    108          #if defined (SPI_MGR_DEFAULT_PORT)
    109            HalUARTOpen (SPI_MGR_DEFAULT_PORT, &uartConfig);
    110          #else
    111            /* Silence IAR compiler warning */
    112            (void)uartConfig;
    113          #endif
    114          
    115            /* Initialize for ZApp */
    116          #if defined (ZAPP_P1) || defined (ZAPP_P2)
    117            /* Default max bytes that ZAPP can take */
    118            SPIMgr_MaxZAppBufLen  = 1;
    119            SPIMgr_ZAppRxStatus   = SPI_MGR_ZAPP_RX_READY;
    120          #endif
    121          
    122          
    123          }

   \                                 In segment BANKED_CODE, align 1, keep-with-next
   \                     ?Subroutine0:
   \   000000   90....       MOV     DPTR,#App_TaskID
   \   000003   F0           MOVX    @DPTR,A
   \   000004   D083         POP     DPH
   \   000006   D082         POP     DPL
   \   000008   02....       LJMP    ?BRET
    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           ***************************************************************************************************/

   \                                 In segment BANKED_CODE, align 1, keep-with-next
    137          void SPIMgr_RegisterTaskID( byte taskID )
   \                     SPIMgr_RegisterTaskID:
    138          {
   \   000000   C082         PUSH    DPL
   \   000002   C083         PUSH    DPH
   \   000004                ; Saved register size: 2
   \   000004                ; Auto size: 0
    139            App_TaskID = taskID;
   \   000004   E9           MOV     A,R1
   \   000005   80..         SJMP    ?Subroutine0
    140          }
    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           ***************************************************************************************************/

   \                                 In segment BANKED_CODE, align 1, keep-with-next
    156          byte SPIMgr_CalcFCS( uint8 *msg_ptr, uint8 len )
   \                     SPIMgr_CalcFCS:
    157          {
   \   000000   74F7         MOV     A,#-0x9
   \   000002   12....       LCALL   ?BANKED_ENTER_XDATA
   \   000005                ; Saved register size: 9
   \   000005                ; Auto size: 0
   \   000005   E9           MOV     A,R1
   \   000006   FC           MOV     R4,A
    158            byte x;
    159            byte xorResult;
    160          
    161            xorResult = 0;
   \   000007   7900         MOV     R1,#0x0
    162          
    163            for ( x = 0; x < len; x++, msg_ptr++ )
   \   000009   7D00         MOV     R5,#0x0
   \   00000B   800E         SJMP    ??SPIMgr_CalcFCS_0
    164              xorResult = xorResult ^ *msg_ptr;
   \                     ??SPIMgr_CalcFCS_1:
   \   00000D   8A82         MOV     DPL,R2
   \   00000F   8B83         MOV     DPH,R3
   \   000011   E0           MOVX    A,@DPTR
   \   000012   C9           XCH     A,R1
   \   000013   69           XRL     A,R1
   \   000014   F9           MOV     R1,A
   \   000015   0D           INC     R5
   \   000016   A3           INC     DPTR
   \   000017   AA82         MOV     R2,DPL
   \   000019   AB83         MOV     R3,DPH
   \                     ??SPIMgr_CalcFCS_0:
   \   00001B   ED           MOV     A,R5
   \   00001C   C3           CLR     C
   \   00001D   9C           SUBB    A,R4
   \   00001E   40ED         JC      ??SPIMgr_CalcFCS_1
    165          
    166            return ( xorResult );
   \   000020   7F01         MOV     R7,#0x1
   \   000022   02....       LJMP    ?BANKED_LEAVE_XDATA
    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           ***************************************************************************************************/
    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];

⌨️ 快捷键说明

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