📄 spimgr.s51
字号:
// 11 derivative works, modify, distribute, perform, display or sell this
// 12 software and/or its documentation for any purpose is prohibited
// 13 without the express written consent of Texas Instruments, Inc.
// 14 ***************************************************************************************************/
// 15
// 16
// 17 /***************************************************************************************************
// 18 * INCLUDES
// 19 ***************************************************************************************************/
// 20 #include "ZComDef.h"
// 21 #include "OSAL.h"
// 22 #include "hal_uart.h"
// 23 #include "MTEL.h"
// 24 #include "SPIMgr.h"
// 25 #include "OSAL_Memory.h"
// 26
// 27
// 28 /***************************************************************************************************
// 29 * MACROS
// 30 ***************************************************************************************************/
// 31
// 32 /***************************************************************************************************
// 33 * CONSTANTS
// 34 ***************************************************************************************************/
// 35
// 36 /* State values for ZTool protocal */
// 37 #define SOP_STATE 0x00
// 38 #define CMD_STATE1 0x01
// 39 #define CMD_STATE2 0x02
// 40 #define LEN_STATE 0x03
// 41 #define DATA_STATE 0x04
// 42 #define FCS_STATE 0x05
// 43
// 44 /***************************************************************************************************
// 45 * TYPEDEFS
// 46 ***************************************************************************************************/
// 47
// 48 /***************************************************************************************************
// 49 * GLOBAL VARIABLES
// 50 ***************************************************************************************************/
RSEG XDATA_Z:XDATA:NOROOT(0)
REQUIRE __INIT_XDATA_Z
// 51 byte App_TaskID;
App_TaskID:
DS 1
// 52
// 53 /* ZTool protocal parameters */
// 54
// 55 #if defined (ZTOOL_P1) || defined (ZTOOL_P2)
// 56 uint8 state;
// 57 uint8 CMD_Token[2];
// 58 uint8 LEN_Token;
// 59 uint8 FSC_Token;
// 60 mtOSALSerialData_t *SPI_Msg;
// 61 uint8 tempDataLen;
// 62 #endif //ZTOOL
// 63
// 64 #if defined (ZAPP_P1) || defined (ZAPP_P2)
// 65 uint16 SPIMgr_MaxZAppBufLen;
// 66 bool SPIMgr_ZAppRxStatus;
// 67 #endif
// 68
// 69
// 70 /***************************************************************************************************
// 71 * LOCAL FUNCTIONS
// 72 ***************************************************************************************************/
// 73
// 74 /***************************************************************************************************
// 75 * @fn SPIMgr_Init
// 76 *
// 77 * @brief
// 78 *
// 79 * @param None
// 80 *
// 81 * @return None
// 82 ***************************************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 83 void SPIMgr_Init ()
SPIMgr_Init:
CFI Block cfiBlock0 Using cfiCommon0
CFI Function SPIMgr_Init
// 84 {
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
// 85 halUARTCfg_t uartConfig;
// 86
// 87 /* Initialize APP ID */
// 88 App_TaskID = 0;
CLR A
CFI EndBlock cfiBlock0
REQUIRE ?Subroutine0
; // 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 }
RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine0:
CFI Block cfiBlock1 Using cfiCommon0
CFI NoFunction
CFI CFA_SP SP+-5
CFI DPL0 Frame(CFA_SP, 4)
CFI DPH0 Frame(CFA_SP, 5)
MOV DPTR,#App_TaskID
MOVX @DPTR,A
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
SJMP ?Subroutine0
CFI EndBlock cfiBlock2
// 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 ***************************************************************************************************/
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -