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

📄 usb_pwr.s79

📁 用于监视I2C通信总线
💻 S79
📖 第 1 页 / 共 2 页
字号:
        LDR      R1,[R0, #+0]
        UXTH     R1,R1
//  110   wCNTR |= CNTR_FSUSP;
//  111   _SetCNTR(wCNTR);
        ORRS     R1,R1,#0x8
        STR      R1,[R0, #+0]
//  112 
//  113   /* ------------------ ONLY WITH BUS-POWERED DEVICES ---------------------- */
//  114   /* power reduction */
//  115   /* ... on connected devices */
//  116 
//  117 
//  118   /* force low-power mode in the macrocell */
//  119   wCNTR = _GetCNTR();
        LDR      R1,[R0, #+0]
        UXTH     R1,R1
//  120   wCNTR |= CNTR_LPMODE;
//  121   _SetCNTR(wCNTR);
        ORRS     R1,R1,#0x4
        STR      R1,[R0, #+0]
//  122 
//  123   /* switch-off the clocks */
//  124   /* ... */
//  125   Enter_LowPowerMode();
        _BF.W    Enter_LowPowerMode,??Enter_LowPowerMode??rT
        CFI EndBlock cfiBlock2
//  126 
//  127 }
//  128 
//  129 /*******************************************************************************
//  130 * Function Name  : Resume_Init
//  131 * Description    : Handles wake-up restoring normal operations
//  132 * Input          : None.
//  133 * Output         : None.
//  134 * Return         : USB_SUCCESS.
//  135 *******************************************************************************/

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock3 Using cfiCommon0
        CFI Function Resume_Init
        THUMB
//  136 void Resume_Init(void)
//  137 {
//  138   u16 wCNTR;
//  139   /* ------------------ ONLY WITH BUS-POWERED DEVICES ---------------------- */
//  140   /* restart the clocks */
//  141   /* ...  */
//  142 
//  143   /* CNTR_LPMODE = 0 */
//  144   wCNTR = _GetCNTR();
//  145   wCNTR &= (~CNTR_LPMODE);
//  146   _SetCNTR(wCNTR);
Resume_Init:
        LDR.N    R1,??Resume_Init_0  ;; 0xfffb
        PUSH     {R4,LR}
        CFI ?RET Frame(CFA, -4)
        CFI R4 Frame(CFA, -8)
        CFI CFA R13+8
        LDR.N    R4,??DataTable6  ;; 0x40005c40
        LDR      R0,[R4, #+0]
        ANDS     R1,R1,R0
        STR      R1,[R4, #+0]
//  147 
//  148   /* restore full power */
//  149   /* ... on connected devices */
//  150   Leave_LowPowerMode();
        _BLF     Leave_LowPowerMode,??Leave_LowPowerMode??rT
//  151 
//  152   /* reset FSUSP bit */
//  153   _SetCNTR(IMR_MSK);
        MOVS     R0,#+34304
        STR      R0,[R4, #+0]
//  154 
//  155   /* reverse suspend preparation */
//  156   /* ... */
//  157 
//  158 }
        POP      {R4,PC}          ;; return
        DATA
??Resume_Init_0:
        DC32     0xfffb
        CFI EndBlock cfiBlock3
//  159 
//  160 /*******************************************************************************
//  161 * Function Name  : Resume
//  162 * Description    : This is the state machine handling resume operations and
//  163 *                 timing sequence. The control is based on the Resume structure
//  164 *                 variables and on the ESOF interrupt calling this subroutine
//  165 *                 without changing machine state.
//  166 * Input          : a state machine value (RESUME_STATE)
//  167 *                  RESUME_ESOF doesn't change ResumeS.eState allowing
//  168 *                  decrementing of the ESOF counter in different states.
//  169 * Output         : None.
//  170 * Return         : None.
//  171 *******************************************************************************/

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock4 Using cfiCommon0
        CFI Function Resume
        THUMB
//  172 void Resume(RESUME_STATE eResumeSetVal)
//  173 {
Resume:
        PUSH     {R4-R6,LR}
        CFI ?RET Frame(CFA, -4)
        CFI R6 Frame(CFA, -8)
        CFI R5 Frame(CFA, -12)
        CFI R4 Frame(CFA, -16)
        CFI CFA R13+16
//  174   u16 wCNTR;
//  175 
//  176   if (eResumeSetVal != RESUME_ESOF)
        LDR.N    R4,??Resume_1    ;; ResumeS
        CMP      R0,#+7
        IT      NE 
//  177     ResumeS.eState = eResumeSetVal;
        STRBNE   R0,[R4, #+0]
//  178 
//  179   switch (ResumeS.eState)
        LDR.N    R0,??DataTable6  ;; 0x40005c40
        LDRB     R1,[R4, #+0]
        MOVS     R6,#+4
        MOVS     R5,#+6
        CMP      R1,#+5
        BHI.N    ??Resume_2
        TBB      [PC, R1]
        DATA
??Resume_0:
        DC8      +3,+6,+9,+14
        DC8      +21,+31
        THUMB
//  180   {
//  181     case RESUME_EXTERNAL:
//  182       Resume_Init();
??Resume_3:
        BL       Resume_Init
//  183       ResumeS.eState = RESUME_OFF;
        B.N      ??Resume_4
//  184       break;
//  185     case RESUME_INTERNAL:
//  186       Resume_Init();
??Resume_5:
        BL       Resume_Init
//  187       ResumeS.eState = RESUME_START;
        B.N      ??Resume_6
//  188       break;
//  189     case RESUME_LATER:
//  190       ResumeS.bESOFcnt = 2;
??Resume_7:
        MOVS     R0,#+2
        STRB     R0,[R4, #+1]
//  191       ResumeS.eState = RESUME_WAIT;
        MOVS     R0,#+3
        STRB     R0,[R4, #+0]
        POP      {R4-R6,PC}
//  192       break;
//  193     case RESUME_WAIT:
//  194       ResumeS.bESOFcnt--;
??Resume_8:
        LDRB     R0,[R4, #+1]
        SUBS     R0,R0,#+1
        STRB     R0,[R4, #+1]
//  195       if (ResumeS.bESOFcnt == 0)
        LDRB     R0,[R4, #+1]
        CBNZ     R0,??Resume_9
//  196         ResumeS.eState = RESUME_START;
??Resume_6:
        STRB     R6,[R4, #+0]
        POP      {R4-R6,PC}
//  197       break;
//  198     case RESUME_START:
//  199       wCNTR = _GetCNTR();
??Resume_10:
        LDR      R1,[R0, #+0]
        UXTH     R1,R1
//  200       wCNTR |= CNTR_RESUME;
//  201       _SetCNTR(wCNTR);
        ORRS     R1,R1,#0x10
        STR      R1,[R0, #+0]
//  202       ResumeS.eState = RESUME_ON;
        MOVS     R0,#+5
        STRB     R0,[R4, #+0]
//  203       ResumeS.bESOFcnt = 10;
        MOVS     R0,#+10
        STRB     R0,[R4, #+1]
        POP      {R4-R6,PC}
//  204       break;
//  205     case RESUME_ON:
//  206       ResumeS.bESOFcnt--;
??Resume_11:
        LDRB     R1,[R4, #+1]
        SUBS     R1,R1,#+1
        STRB     R1,[R4, #+1]
//  207       if (ResumeS.bESOFcnt == 0)
        LDRB     R1,[R4, #+1]
        CBNZ     R1,??Resume_9
//  208       {
//  209         wCNTR = _GetCNTR();
        LDR      R1,[R0, #+0]
//  210         wCNTR &= (~CNTR_RESUME);
//  211         _SetCNTR(wCNTR);
        LDR.N    R2,??Resume_1+0x4  ;; 0xffef
        ANDS     R2,R2,R1
        STR      R2,[R0, #+0]
//  212         ResumeS.eState = RESUME_OFF;
??Resume_4:
        STRB     R5,[R4, #+0]
        POP      {R4-R6,PC}
//  213       }
//  214       break;
//  215     case RESUME_OFF:
//  216     case RESUME_ESOF:
//  217     default:
//  218       ResumeS.eState = RESUME_OFF;
??Resume_2:
        STRB     R5,[R4, #+0]
//  219       break;
//  220   }
//  221 }
??Resume_9:
        POP      {R4-R6,PC}       ;; return
        Nop      
        DATA
??Resume_1:
        DC32     ResumeS
        DC32     0xffef
        CFI EndBlock cfiBlock4

        RSEG CODE:CODE:NOROOT(2)
        DATA
??DataTable6:
        DC32     0x40005c40

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock5 Using cfiCommon0
        CFI NoFunction
        THUMB
??USB_Cable_Config??rT:
        LDR.N    R3,??Subroutine0_0  ;; USB_Cable_Config
        BX       R3
        DATA
??Subroutine0_0:
        DC32     USB_Cable_Config
        CFI EndBlock cfiBlock5

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock6 Using cfiCommon0
        CFI NoFunction
        THUMB
??Enter_LowPowerMode??rT:
        LDR.N    R3,??Subroutine1_0  ;; Enter_LowPowerMode
        BX       R3
        DATA
??Subroutine1_0:
        DC32     Enter_LowPowerMode
        CFI EndBlock cfiBlock6

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock7 Using cfiCommon0
        CFI NoFunction
        THUMB
??Leave_LowPowerMode??rT:
        LDR.N    R3,??Subroutine2_0  ;; Leave_LowPowerMode
        BX       R3
        DATA
??Subroutine2_0:
        DC32     Leave_LowPowerMode
        CFI EndBlock cfiBlock7

        RSEG DATA_ID:CONST:SORT:NOROOT(0)
`?<Initializer for fSuspendEnabled>`:
        DATA
        DC8 1

        RSEG DATA_ID:CONST:SORT:NOROOT(2)
`?*?DATA_ID`:

        RSEG INITTAB:CODE:ROOT(2)
        DATA
?init?tab?DATA_I:
        DCD      sfe(DATA_I) - sfb(DATA_I), sfb(DATA_I), sfb(DATA_ID)

        RSEG INITTAB:CODE:ROOT(2)
        DATA
?init?tab?DATA_Z:
        DCD      sfe(DATA_Z) - sfb(DATA_Z), sfb(DATA_Z), sfb(DATA_Z)

        END
//  222 
//  223 /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/
// 
// 278 bytes in segment CODE
//   1 byte  in segment DATA_I
//   1 byte  in segment DATA_ID
//   6 bytes in segment DATA_Z
//  24 bytes in segment INITTAB
// 
// 254 bytes of CODE  memory (+ 48 bytes shared)
//   1 byte  of CONST memory
//   7 bytes of DATA  memory
//
//Errors: none
//Warnings: none

⌨️ 快捷键说明

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