📄 ref_node.lst
字号:
\ In segment BANKED_CODE, align 1, keep-with-next
256 void ST_IRQ_RefNode(void)
\ ST_IRQ_RefNode:
257 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
258 INT_SETFLAG(INUM_ST, INT_CLR);
\ 000004 C2C7 CLR 0xc0.7
259
260 switch (refNodeState){
\ 000006 90.... MOV DPTR,#refNodeState
\ 000009 E0 MOVX A,@DPTR
\ 00000A 12.... LCALL ?UC_SWITCH_DENSE
\ `?<Jumptable for ST_IRQ_RefNode>_0`:
\ 00000D 00 DB 0
\ 00000E 02 DB 2
\ 00000F .... DW ??ST_IRQ_RefNode_0
\ 000011 .... DW ??ST_IRQ_RefNode_1
\ 000013 .... DW ??ST_IRQ_RefNode_0
\ 000015 .... DW ??ST_IRQ_RefNode_2
261 case AWAKE_STATE:
262 refNodeState = SLEEP_STATE;
\ ??ST_IRQ_RefNode_1:
\ 000017 7401 MOV A,#0x1
\ 000019 90.... MOV DPTR,#refNodeState
\ 00001C F0 MOVX @DPTR,A
263 AddToSleepTimer(REF_NODE_SLEEP_TIME);
\ 00001D ; Setup parameters for call to function AddToSleepTimer
\ 00001D 7AEE MOV R2,#-0x12
\ 00001F 7B02 MOV R3,#0x2
\ ??ST_IRQ_RefNode_3:
\ 000021 90.... MOV DPTR,#(AddToSleepTimer & 0xffff)
\ 000024 74.. MOV A,#((AddToSleepTimer >> 16) & 0xff)
\ 000026 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 000029 8031 SJMP ??ST_IRQ_RefNode_4
264 break;
265 case SLEEP_STATE:
266 refNodeState = AWAKE_STATE;
\ ??ST_IRQ_RefNode_0:
\ 00002B E4 CLR A
\ 00002C 90.... MOV DPTR,#refNodeState
\ 00002F F0 MOVX @DPTR,A
267 AddToSleepTimer(REF_NODE_POWER_UP_TIME);
\ 000030 ; Setup parameters for call to function AddToSleepTimer
\ 000030 7AFA MOV R2,#-0x6
\ 000032 FB MOV R3,A
\ 000033 80EC SJMP ??ST_IRQ_RefNode_3
268 break;
269 case BLINK_LED_STATE:
270 LED1 ^= 1;
\ ??ST_IRQ_RefNode_2:
\ 000035 639001 XRL 0x90,#0x1
\ 000038 E590 MOV A,0x90
271 ledBlinkCounter++;
\ 00003A 90.... MOV DPTR,#ledBlinkCounter
\ 00003D E0 MOVX A,@DPTR
\ 00003E 04 INC A
\ 00003F F0 MOVX @DPTR,A
272 AddToSleepTimer(LED_BLINK_TIME);
\ 000040 ; Setup parameters for call to function AddToSleepTimer
\ 000040 7A64 MOV R2,#0x64
\ 000042 7B00 MOV R3,#0x0
\ 000044 90.... MOV DPTR,#(AddToSleepTimer & 0xffff)
\ 000047 74.. MOV A,#((AddToSleepTimer >> 16) & 0xff)
\ 000049 12.... LCALL ?BCALL ; Banked call to: DPTR()
273 if(ledBlinkCounter > NBR_OF_LED_BLINK * 2){
\ 00004C 90.... MOV DPTR,#ledBlinkCounter
\ 00004F E0 MOVX A,@DPTR
\ 000050 C3 CLR C
\ 000051 9415 SUBB A,#0x15
\ 000053 4007 JC ??ST_IRQ_RefNode_4
274 refNodeState = AWAKE_STATE;
\ 000055 E4 CLR A
\ 000056 90.... MOV DPTR,#refNodeState
\ 000059 F0 MOVX @DPTR,A
275 LED1 = LED_OFF;
\ 00005A D290 SETB 0x90.0
276 }
277 break;
278 default:
279 refNodeState = AWAKE_STATE;
280 AddToSleepTimer(REF_NODE_POWER_UP_TIME);
281 break;
282 }
283 }
\ ??ST_IRQ_RefNode_4:
\ 00005C D083 POP DPH
\ 00005E D082 POP DPL
\ 000060 02.... LJMP ?BRET
284
285 /******************************************************************************
286 *
287 * Function which sets up an DMA transfer to the FLASH writing interface
288 ******************************************************************************/
\ In segment NEAR_CODE, align 1, keep-with-next
289 __near_func void setUpDmaToFlash(void){
\ setUpDmaToFlash:
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
290 SET_WORD(dmaChannel.SRCADDRH, dmaChannel.SRCADDRL, flashEntries); // The start address of the segment
\ 000004 74.. MOV A,#((flashEntries >> 8) & 0xff)
\ 000006 90.... MOV DPTR,#dmaChannel
\ 000009 F0 MOVX @DPTR,A
\ 00000A 74.. MOV A,#(flashEntries & 0xff)
\ 00000C 90.... MOV DPTR,#(dmaChannel + 1)
\ 00000F F0 MOVX @DPTR,A
291 SET_WORD(dmaChannel.DESTADDRH, dmaChannel.DESTADDRL, &X_FWDATA); // Input of the AES module
\ 000010 74DF MOV A,#-0x21
\ 000012 90.... MOV DPTR,#(dmaChannel + 2)
\ 000015 F0 MOVX @DPTR,A
\ 000016 74AF MOV A,#-0x51
\ 000018 90.... MOV DPTR,#(dmaChannel + 3)
\ 00001B F0 MOVX @DPTR,A
292 SET_WORD(dmaChannel.LENH, dmaChannel.LENL, 16); // Setting the length of the transfer (bytes)
\ 00001C 90.... MOV DPTR,#(dmaChannel + 4)
\ 00001F E0 MOVX A,@DPTR
\ 000020 54E0 ANL A,#0xe0
\ 000022 F0 MOVX @DPTR,A
\ 000023 90.... MOV DPTR,#(dmaChannel + 5)
\ 000026 E0 MOVX A,@DPTR
\ 000027 7410 MOV A,#0x10
\ 000029 F0 MOVX @DPTR,A
293 dmaChannel.VLEN = VLEN_USE_LEN; // Using the length field
\ 00002A 90.... MOV DPTR,#(dmaChannel + 4)
\ 00002D E0 MOVX A,@DPTR
\ 00002E 541F ANL A,#0x1f
\ 000030 F0 MOVX @DPTR,A
294 dmaChannel.PRIORITY = PRI_HIGH; // High priority
\ 000031 90.... MOV DPTR,#(dmaChannel + 7)
\ 000034 E0 MOVX A,@DPTR
\ 000035 54FC ANL A,#0xfc
\ 000037 4402 ORL A,#0x2
\ 000039 F0 MOVX @DPTR,A
295 dmaChannel.M8 = M8_USE_8_BITS; // Transferring all 8 bits in each byte.
\ 00003A E0 MOVX A,@DPTR
\ 00003B C2E2 CLR 0xE0 /* A */.2
\ 00003D F0 MOVX @DPTR,A
296 dmaChannel.IRQMASK = FALSE; // The DMA complete interrupt flag is set at completion.
\ 00003E E0 MOVX A,@DPTR
\ 00003F C2E3 CLR 0xE0 /* A */.3
\ 000041 F0 MOVX @DPTR,A
297 dmaChannel.DESTINC = DESTINC_0; // The destination address is constant
\ 000042 E0 MOVX A,@DPTR
\ 000043 54CF ANL A,#0xcf
\ 000045 F0 MOVX @DPTR,A
298 dmaChannel.SRCINC = SRCINC_1; // The address for data fetch is inremented by 1 byte
\ 000046 E0 MOVX A,@DPTR
\ 000047 543F ANL A,#0x3f
\ 000049 4440 ORL A,#0x40
\ 00004B F0 MOVX @DPTR,A
299 dmaChannel.TRIG = DMATRIG_FLASH; // Setting the FLASH module to generate the DMA trigger
\ 00004C 90.... MOV DPTR,#(dmaChannel + 6)
\ 00004F E0 MOVX A,@DPTR
\ 000050 54E0 ANL A,#0xe0
\ 000052 4412 ORL A,#0x12
\ 000054 F0 MOVX @DPTR,A
300 dmaChannel.TMODE = TMODE_SINGLE; // A single byte is transferred each time.
\ 000055 E0 MOVX A,@DPTR
\ 000056 549F ANL A,#0x9f
\ 000058 F0 MOVX @DPTR,A
301 dmaChannel.WORDSIZE = WORDSIZE_BYTE; // Set to count bytes.
\ 000059 E0 MOVX A,@DPTR
\ 00005A C2E7 CLR 0xE0 /* A */.7
\ 00005C F0 MOVX @DPTR,A
302
303 DMA_SET_ADDR_DESC0(&dmaChannel);
\ 00005D 74.. MOV A,#((dmaChannel >> 8) & 0xff)
\ 00005F F5D5 MOV 0xd5,A
\ 000061 75D4.. MOV 0xd4,#(dmaChannel & 0xff)
304 DMA_ABORT_CHANNEL(0);
\ 000064 75D681 MOV 0xd6,#-0x7f
305 }
\ 000067 REQUIRE ?Subroutine0
\ 000067 ; // Fall through to label ?Subroutine0
\ In segment NEAR_CODE, align 1, keep-with-next
\ ?Subroutine0:
\ 000000 D083 POP DPH
\ 000002 D082 POP DPL
\ 000004 22 RET
306
307
308
309 /******************************************************************************
310 *
311 * Function that performs the actual flash writing
312 ******************************************************************************/
\ In segment NEAR_CODE, align 1, keep-with-next
313 __near_func writeToFlash(void){
\ writeToFlash:
\ 000000 74F7 MOV A,#-0x9
\ 000002 12.... LCALL ?FUNC_ENTER_XDATA
\ 000005 ; Saved register size: 9
\ 000005 ; Auto size: 0
314 //store data in flash
315 SET_WORD(FADDRH, FADDRL, ((UINT16)pFlashEntry >> 2) | 0x4000 );
\ 000005 90.... MOV DPTR,#pFlashEntry
\ 000008 E0 MOVX A,@DPTR
\ 000009 F5.. MOV ?V0 + 0,A
\ 00000B A3 INC DPTR
\ 00000C E0 MOVX A,@DPTR
\ 00000D F5.. MOV ?V0 + 1,A
\ 00000F 7402 MOV A,#0x2
\ 000011 78.. MOV R0,#?V0 + 0
\ 000013 12.... LCALL ?US_SHR
\ 000016 A9.. MOV R1,?V0 + 1
\ 000018 7440 MOV A,#0x40
\ 00001A 49 ORL A,R1
\ 00001B FB MOV R3,A
\ 00001C E4 CLR A
\ 00001D CB XCH A,R3
\ 00001E FA MOV R2,A
\ 00001F F5AD MOV 0xad,A
\ 000021 E5.. MOV A,?V0 + 0
\ 000023 F5AC MOV 0xac,A
316
317 // Storing old settings and setting up the DMA.
318 // Clearing all DMA complete flags and arming the channel.
319 DMAIRQ &= ~DMA_CHANNEL_0;
\ 000025 53D1FE ANL 0xd1,#0xfe
320 DMA_ARM_CHANNEL(0);
\ 000028 75D601 MOV 0xd6,#0x1
321
322 FLASH_CONFIG(WRITE);
\ 00002B 7407 MOV A,#0x7
\ 00002D 55C6 ANL A,0xc6
\ 00002F F8 MOV R0,A
\ 000030 742A MOV A,#0x2a
\ 000032 B80002 CJNE R0,#0x0,??writeToFlash_0
\ 000035 8005 SJMP ??writeToFlash_1
\ ??writeToFlash_0:
\ 000037 A2E7 MOV C,0xE0 /* A */.7
\ 000039 13 RRC A
\ 00003A D8FB DJNZ R0,??writeToFlash_0
\ ??writeToFlash_1:
\ 00003C F5AB MOV 0xab,A
\ 00003E 75AE02 MOV 0xae,#0x2
323 asm("NOP");
\ 000041 00 NOP
324
325 // Waiting for the DMA to finish.
326 while(!(DMAIRQ & DMA_CHANNEL_0));
\ ??writeToFlash_2:
\ 000042 E5D1 MOV A,0xd1
\ 000044 A2E0 MOV C,0xE0 /* A */.0
\ 000046 50FA JNC ??writeToFlash_2
327 DMAIRQ &= ~DMA_CHANNEL_0;
\ 000048 53D1FE ANL 0xd1,#0xfe
328 }
\ 00004B 7F02 MOV R7,#0x2
\ 00004D 02.... LJMP ?FUNC_LEAVE_XDATA
329
330
331
332 /******************************************************************************
333 *
334 * Function which finds the newest entry in the flash
335 * the pFlashEntry pointer is set.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -