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

📄 osal_pwrmgr.s51

📁 CC2431无线定位程序非常有参考价值
💻 S51
📖 第 1 页 / 共 2 页
字号:
//   71 
//   72 /*********************************************************************
//   73  * @fn      osal_pwrmgr_init
//   74  *
//   75  * @brief   Initialize the power management system.
//   76  *
//   77  * @param   none.
//   78  *
//   79  * @return  none.
//   80  */

        RSEG BANKED_CODE:CODE:NOROOT(0)
//   81 void osal_pwrmgr_init( void )
osal_pwrmgr_init:
        CFI Block cfiBlock0 Using cfiCommon0
        CFI Function osal_pwrmgr_init
//   82 {
        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
//   83   pwrmgr_attribute.pwrmgr_device = PWRMGR_ALWAYS_ON; // Default to no power conservation.
        CLR	A
        MOV	DPTR,#(pwrmgr_attribute + 6)
        MOVX	@DPTR,A
//   84   pwrmgr_attribute.pwrmgr_task_state = 0;            // Cleared.  All set to conserve
        MOV	DPTR,#pwrmgr_attribute
        MOVX	@DPTR,A
        INC	DPTR
        CFI EndBlock cfiBlock0
        REQUIRE ?Subroutine0
        ; // Fall through to label ?Subroutine0
//   85 }

        RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine0:
        CFI Block cfiBlock1 Using cfiCommon0
        CFI NoFunction
        CFI CFA_SP SP+-5
        CFI DPL0 Frame(CFA_SP, 4)
        CFI DPH0 Frame(CFA_SP, 5)
        MOVX	@DPTR,A
        POP	DPH
        CFI CFA_SP SP+-4
        CFI DPH0 SameValue
        POP	DPL
        CFI CFA_SP SP+-3
        CFI DPL0 SameValue
        LJMP	?BRET
        CFI EndBlock cfiBlock1
//   86 
//   87 /*********************************************************************
//   88  * @fn      osal_pwrmgr_device
//   89  *
//   90  * @brief   Sets the device power characteristic.
//   91  *
//   92  * @param   pwrmgr_device - type of power devices. With PWRMGR_ALWAYS_ON
//   93  *          selection, there is no power savings and the device is most
//   94  *          likely on mains power. The PWRMGR_BATTERY selection allows the
//   95  *          HAL sleep manager to enter sleep.
//   96  *
//   97  * @return  none
//   98  */

        RSEG BANKED_CODE:CODE:NOROOT(0)
//   99 void osal_pwrmgr_device( uint8 pwrmgr_device )
osal_pwrmgr_device:
        CFI Block cfiBlock2 Using cfiCommon0
        CFI Function osal_pwrmgr_device
//  100 {
        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
//  101   pwrmgr_attribute.pwrmgr_device = pwrmgr_device;
        MOV	A,R1
        MOV	DPTR,#(pwrmgr_attribute + 6)
        SJMP	?Subroutine0
        CFI EndBlock cfiBlock2
//  102 }
//  103 
//  104 /*********************************************************************
//  105  * @fn      osal_pwrmgr_task_state
//  106  *
//  107  * @brief   This function is called by each task to state whether or
//  108  *          not this task wants to conserve power.
//  109  *
//  110  * @param   task_id - calling task ID.
//  111  *          state - whether the calling task wants to
//  112  *          conserve power or not.
//  113  *
//  114  * @return  ZSUCCESS if task complete
//  115  */

        RSEG BANKED_CODE:CODE:NOROOT(0)
//  116 uint8 osal_pwrmgr_task_state( uint8 task_id, uint8 state )
osal_pwrmgr_task_state:
        CFI Block cfiBlock3 Using cfiCommon0
        CFI Function osal_pwrmgr_task_state
//  117 {
        FUNCALL osal_pwrmgr_task_state, osalFindTask
        LOCFRAME XSTACK, 10, STACK
        ARGFRAME XSTACK, 10, 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: 0
        MOV	A,R1
        MOV	R6,A
        MOV	A,R2
        MOV	R7,A
//  118   if ( osalFindTask( task_id ) == NULL )
        ; Setup parameters for call to function osalFindTask
        MOV	DPTR,#(osalFindTask & 0xffff)
        MOV	A,#((osalFindTask >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
        MOV	A,R2
        JNZ	??osal_pwrmgr_task_state_0
        MOV	A,R3
??osal_pwrmgr_task_state_0:
        JNZ	??osal_pwrmgr_task_state_1
//  119     return ( INVALID_TASK );
        MOV	R1,#0x1
        SJMP	??osal_pwrmgr_task_state_2
//  120 
//  121   if ( state == PWRMGR_CONSERVE )
??osal_pwrmgr_task_state_1:
        MOV	A,R7
        MOV	?V0 + 0,#0x1
        MOV	?V0 + 1,#0x0
        JNZ	??osal_pwrmgr_task_state_3
//  122   {
//  123     // Clear the task state flag
//  124     pwrmgr_attribute.pwrmgr_task_state &= ~(1 << task_id );
        MOV	A,R6
        MOV	R0,#?V0 + 0
        LCALL	?S_SHL
        MOV	A,?V0 + 0
        CPL	A
        MOV	R0,A
        MOV	A,?V0 + 1
        CPL	A
        MOV	R1,A
        MOV	DPTR,#pwrmgr_attribute
        MOVX	A,@DPTR
        ANL	A,R0
        MOVX	@DPTR,A
        INC	DPTR
        MOVX	A,@DPTR
        ANL	A,R1
        SJMP	??osal_pwrmgr_task_state_4
//  125   }
//  126   else
//  127   {
//  128     // Set the task state flag
//  129     pwrmgr_attribute.pwrmgr_task_state |= (1 << task_id);
??osal_pwrmgr_task_state_3:
        MOV	A,R6
        MOV	R0,#?V0 + 0
        LCALL	?S_SHL
        MOV	DPTR,#pwrmgr_attribute
        MOVX	A,@DPTR
        ORL	A,?V0 + 0
        MOVX	@DPTR,A
        INC	DPTR
        MOVX	A,@DPTR
        ORL	A,?V0 + 1
??osal_pwrmgr_task_state_4:
        MOVX	@DPTR,A
//  130   }
//  131 
//  132   return ( ZSUCCESS );
        MOV	R1,#0x0
        CFI EndBlock cfiBlock3
??osal_pwrmgr_task_state_2:
        REQUIRE ?Subroutine1
        ; // Fall through to label ?Subroutine1
//  133 }

        RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine1:
        CFI Block cfiBlock4 Using cfiCommon0
        CFI NoFunction
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 10)
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-9)))
        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(-10)))
        CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        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)))
        MOV	R7,#0x2
        LJMP	?BANKED_LEAVE_XDATA
        CFI EndBlock cfiBlock4
//  134 
//  135 #if defined( POWER_SAVING )
//  136 /*********************************************************************
//  137  * @fn      osal_pwrmgr_powerconserve
//  138  *
//  139  * @brief   This function is called from the main OSAL loop when there are
//  140  *          no events scheduled and shouldn't be called from anywhere else.
//  141  *
//  142  * @param   none.
//  143  *
//  144  * @return  none.
//  145  */

        RSEG BANKED_CODE:CODE:NOROOT(0)
//  146 void osal_pwrmgr_powerconserve( void )
osal_pwrmgr_powerconserve:
        CFI Block cfiBlock5 Using cfiCommon0
        CFI Function osal_pwrmgr_powerconserve
//  147 {
        FUNCALL osal_pwrmgr_powerconserve, osal_next_timeout
        LOCFRAME XSTACK, 10, STACK
        ARGFRAME XSTACK, 10, STACK
        FUNCALL osal_pwrmgr_powerconserve, halSleep
        LOCFRAME XSTACK, 10, STACK
        ARGFRAME XSTACK, 10, 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: 0
//  148   uint16        next;
//  149   halIntState_t intState;
//  150 
//  151   // Should we even look into power conservation
//  152   if ( pwrmgr_attribute.pwrmgr_device != PWRMGR_ALWAYS_ON )
        MOV	DPTR,#(pwrmgr_attribute + 6)
        MOVX	A,@DPTR
        JZ	??osal_pwrmgr_powerconserve_0
//  153   {
//  154     // Are all tasks in agreement to conserve
//  155     if ( pwrmgr_attribute.pwrmgr_task_state == 0 )
        MOV	DPTR,#pwrmgr_attribute
        MOVX	A,@DPTR
        JNZ	??osal_pwrmgr_powerconserve_1
        INC	DPTR
        MOVX	A,@DPTR
??osal_pwrmgr_powerconserve_1:
        JNZ	??osal_pwrmgr_powerconserve_0
//  156     {
//  157       // Hold off interrupts.
//  158       HAL_ENTER_CRITICAL_SECTION( intState );
        MOV	C,0xa8.7
        CLR	A
        MOV	0xE0 /* A   */.0,C
        MOV	R6,A
        CLR	0xa8.7
//  159 
//  160       // Get next time-out
//  161       next = osal_next_timeout();
        ; Setup parameters for call to function osal_next_timeout
        MOV	DPTR,#(osal_next_timeout & 0xffff)
        MOV	A,#((osal_next_timeout >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  162 
//  163       // Re-enable interrupts.
//  164       HAL_EXIT_CRITICAL_SECTION( intState );
        MOV	A,R6
        MOV	C,0xE0 /* A   */.0
        MOV	0xa8.7,C
//  165 
//  166       // Put the processor into sleep mode
//  167       OSAL_SET_CPU_INTO_SLEEP( next );
        ; Setup parameters for call to function halSleep
        MOV	DPTR,#(halSleep & 0xffff)
        MOV	A,#((halSleep >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  168     }
//  169   }
//  170 }
??osal_pwrmgr_powerconserve_0:
        SJMP	?Subroutine1
        CFI EndBlock cfiBlock5

        ASEGN SFR_AN:DATA:NOROOT,0a8H
// union <unnamed> volatile __sfr _A_IEN0
_A_IEN0:
        DS 1

        END
//  171 #endif /* POWER_SAVING */
//  172 
//  173 /*********************************************************************
//  174 *********************************************************************/
// 
// 170 bytes in segment BANKED_CODE
//   1 byte  in segment SFR_AN
//   7 bytes in segment XDATA_Z
// 
// 170 bytes of CODE  memory
//   0 bytes of DATA  memory (+ 1 byte shared)
//   7 bytes of XDATA memory
//
//Errors: none
//Warnings: none

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -