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

📄 stm32f10x_encoder.s79

📁 STM32利用正交编码器实现电机的控制
💻 S79
📖 第 1 页 / 共 2 页
字号:
        LDR.N    R2,??DataTable33  ;; TIM3
        LDR      R2,[R2, #+0]
        LDRH     R4,[R2, #+36]
        LDR.N    R2,??DataTable37  ;; hEncoder_Timer_Overflow
        MOVS     R3,#+0
        STRH     R3,[R2, #+0]
??ENC_Calc_Rot_Speed_6:
        LDR.N    R2,??ENC_Calc_Rot_Speed_4  ;; hPrevious_angle
        STRH     R4,[R2, #+0]
        LSLS     R0,R0,#+16       ;; SignExtS R0,R0,#+16,#+16
        ASRS     R0,R0,#+16
        POP      {R4-R6,PC}       ;; return
        DATA
??ENC_Calc_Rot_Speed_4:
        DC32     hPrevious_angle

        RSEG CODE:CODE:NOROOT(2)
        DATA
??DataTable21:
        DC32     bIs_First_Measurement

        RSEG CODE:CODE:NOROOT(2)
        THUMB
ENC_Calc_Average_Speed:
        PUSH     {LR}
        BL       ENC_Calc_Rot_Speed
        LDR.N    R1,??ENC_Calc_Average_Speed_0  ;; bSpeed_Buffer_Index
        LDRB     R1,[R1, #+0]
        MOVS     R2,#+2
        MULS     R1,R2,R1
        LDR.N    R2,??DataTable28  ;; hSpeed_Buffer
        STRH     R0,[R2, R1]
        LDR.N    R0,??ENC_Calc_Average_Speed_0  ;; bSpeed_Buffer_Index
        LDR.N    R1,??ENC_Calc_Average_Speed_0  ;; bSpeed_Buffer_Index
        LDRB     R1,[R1, #+0]
        ADDS     R1,R1,#+1
        STRB     R1,[R0, #+0]
        LDR.N    R0,??ENC_Calc_Average_Speed_0  ;; bSpeed_Buffer_Index
        LDRB     R0,[R0, #+0]
        CMP      R0,#+8
        BNE.N    ??ENC_Calc_Average_Speed_1
        LDR.N    R0,??ENC_Calc_Average_Speed_0  ;; bSpeed_Buffer_Index
        MOVS     R1,#+0
        STRB     R1,[R0, #+0]
??ENC_Calc_Average_Speed_1:
        MOVS     R0,#+0
        MOVS     R1,#+0
        B.N      ??ENC_Calc_Average_Speed_2
??ENC_Calc_Average_Speed_3:
        MOVS     R2,#+2
        MULS     R2,R1,R2
        LDR.N    R3,??DataTable28  ;; hSpeed_Buffer
        LDRSH    R2,[R3, R2]
        ADDS     R0,R0,R2
        ADDS     R1,R1,#+1
??ENC_Calc_Average_Speed_2:
        CMP      R1,#+8
        BCC.N    ??ENC_Calc_Average_Speed_3
        MOVS     R1,#+8
        SDIV     R0,R0,R1
        LDR.N    R1,??DataTable32  ;; hRot_Speed
        STRH     R0,[R1, #+0]
        POP      {PC}             ;; return
        DATA
??ENC_Calc_Average_Speed_0:
        DC32     bSpeed_Buffer_Index

        RSEG CODE:CODE:NOROOT(2)
        DATA
??DataTable28:
        DC32     hSpeed_Buffer

        RSEG CODE:CODE:NOROOT(2)
        THUMB
LCD_Display:
        PUSH     {R4,LR}
        CMP      R0,#+0
        BEQ.N    ??LCD_Display_0
        CMP      R0,#+1
        BEQ.N    ??LCD_Display_1
        B.N      ??LCD_Display_2
??LCD_Display_0:
        LDR.N    R0,??DataTable33  ;; TIM3
        LDR      R0,[R0, #+0]
        _BLF     TIM_GetCounter,??TIM_GetCounter??rT
        MOVS     R4,R0
        MOVS     R0,R4
        LSLS     R0,R0,#+16       ;; ZeroExtS R0,R0,#+16,#+16
        LSRS     R0,R0,#+16
        _BLF     int2char,??int2char??rT
        _BLF     write_string,??write_string??rT
        B.N      ??LCD_Display_3
??LCD_Display_1:
        BL       ENC_Get_Electrical_Angle
        MOVS     R1,#+360
        MULS     R0,R1,R0
        LDR.N    R1,??DataTable35  ;; 0xffff
        SDIV     R4,R0,R1
        LSLS     R4,R4,#+16       ;; SignExtS R4,R4,#+16,#+16
        ASRS     R4,R4,#+16
        CMP      R4,#+0
        BPL.N    ??LCD_Display_4
        LSLS     R4,R4,#+16       ;; SignExtS R4,R4,#+16,#+16
        ASRS     R4,R4,#+16
        MOVS     R0,R4
        RSBS     R4,R0,#+0
        MOVS     R0,R4
        LSLS     R0,R0,#+16       ;; ZeroExtS R0,R0,#+16,#+16
        LSRS     R0,R0,#+16
        _BLF     int2char,??int2char??rT
        MOVS     R1,#+45
        STRB     R1,[R0, #+0]
        B.N      ??LCD_Display_5
??LCD_Display_4:
        MOVS     R0,R4
        LSLS     R0,R0,#+16       ;; ZeroExtS R0,R0,#+16,#+16
        LSRS     R0,R0,#+16
        _BLF     int2char,??int2char??rT
        LSLS     R4,R4,#+16       ;; ZeroExtS R4,R4,#+16,#+16
        LSRS     R4,R4,#+16
        CMP      R4,#+0
        BEQ.N    ??LCD_Display_5
        MOVS     R1,#+43
        STRB     R1,[R0, #+0]
??LCD_Display_5:
        _BLF     write_string,??write_string??rT
        B.N      ??LCD_Display_3
??LCD_Display_2:
        LDR.N    R0,??DataTable32  ;; hRot_Speed
        LDRSH    R4,[R0, #+0]
        CMP      R4,#+0
        BPL.N    ??LCD_Display_6
        MOVS     R0,R4
        RSBS     R4,R0,#+0
        MOVS     R0,R4
        LSLS     R0,R0,#+16       ;; ZeroExtS R0,R0,#+16,#+16
        LSRS     R0,R0,#+16
        _BLF     int2char,??int2char??rT
        MOVS     R1,#+45
        STRB     R1,[R0, #+0]
        B.N      ??LCD_Display_7
??LCD_Display_6:
        MOVS     R0,R4
        LSLS     R0,R0,#+16       ;; ZeroExtS R0,R0,#+16,#+16
        LSRS     R0,R0,#+16
        _BLF     int2char,??int2char??rT
        LSLS     R4,R4,#+16       ;; ZeroExtS R4,R4,#+16,#+16
        LSRS     R4,R4,#+16
        CMP      R4,#+0
        BEQ.N    ??LCD_Display_7
        MOVS     R1,#+43
        STRB     R1,[R0, #+0]
??LCD_Display_7:
        _BLF     write_string,??write_string??rT
??LCD_Display_3:
        POP      {R4,PC}          ;; return

        RSEG CODE:CODE:NOROOT(2)
        DATA
??DataTable32:
        DC32     hRot_Speed

        RSEG CODE:CODE:NOROOT(2)
        THUMB
TIM3_IRQHandler:
        PUSH     {LR}
        MOVS     R1,#+1
        LDR.N    R0,??DataTable33  ;; TIM3
        LDR      R0,[R0, #+0]
        _BLF     TIM_ClearFlag,??TIM_ClearFlag??rT
        LDR.N    R0,??DataTable37  ;; hEncoder_Timer_Overflow
        LDRH     R0,[R0, #+0]
        LDR.N    R1,??DataTable35  ;; 0xffff
        CMP      R0,R1
        BEQ.N    ??TIM3_IRQHandler_0
        LDR.N    R0,??DataTable37  ;; hEncoder_Timer_Overflow
        LDR.N    R1,??DataTable37  ;; hEncoder_Timer_Overflow
        LDRH     R1,[R1, #+0]
        ADDS     R1,R1,#+1
        STRH     R1,[R0, #+0]
??TIM3_IRQHandler_0:
        POP      {PC}             ;; return

        RSEG CODE:CODE:NOROOT(2)
        DATA
??DataTable33:
        DC32     TIM3

        RSEG CODE:CODE:NOROOT(2)
        DATA
??DataTable35:
        DC32     0xffff

        RSEG CODE:CODE:NOROOT(2)
        DATA
??DataTable37:
        DC32     hEncoder_Timer_Overflow

        RSEG CODE:CODE:NOROOT(2)
        THUMB
??RCC_APB1PeriphClockCmd??rT:
        LDR.N    R3,??Subroutine0_0  ;; RCC_APB1PeriphClockCmd
        BX       R3
        DATA
??Subroutine0_0:
        DC32     RCC_APB1PeriphClockCmd

        RSEG CODE:CODE:NOROOT(2)
        THUMB
??RCC_APB2PeriphClockCmd??rT:
        LDR.N    R3,??Subroutine1_0  ;; RCC_APB2PeriphClockCmd
        BX       R3
        DATA
??Subroutine1_0:
        DC32     RCC_APB2PeriphClockCmd

        RSEG CODE:CODE:NOROOT(2)
        THUMB
??GPIO_StructInit??rT:
        LDR.N    R3,??Subroutine2_0  ;; GPIO_StructInit
        BX       R3
        DATA
??Subroutine2_0:
        DC32     GPIO_StructInit

        RSEG CODE:CODE:NOROOT(2)
        THUMB
??GPIO_Init??rT:
        LDR.N    R3,??Subroutine3_0  ;; GPIO_Init
        BX       R3
        DATA
??Subroutine3_0:
        DC32     GPIO_Init

        RSEG CODE:CODE:NOROOT(2)
        THUMB
??NVIC_Init??rT:
        LDR.N    R3,??Subroutine4_0  ;; NVIC_Init
        BX       R3
        DATA
??Subroutine4_0:
        DC32     NVIC_Init

        RSEG CODE:CODE:NOROOT(2)
        THUMB
??TIM_DeInit??rT:
        LDR.N    R3,??Subroutine5_0  ;; TIM_DeInit
        BX       R3
        DATA
??Subroutine5_0:
        DC32     TIM_DeInit

        RSEG CODE:CODE:NOROOT(2)
        THUMB
??TIM_TimeBaseStructInit??rT:
        LDR.N    R3,??Subroutine6_0  ;; TIM_TimeBaseStructInit
        BX       R3
        DATA
??Subroutine6_0:
        DC32     TIM_TimeBaseStructInit

        RSEG CODE:CODE:NOROOT(2)
        THUMB
??TIM_TimeBaseInit??rT:
        LDR.N    R3,??Subroutine7_0  ;; TIM_TimeBaseInit
        BX       R3
        DATA
??Subroutine7_0:
        DC32     TIM_TimeBaseInit

        RSEG CODE:CODE:NOROOT(2)
        THUMB
??TIM_EncoderInterfaceConfig??rT:
        PUSH     {R3}
        LDR.N    R3,??Subroutine8_0  ;; TIM_EncoderInterfaceConfig
        MOV      R12,R3
        POP      {R3}
        BX       R12
        Nop      
        DATA
??Subroutine8_0:
        DC32     TIM_EncoderInterfaceConfig

        RSEG CODE:CODE:NOROOT(2)
        THUMB
??TIM_ICStructInit??rT:
        LDR.N    R3,??Subroutine9_0  ;; TIM_ICStructInit
        BX       R3
        DATA
??Subroutine9_0:
        DC32     TIM_ICStructInit

        RSEG CODE:CODE:NOROOT(2)
        THUMB
??TIM_ICInit??rT:
        LDR.N    R3,??Subroutine10_0  ;; TIM_ICInit
        BX       R3
        DATA
??Subroutine10_0:
        DC32     TIM_ICInit

        RSEG CODE:CODE:NOROOT(2)
        THUMB
??TIM_ClearFlag??rT:
        LDR.N    R3,??Subroutine11_0  ;; TIM_ClearFlag
        BX       R3
        DATA
??Subroutine11_0:
        DC32     TIM_ClearFlag

        RSEG CODE:CODE:NOROOT(2)
        THUMB
??TIM_ITConfig??rT:
        LDR.N    R3,??Subroutine12_0  ;; TIM_ITConfig
        BX       R3
        DATA
??Subroutine12_0:
        DC32     TIM_ITConfig

        RSEG CODE:CODE:NOROOT(2)
        THUMB
??TIM_Cmd??rT:
        LDR.N    R3,??Subroutine13_0  ;; TIM_Cmd
        BX       R3
        DATA
??Subroutine13_0:
        DC32     TIM_Cmd

        RSEG CODE:CODE:NOROOT(2)
        THUMB
??TIM_GetCounter??rT:
        LDR.N    R3,??Subroutine14_0  ;; TIM_GetCounter
        BX       R3
        DATA
??Subroutine14_0:
        DC32     TIM_GetCounter

        RSEG CODE:CODE:NOROOT(2)
        THUMB
??rT??llmul_t:
        PUSH     {R3}
        LDR.N    R3,??Subroutine15_0  ;; ??llmul_t
        MOV      R12,R3
        POP      {R3}
        BX       R12
        Nop      
        DATA
??Subroutine15_0:
        DC32     ??llmul_t

        RSEG CODE:CODE:NOROOT(2)
        THUMB
??rT??div64_t:
        PUSH     {R3}
        LDR.N    R3,??Subroutine16_0  ;; ??div64_t
        MOV      R12,R3
        POP      {R3}
        BX       R12
        Nop      
        DATA
??Subroutine16_0:
        DC32     ??div64_t

        RSEG CODE:CODE:NOROOT(2)
        THUMB
??int2char??rT:
        LDR.N    R3,??Subroutine17_0  ;; int2char
        BX       R3
        DATA
??Subroutine17_0:
        DC32     int2char

        RSEG CODE:CODE:NOROOT(2)
        THUMB
??write_string??rT:
        LDR.N    R3,??Subroutine18_0  ;; write_string
        BX       R3
        DATA
??Subroutine18_0:
        DC32     write_string

        RSEG DATA_ID:CONST:SORT:NOROOT(0)
`?<Initializer for bIs_First_Measurement>`:
        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
// 
// 990 bytes in segment CODE
//   1 byte  in segment DATA_I
//   1 byte  in segment DATA_ID
//  23 bytes in segment DATA_Z
//  24 bytes in segment INITTAB
// 
// 814 bytes of CODE  memory (+ 200 bytes shared)
//   1 byte  of CONST memory
//  24 bytes of DATA  memory
//
//Errors: none
//Warnings: none

⌨️ 快捷键说明

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