📄 mac_support.lst
字号:
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 //-------------------------------------------------------------------------------------------------------
\ In segment NEAR_CODE, align 1, keep-with-next
93 ROOT void msupReverseCopy(BYTE *pDestination, BYTE *pSource, UINT8 length) {
\ msupReverseCopy:
\ 000000 74F8 MOV A,#-0x8
\ 000002 12.... LCALL ?FUNC_ENTER_XDATA
\ 000005 ; Saved register size: 8
\ 000005 ; Auto size: 0
94 pDestination += length;
\ 000005 8982 MOV DPL,R1
\ 000007 AE82 MOV R6,DPL
\ 000009 EA MOV A,R2
\ 00000A 2E ADD A,R6
\ 00000B FA MOV R2,A
\ 00000C EB MOV A,R3
\ 00000D 3400 ADDC A,#0x0
\ 00000F FB MOV R3,A
95 pSource += length;
\ 000010 EC MOV A,R4
\ 000011 2E ADD A,R6
\ 000012 FC MOV R4,A
\ 000013 ED MOV A,R5
\ 000014 3400 ADDC A,#0x0
\ 000016 FD MOV R5,A
\ 000017 801A SJMP ??msupReverseCopy_0
96 while (length--) {
97 *(--pDestination) = *(--pSource);
\ ??msupReverseCopy_1:
\ 000019 EA MOV A,R2
\ 00001A 24FF ADD A,#-0x1
\ 00001C 1A DEC R2
\ 00001D EB MOV A,R3
\ 00001E 34FF ADDC A,#-0x1
\ 000020 FB MOV R3,A
\ 000021 EC MOV A,R4
\ 000022 24FF ADD A,#-0x1
\ 000024 1C DEC R4
\ 000025 ED MOV A,R5
\ 000026 34FF ADDC A,#-0x1
\ 000028 FD MOV R5,A
\ 000029 8C82 MOV DPL,R4
\ 00002B 8D83 MOV DPH,R5
\ 00002D E0 MOVX A,@DPTR
\ 00002E 8A82 MOV DPL,R2
\ 000030 8B83 MOV DPH,R3
\ 000032 F0 MOVX @DPTR,A
98 }
\ ??msupReverseCopy_0:
\ 000033 E9 MOV A,R1
\ 000034 19 DEC R1
\ 000035 70E2 JNZ ??msupReverseCopy_1
99 } // msupReverseCopy
\ 000037 80.. SJMP ?Subroutine0
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
\ In segment XDATA_Z, align 1, keep-with-next
\ 000000 REQUIRE __INIT_XDATA_Z
109 WORD random;
\ random:
\ 000000 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 //------------------------------------------------------------------------------------------------------
\ In segment NEAR_CODE, align 1, keep-with-next
126 ROOT void msupSetTransmitPower(void) {
\ msupSetTransmitPower:
\ 000000 ; Saved register size: 0
\ 000000 ; 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
\ 000000 22 RET
168
169
\ In segment NEAR_CODE, align 1, keep-with-next
170 ROOT BOOL msupIsSfdActive(void) {
\ msupIsSfdActive:
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
171 UINT8 rfrFsmstate = FSMSTATE;
\ 000004 90DF39 MOV DPTR,#-0x20c7
\ 000007 E0 MOVX A,@DPTR
\ 000008 FA MOV R2,A
172 return (((rfrFsmstate >= 7) && (rfrFsmstate <= 13)) || // RX
173 ((rfrFsmstate >= 51) && (rfrFsmstate <= 54)) || // TX ack
174 ((rfrFsmstate >= 36) && (rfrFsmstate <= 39))); // TX
\ 000009 C3 CLR C
\ 00000A 9407 SUBB A,#0x7
\ 00000C 4006 JC ??msupIsSfdActive_0
\ 00000E EA MOV A,R2
\ 00000F C3 CLR C
\ 000010 940E SUBB A,#0xe
\ 000012 401B JC ??msupIsSfdActive_1
\ ??msupIsSfdActive_0:
\ 000014 EA MOV A,R2
\ 000015 C3 CLR C
\ 000016 9433 SUBB A,#0x33
\ 000018 EA MOV A,R2
\ 000019 4009 JC ??msupIsSfdActive_2
\ 00001B C3 CLR C
\ 00001C 9437 SUBB A,#0x37
\ 00001E 400F JC ??msupIsSfdActive_1
\ ??msupIsSfdActive_3:
\ 000020 7900 MOV R1,#0x0
\ ??msupIsSfdActive_4:
\ 000022 80.. SJMP ?Subroutine1
\ ??msupIsSfdActive_2:
\ 000024 C3 CLR C
\ 000025 9424 SUBB A,#0x24
\ 000027 40F7 JC ??msupIsSfdActive_3
\ 000029 EA MOV A,R2
\ 00002A C3 CLR C
\ 00002B 9428 SUBB A,#0x28
\ 00002D 50F1 JNC ??msupIsSfdActive_3
\ ??msupIsSfdActive_1:
\ 00002F 7901 MOV R1,#0x1
\ 000031 80EF SJMP ??msupIsSfdActive_4
175 }
\ In segment NEAR_CODE, align 1, keep-with-next
\ ?Subroutine1:
\ 000000 D083 POP DPH
\ 000002 D082 POP DPL
\ 000004 22 RET
176
\ In segment NEAR_CODE, align 1, keep-with-next
177 ROOT BOOL msupIsTxActive(void) {
\ msupIsTxActive:
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
178 if (FSMSTATE & 0x30) {
\ 000004 90DF39 MOV DPTR,#-0x20c7
\ 000007 E0 MOVX A,@DPTR
\ 000008 5430 ANL A,#0x30
\ 00000A 6004 JZ ??msupIsTxActive_0
179 return TRUE;
\ 00000C 7901 MOV R1,#0x1
\ 00000E 8002 SJMP ??msupIsTxActive_1
180 } else {
181 return FALSE;
\ ??msupIsTxActive_0:
\ 000010 7900 MOV R1,#0x0
\ ??msupIsTxActive_1:
\ 000012 80.. SJMP ?Subroutine1
182 }
183 }
184
\ In segment NEAR_CODE, align 1, keep-with-next
185 ROOT BOOL msupIsCspInCriticalSection(void) {
\ msupIsCspInCriticalSection:
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
186 switch (RFST) {
\ 000004 E5E1 MOV A,0xe1
\ 000006 12.... LCALL ?UC_SWITCH_SPARSE
\ `?<Jumptable for msupIsCspInCriticalSection>_0`:
\ 000009 00 DB 0
\ 00000A 02 DB 2
\ 00000B BB DB 187
\ 00000C .... DW ??msupIsCspInCriticalSection_0
\ 00000E C0 DB 192
\ 00000F .... DW ??msupIsCspInCriticalSection_0
\ 000011 .... DW ??msupIsCspInCriticalSection_1
187 case CSP_INSTR_SNOP:
188 case CSP_INSTR_WAITX:
189 return FALSE;
\ ??msupIsCspInCriticalSection_0:
\ 000013 7900 MOV R1,#0x0
\ 000015 8002 SJMP ??msupIsCspInCriticalSection_2
190 default:
191 return TRUE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -