📄 osal_pwrmgr.s51
字号:
// 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 + -