⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 osal_nv.s51

📁 用IAR开发的ZIGBEE网络路由例子
💻 S51
📖 第 1 页 / 共 5 页
字号:
//  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 + -