📄 osal_nv.s51
字号:
// 281 failF = TRUE;
// 282 return;
// 283 }
// 284
// 285 HAL_DMA_CLEAR_IRQ( 0 );
// 286
// 287 HAL_DMA_ARM_CH( 0 );
// 288
// 289 halFlashDmaTrigger();
// 290
// 291 while ( !(HAL_DMA_CHECK_IRQ( 0 )) );
// 292
// 293 while ( FCTL & FWBUSY );
// 294 }
// 295
// 296 /*********************************************************************
// 297 * @fn initNV
// 298 *
// 299 * @brief Initialize the NV flash pages.
// 300 *
// 301 * @param none
// 302 *
// 303 * @return TRUE if NV pages seem ok; FALSE otherwise.
// 304 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 305 static uint8 initNV( void )
??initNV:
CFI Block cfiBlock0 Using cfiCommon0
CFI Function ??initNV
// 306 {
FUNCALL ??initNV, ??readHdr
LOCFRAME XSTACK, 26, STACK
ARGFRAME XSTACK, 26, STACK
FUNCALL ??initNV, ??readHdr
LOCFRAME XSTACK, 26, STACK
ARGFRAME XSTACK, 26, STACK
FUNCALL ??initNV, ??setPageUse
LOCFRAME XSTACK, 26, STACK
ARGFRAME XSTACK, 26, STACK
FUNCALL ??initNV, ??initPage
LOCFRAME XSTACK, 26, STACK
ARGFRAME XSTACK, 26, STACK
FUNCALL ??initNV, ??readHdr
LOCFRAME XSTACK, 26, STACK
ARGFRAME XSTACK, 26, STACK
FUNCALL ??initNV, ??writeWordD
LOCFRAME XSTACK, 26, STACK
ARGFRAME XSTACK, 26, STACK
FUNCALL ??initNV, ??writeWordD
LOCFRAME XSTACK, 26, STACK
ARGFRAME XSTACK, 26, STACK
FUNCALL ??initNV, ??setPageUse
LOCFRAME XSTACK, 26, STACK
ARGFRAME XSTACK, 26, STACK
FUNCALL ??initNV, ??compactPage
LOCFRAME XSTACK, 26, STACK
ARGFRAME XSTACK, 26, STACK
MOV A,#-0xa
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 V1 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 10)
; Saved register size: 10
; Auto size: 16
MOV A,#-0x10
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 26)
// 307 osalNvPgHdr_t pgHdr, ieee;
// 308 uint8 oldPg = OSAL_NV_PAGE_NULL;
MOV ?V0 + 1,#0x0
// 309 uint8 newPg = OSAL_NV_PAGE_NULL;
MOV R7,#0x0
// 310 uint8 xBad;
// 311 uint8 pg;
// 312
// 313 readHdr( OSAL_NV_IEEE_PAGE, OSAL_NV_IEEE_OFFSET, (uint8 *)(&ieee) );
; Setup parameters for call to function readHdr
MOV A,#0x8
LCALL ?XSTACK_DISP0_8
MOV R4,DPL
MOV R5,DPH
MOV R2,#-0x8
MOV R3,#0x7
MOV R1,#0x3f
MOV DPTR,#(??readHdr & 0xffff)
MOV A,#((??readHdr >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 314 if ( (ieee.active == OSAL_NV_ERASED_ID) &&
// 315 (ieee.inUse == OSAL_NV_ERASED_ID) &&
// 316 (ieee.xfer == OSAL_NV_ERASED_ID) &&
// 317 (ieee.spare == OSAL_NV_ERASED_ID) )
MOV A,#0x8
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
XRL A,#0xff
JNZ ??initNV_1
INC DPTR
MOVX A,@DPTR
XRL A,#0xff
??initNV_1:
JNZ ??initNV_2
MOV A,#0xa
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
XRL A,#0xff
JNZ ??initNV_3
INC DPTR
MOVX A,@DPTR
XRL A,#0xff
??initNV_3:
JNZ ??initNV_2
MOV A,#0xc
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
XRL A,#0xff
JNZ ??initNV_4
INC DPTR
MOVX A,@DPTR
XRL A,#0xff
??initNV_4:
JNZ ??initNV_2
MOV A,#0xe
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
XRL A,#0xff
JNZ ??initNV_5
INC DPTR
MOVX A,@DPTR
XRL A,#0xff
??initNV_5:
JNZ ??initNV_2
// 318 {
// 319 xBad = TRUE;
MOV ?V0 + 0,#0x1
SJMP ??initNV_6
// 320 }
// 321 else
// 322 {
// 323 xBad = FALSE;
??initNV_2:
MOV ?V0 + 0,R7
// 324 }
// 325
// 326 pgRes = OSAL_NV_PAGE_NULL;
??initNV_6:
CLR A
MOV DPTR,#??pgRes
MOVX @DPTR,A
// 327
// 328 for ( pg = OSAL_NV_PAGE_BEG; pg <= OSAL_NV_PAGE_END; pg++ )
MOV R6,#0x3c
// 329 {
// 330 #if OSAL_NV_CLEANUP
// 331 OSAL_NV_PAGE_ERASE( pg );
// 332 asm( "NOP" );
// 333 #endif
// 334
// 335 readHdr( pg, OSAL_NV_PAGE_HDR_OFFSET, (uint8 *)(&pgHdr) );
??initNV_7:
; Setup parameters for call to function readHdr
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOV R4,DPL
MOV R5,DPH
MOV R2,#0x0
MOV R3,#0x0
MOV A,R6
MOV R1,A
MOV DPTR,#(??readHdr & 0xffff)
MOV A,#((??readHdr >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 336
// 337 if ( pgHdr.active == OSAL_NV_ERASED_ID )
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX A,@DPTR
XRL A,#0xff
JNZ ??initNV_8
INC DPTR
MOVX A,@DPTR
XRL A,#0xff
??initNV_8:
JNZ ??initNV_9
// 338 {
// 339 if ( pgRes == OSAL_NV_PAGE_NULL )
MOV DPTR,#??pgRes
MOVX A,@DPTR
JNZ ??initNV_10
// 340 {
// 341 pgRes = pg;
MOV A,R6
MOVX @DPTR,A
SJMP ??initNV_11
// 342 }
// 343 else
// 344 {
// 345 setPageUse( pg, TRUE );
??initNV_10:
; Setup parameters for call to function setPageUse
MOV R2,#0x1
MOV A,R6
MOV R1,A
MOV DPTR,#(??setPageUse & 0xffff)
MOV A,#((??setPageUse >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
SJMP ??initNV_11
// 346 }
// 347 }
// 348 else // Page is active.
// 349 {
// 350 // If the page is not yet in use, it is the tgt of items from an xfer.
// 351 if ( pgHdr.inUse == OSAL_NV_ERASED_ID )
??initNV_9:
MOV A,#0x2
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
XRL A,#0xff
JNZ ??initNV_12
INC DPTR
MOVX A,@DPTR
XRL A,#0xff
??initNV_12:
JNZ ??initNV_13
// 352 {
// 353 newPg = pg;
MOV A,R6
MOV R7,A
SJMP ??initNV_11
// 354 }
// 355 // An Xfer from this page was in progress.
// 356 else if ( pgHdr.xfer != OSAL_NV_ERASED_ID )
??initNV_13:
MOV A,#0x4
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
XRL A,#0xff
JNZ ??initNV_14
INC DPTR
MOVX A,@DPTR
XRL A,#0xff
??initNV_14:
JZ ??initNV_11
// 357 {
// 358 oldPg = pg;
MOV ?V0 + 1,R6
// 359 }
// 360 }
// 361
// 362 // Calculate page offset and lost bytes.
// 363 initPage( pg, OSAL_NV_ITEM_NULL );
??initNV_11:
; Setup parameters for call to function initPage
MOV R2,#0x0
MOV R3,#0x0
MOV A,R6
MOV R1,A
MOV DPTR,#(??initPage & 0xffff)
MOV A,#((??initPage >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 364
// 365 readHdr( pg, OSAL_NV_IEEE_OFFSET, (uint8 *)(&pgHdr) );
; Setup parameters for call to function readHdr
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOV R4,DPL
MOV R5,DPH
MOV R2,#-0x8
MOV R3,#0x7
MOV A,R6
MOV R1,A
MOV DPTR,#(??readHdr & 0xffff)
MOV A,#((??readHdr >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 366 if ( xBad )
MOV A,?V0 + 0
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
JZ ??initNV_15
// 367 {
// 368 /* TBD - For the cost of more code space, the IEEE could be checksummed & then tested here
// 369 * before installing to the erased IEEE on page 63.
// 370 */
// 371 if ( (pgHdr.active != OSAL_NV_ERASED_ID) ||
// 372 (pgHdr.inUse != OSAL_NV_ERASED_ID) ||
// 373 (pgHdr.xfer != OSAL_NV_ERASED_ID) ||
// 374 (pgHdr.spare != OSAL_NV_ERASED_ID) )
MOVX A,@DPTR
XRL A,#0xff
JNZ ??initNV_16
INC DPTR
MOVX A,@DPTR
XRL A,#0xff
??initNV_16:
JNZ ??initNV_17
MOV A,#0x2
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
XRL A,#0xff
JNZ ??initNV_18
INC DPTR
MOVX A,@DPTR
XRL A,#0xff
??initNV_18:
JNZ ??initNV_17
MOV A,#0x4
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
XRL A,#0xff
JNZ ??initNV_19
INC DPTR
MOVX A,@DPTR
XRL A,#0xff
??initNV_19:
JNZ ??initNV_17
MOV A,#0x6
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
XRL A,#0xff
JNZ ??initNV_20
INC DPTR
MOVX A,@DPTR
XRL A,#0xff
??initNV_20:
JZ ??initNV_21
// 375 {
// 376 writeWordD( OSAL_NV_IEEE_PAGE, OSAL_NV_IEEE_OFFSET, (uint8 *)(&pgHdr) );
??initNV_17:
; Setup parameters for call to function writeWordD
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOV R4,DPL
MOV R5,DPH
MOV R2,#-0x8
MOV R3,#0x7
MOV R1,#0x3f
MOV DPTR,#(??writeWordD & 0xffff)
MOV A,#((??writeWordD >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 377 xBad = FALSE;
MOV ?V0 + 0,#0x0
SJMP ??initNV_21
// 378 }
// 379 }
// 380 else
// 381 {
// 382 if ( (pgHdr.active == OSAL_NV_ERASED_ID) &&
// 383 (pgHdr.inUse == OSAL_NV_ERASED_ID) &&
// 384 (pgHdr.xfer == OSAL_NV_ERASED_ID) &&
// 385 (pgHdr.spare == OSAL_NV_ERASED_ID) )
??initNV_15:
MOVX A,@DPTR
XRL A,#0xff
JNZ ??initNV_22
INC DPTR
MOVX A,@DPTR
XRL A,#0xff
??initNV_22:
JNZ ??initNV_21
MOV A,#0x2
LCALL ?XSTACK_DISP0_8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -