📄 mac_support.s51
字号:
ASEGN SFR_AN:DATA:NOROOT,0b4H
// unsigned char volatile __sfr ADCCON1
ADCCON1:
DS 1
ASEGN SFR_AN:DATA:NOROOT,0bcH
// unsigned char volatile __sfr RNDL
RNDL:
DS 1
ASEGN SFR_AN:DATA:NOROOT,0bdH
// unsigned char volatile __sfr RNDH
RNDH:
DS 1
ASEGN SFR_AN:DATA:NOROOT,0e1H
// unsigned char volatile __sfr RFST
RFST:
DS 1
// 24
// 25
RSEG XDATA_Z:XDATA:NOROOT(0)
REQUIRE __INIT_XDATA_Z
// 26 UINT8 oldPhyTransmitPower = OUTPUT_POWER_0DBM;
oldPhyTransmitPower:
DS 1
// 27
// 28 /*******************************************************************************************************
// 29 *******************************************************************************************************
// 30 ************************** GENERAL FUNCTIONS **************************
// 31 *******************************************************************************************************
// 32 *******************************************************************************************************/
// 33
// 34
// 35 //-------------------------------------------------------------------------------------------------------
// 36 // void msupWaitTask(MAC_TASK_INFO *pTask)
// 37 //
// 38 // DESCRIPTION:
// 39 // This task is meant to be placed behind another task to make sure that this task has finihed.
// 40 // When the task is run, it will set an 8-bit boolean value, pointed to by the taskData, to FALSE.
// 41 //
// 42 // TASK DATA:
// 43 // A BOOL pointer to the flag to be changed to FALSE
// 44 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 45 void msupWaitTask(MAC_TASK_INFO *pTask) NEAR {
msupWaitTask:
CFI Block cfiBlock0 Using cfiCommon0
CFI Function msupWaitTask
FUNCALL msupWaitTask, mschRemoveTask
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
MOV A,R2
MOV R0,A
MOV A,R3
MOV R1,A
// 46 *((BOOL *) pTask->taskData) = FALSE;
MOV DPL,R0
MOV DPH,R1
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R3,A
MOV DPL,R2
MOV DPH,R3
CLR A
MOVX @DPTR,A
// 47 mschRemoveTask(pTask->priority, MSCH_KEEP_TASK_IN_PROGRESS_BM);
; Setup parameters for call to function mschRemoveTask
MOV R2,#0x2
MOV DPL,R0
MOV DPH,R1
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R1,A
LCALL mschRemoveTask & 0xFFFF
// 48 } // msupWaitTask
POP DPH
CFI DPH0 SameValue
CFI CFA_SP SP+-4
POP DPL
CFI DPL0 SameValue
CFI CFA_SP SP+-3
LJMP ?BRET
CFI EndBlock cfiBlock0
// 49
// 50
// 51
// 52
// 53 //-------------------------------------------------------------------------------------------------------
// 54 // BOOL msupCompareAddress(ADDRESS *pA, ADDRESS *pB)
// 55 //
// 56 // DESCRIPTION:
// 57 // Support function for comparing two 64-bit ADDRESS, A and B
// 58 //
// 59 // PARAMETERS:
// 60 // ADDRESS *pA
// 61 // pointer to ADDRESS A
// 62 // ADDRESS *pB
// 63 // pointer to ADDRESS B
// 64 //
// 65 // RETURN VALUE:
// 66 // BOOL
// 67 // TRUE if A and B are equal, false otherwise
// 68 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 69 ROOT BOOL msupCompareExtendedAddress(ADDRESS *pA, ADDRESS *pB) {
msupCompareExtendedAddress:
CFI Block cfiBlock1 Using cfiCommon1
CFI Function msupCompareExtendedAddress
MOV A,#-0x8
LCALL ?FUNC_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 8)
; Saved register size: 8
; Auto size: 0
// 70 UINT8 n;
// 71 n = sizeof(ADDRESS);
MOV R7,#0x8
// 72 do {
// 73 if (*((BYTE *) pA) != *((BYTE *) pB)) return FALSE;
??msupCompareExtendedAddress_0:
MOV DPL,R2
MOV DPH,R3
MOVX A,@DPTR
MOV R6,A
MOV DPL,R4
MOV DPH,R5
MOVX A,@DPTR
XRL A,R6
JZ ??msupCompareExtendedAddress_1
MOV R1,#0x0
SJMP ??msupCompareExtendedAddress_2
// 74 pA = (ADDRESS *) ((BYTE *) pA + 1);
??msupCompareExtendedAddress_1:
MOV DPL,R2
MOV DPH,R3
INC DPTR
MOV R2,DPL
MOV R3,DPH
// 75 pB = (ADDRESS *) ((BYTE *) pB + 1);
MOV DPL,R4
MOV DPH,R5
INC DPTR
MOV R4,DPL
MOV R5,DPH
// 76 } while (--n);
DEC R7
MOV A,R7
JNZ ??msupCompareExtendedAddress_0
// 77 return TRUE;
MOV R1,#0x1
CFI EndBlock cfiBlock1
??msupCompareExtendedAddress_2:
REQUIRE ?Subroutine0
; // Fall through to label ?Subroutine0
// 78 } // msupCompareAddress
RSEG NEAR_CODE:CODE:NOROOT(0)
?Subroutine0:
CFI Block cfiBlock2 Using cfiCommon1
CFI NoFunction
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 8)
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-4)))
MOV R7,#0x1
LJMP ?FUNC_LEAVE_XDATA
CFI EndBlock cfiBlock2
// 79
// 80
// 81
// 82
// 83 //-------------------------------------------------------------------------------------------------------
// 84 // void msupReverseCopy(BYTE *pDestination, BYTE *pSource, UINT8 length)
// 85 //
// 86 // DESCRIPTION:
// 87 // Copies an array of data in the reverse order, so that the first part of the destination can
// 88 // overlap with the last part of the source:
// 89 //
// 90 // Source F---------------L (last byte "L" is moved first -> avoids overwriting)
// 91 // Destination F---------------L
// 92 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 93 ROOT void msupReverseCopy(BYTE *pDestination, BYTE *pSource, UINT8 length) {
msupReverseCopy:
CFI Block cfiBlock3 Using cfiCommon1
CFI Function msupReverseCopy
MOV A,#-0x8
LCALL ?FUNC_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 8)
; Saved register size: 8
; Auto size: 0
// 94 pDestination += length;
MOV DPL,R1
MOV R6,DPL
MOV A,R2
ADD A,R6
MOV R2,A
MOV A,R3
ADDC A,#0x0
MOV R3,A
// 95 pSource += length;
MOV A,R4
ADD A,R6
MOV R4,A
MOV A,R5
ADDC A,#0x0
MOV R5,A
SJMP ??msupReverseCopy_0
// 96 while (length--) {
// 97 *(--pDestination) = *(--pSource);
??msupReverseCopy_1:
MOV A,R2
ADD A,#-0x1
DEC R2
MOV A,R3
ADDC A,#-0x1
MOV R3,A
MOV A,R4
ADD A,#-0x1
DEC R4
MOV A,R5
ADDC A,#-0x1
MOV R5,A
MOV DPL,R4
MOV DPH,R5
MOVX A,@DPTR
MOV DPL,R2
MOV DPH,R3
MOVX @DPTR,A
// 98 }
??msupReverseCopy_0:
MOV A,R1
DEC R1
JNZ ??msupReverseCopy_1
// 99 } // msupReverseCopy
SJMP ?Subroutine0
CFI EndBlock cfiBlock3
// 100
// 101
// 102
// 103
// 104 //-------------------------------------------------------------------------------------------------------
// 105 // The random generator polynom
// 106 #define RANDOM_POLY 0x1021
// 107
// 108 // The 16-bit shift register which is used to generate random numbers
RSEG XDATA_Z:XDATA:NOROOT(0)
REQUIRE __INIT_XDATA_Z
// 109 WORD random;
random:
DS 2
// 110 //-------------------------------------------------------------------------------------------------------
// 111
// 112
// 113 //-------------------------------------------------------------------------------------------------------
// 114 // void msupSetTransmitPower(void)
// 115 //
// 116 // DESCRIPTION:
// 117 // Changes the Transiver transmit power.
// 118 // The function checks the ppib.phyTransmitPower to see if it has changed.
// 119 // if the parameter is changed the changes will be writen to the radio chip.
// 120 // Alowed values of ppib.phyTransmitPower are: OUTPUT_POWER_0DBM, OUTPUT_POWER_N1DBM
// 121 // OUTPUT_POWER_N3DBM, OUTPUT_POWER_N5DBM, OUTPUT_POWER_N7DBM, OUTPUT_POWER_N10DBM
// 122 // OUTPUT_POWER_N15DBM and OUTPUT_POWER_N25DBM
// 123 //
// 124 // PARAMETERS:
// 125 //------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 126 ROOT void msupSetTransmitPower(void) {
msupSetTransmitPower:
CFI Block cfiBlock4 Using cfiCommon1
CFI Function msupSetTransmitPower
; Saved register size: 0
; Auto size: 0
// 127 // TBD: Not safe (should disable interrupts or something...)
// 128 /* UINT16 txctrl;
// 129
// 130 //If parameter is changed verify and write to chip.
// 131 if (oldPhyTransmitPower != ppib.phyTransmitPower) {
// 132 switch(ppib.phyTransmitPower) {
// 133 case OUTPUT_POWER_0DBM:
// 134 txctrl = CC2430_0DBM;
// 135 break;
// 136 case OUTPUT_POWER_N1DBM:
// 137 txctrl = CC2430_N1DBM;
// 138 break;
// 139 case OUTPUT_POWER_N3DBM:
// 140 txctrl = CC2430_N3DBM;
// 141 break;
// 142 case OUTPUT_POWER_N5DBM:
// 143 txctrl = CC2430_N5DBM;
// 144 break;
// 145 case OUTPUT_POWER_N7DBM:
// 146 txctrl = CC2430_N7DBM;
// 147 break;
// 148 case OUTPUT_POWER_N10DBM:
// 149 txctrl = CC2430_N10DBM;
// 150 break;
// 151 case OUTPUT_POWER_N15DBM:
// 152 txctrl = CC2430_N15DBM;
// 153 break;
// 154 case OUTPUT_POWER_N25DBM:
// 155 txctrl = CC2430_N25DBM;
// 156 break;
// 157 //No valid value reset to old
// 158 default:
// 159 ppib.phyTransmitPower = oldPhyTransmitPower;
// 160 txctrl = CC2430_0DBM;
// 161 break;
// 162 }
// 163 oldPhyTransmitPower = ppib.phyTransmitPower;
// 164 WRITE_RFR16(RFR_TXCTRL, txctrl);
// 165 }
// 166 */
// 167 }// msupSetTransmitPower
RET
CFI EndBlock cfiBlock4
// 168
// 169
RSEG NEAR_CODE:CODE:NOROOT(0)
// 170 ROOT BOOL msupIsSfdActive(void) {
msupIsSfdActive:
CFI Block cfiBlock5 Using cfiCommon1
CFI Function msupIsSfdActive
PUSH DPL
CFI DPL0 Frame(CFA_SP, 3)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -