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

📄 osal_pwrmgr.s51

📁 cc2430应用实例
💻 S51
📖 第 1 页 / 共 2 页
字号:
//   38  */
//   39 
//   40 /*********************************************************************
//   41  * TYPEDEFS
//   42  */
//   43 
//   44 /*********************************************************************
//   45  * GLOBAL VARIABLES
//   46  */
//   47 
//   48 /* This global variable stores the power management attributes.
//   49  */

        RSEG XDATA_Z:XDATA:NOROOT(0)
        REQUIRE __INIT_XDATA_Z
//   50 pwrmgr_attribute_t pwrmgr_attribute;
pwrmgr_attribute:
        DS 7
//   51 
//   52 /*********************************************************************
//   53  * EXTERNAL VARIABLES
//   54  */
//   55 
//   56 /*********************************************************************
//   57  * EXTERNAL FUNCTIONS
//   58  */
//   59 
//   60 /*********************************************************************
//   61  * LOCAL VARIABLES
//   62  */
//   63 
//   64 /*********************************************************************
//   65  * LOCAL FUNCTION PROTOTYPES
//   66  */
//   67 
//   68 /*********************************************************************
//   69  * FUNCTIONS
//   70  *********************************************************************/
//   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
??osal_pwrmgr_task_state_2:
        MOV	R7,#0x2
        LJMP	?BANKED_LEAVE_XDATA
        CFI EndBlock cfiBlock3
//  133 }

        END
//  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  */
//  146 void osal_pwrmgr_powerconserve( void )
//  147 {
//  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 )
//  153   {
//  154     // Are all tasks in agreement to conserve
//  155     if ( pwrmgr_attribute.pwrmgr_task_state == 0 )
//  156     {
//  157       // Hold off interrupts.
//  158       HAL_ENTER_CRITICAL_SECTION( intState );
//  159 
//  160       // Get next time-out
//  161       next = osal_next_timeout();
//  162 
//  163       // Re-enable interrupts.
//  164       HAL_EXIT_CRITICAL_SECTION( intState );
//  165 
//  166       // Put the processor into sleep mode
//  167       OSAL_SET_CPU_INTO_SLEEP( next );
//  168     }
//  169   }
//  170 }
//  171 #endif /* POWER_SAVING */
//  172 
//  173 /*********************************************************************
//  174 *********************************************************************/
// 
// 118 bytes in segment BANKED_CODE
//   7 bytes in segment XDATA_Z
// 
// 118 bytes of CODE  memory
//   7 bytes of XDATA memory
//
//Errors: none
//Warnings: none

⌨️ 快捷键说明

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