Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- seg000:08004480 SetPhaseTiming ; CODE XREF: sub_80049A0+23Ep
- seg000:08004480
- seg000:08004480 var_18 = -0x18
- seg000:08004480 arg_1C8 = 0x1C8
- seg000:08004480
- seg000:08004480 PUSH {R3-R7,LR}
- seg000:08004482 LDR R2, =0x20000228
- seg000:08004484 LDRB R0, [R2]
- seg000:08004486 STRB R0, [R2,#2]
- seg000:08004488 MOVS R0, #1
- seg000:0800448A STRB R0, [R2]
- seg000:0800448C LDRH R0, [R2,#0x14]
- seg000:0800448E MOV R3, R0
- seg000:08004490 B loc_800449E
- seg000:08004492 ; ---------------------------------------------------------------------------
- seg000:08004492
- /// Read some variables, e.g. (unconfirmed) motor power control/
- seg000:08004492 loc_8004492 ; CODE XREF: SetPhaseTiming+24j
- seg000:08004492 LDR R1, =0xFFFFEAAB
- seg000:08004494 ADDS R0, R0, R1
- seg000:08004496 LDRB R1, [R2]
- seg000:08004498 UXTH R0, R0
- seg000:0800449A ADDS R1, R1, #1
- seg000:0800449C STRB R1, [R2]
- seg000:0800449E
- seg000:0800449E loc_800449E ; CODE XREF: SetPhaseTiming+10j
- seg000:0800449E LDR R1, =0xFFFFEAAB
- seg000:080044A0 NEGS R1, R1
- seg000:080044A2 CMP R0, R1
- seg000:080044A4 BCS loc_8004492
- seg000:080044A6 LDRB R0, [R2]
- seg000:080044A8 CMP R0, #6
- seg000:080044AA BLS loc_80044B0
- seg000:080044AC MOVS R0, #6
- seg000:080044AE STRB R0, [R2]
- seg000:080044B0
- seg000:080044B0 loc_80044B0 ; CODE XREF: SetPhaseTiming+2Aj
- seg000:080044B0 LDR R0, =0x7FFF
- seg000:080044B2 STRH R3, [R2,#0x16]
- seg000:080044B4 CMP R3, R0
- seg000:080044B6 BLS loc_80044BC
- seg000:080044B8 ANDS R0, R3
- seg000:080044BA STRH R0, [R2,#0x16]
- seg000:080044BC
- seg000:080044BC loc_80044BC ; CODE XREF: SetPhaseTiming+36j
- seg000:080044BC LDR R1, =0x20000228
- seg000:080044BE LDR R2, =0xFFFFEAAB
- seg000:080044C0 LDRB R0, [R1]
- seg000:080044C2 NEGS R2, R2
- seg000:080044C4 LDRH R1, [R1,#0x16]
- seg000:080044C6 MULS R0, R2
- seg000:080044C8 CMP R0, R1
- seg000:080044CA BCC loc_80044D2
- seg000:080044CC SUBS R0, R0, R1
- seg000:080044CE UXTH R0, R0
- seg000:080044D0 B loc_80044D4
- seg000:080044D2 ; ---------------------------------------------------------------------------
- seg000:080044D2
- seg000:080044D2 loc_80044D2 ; CODE XREF: SetPhaseTiming+4Aj
- seg000:080044D2 MOVS R0, #0
- seg000:080044D4
- seg000:080044D4 loc_80044D4
- ////////// DO A BUNCH OF MATH ///////////////////
- ; CODE XREF: SetPhaseTiming+50j
- seg000:080044D4 BL sub_8003760
- seg000:080044D8 STR R0, [SP,#0x18+var_18]
- seg000:080044DA LDR R0, =0x20000228
- seg000:080044DC LDR R1, =0xFFFFEAAB
- seg000:080044DE LDRB R0, [R0]
- seg000:080044E0 NEGS R1, R1
- seg000:080044E2 MULS R0, R1
- seg000:080044E4 LDR R1, =0x20000228
- seg000:080044E6 LDRH R1, [R1,#0x16]
- seg000:080044E8 SUBS R1, R1, R0
- seg000:080044EA LDR R0, =0xFFFFEAAB
- seg000:080044EC NEGS R0, R0
- seg000:080044EE ADDS R0, R1, R0
- seg000:080044F0 UXTH R0, R0
- seg000:080044F2 BL sub_8003760
- seg000:080044F6 MOVS R2, #3
- seg000:080044F8 LDR R1, [SP,#0x18+var_18]
- seg000:080044FA LSLS R2, R2, #9
- seg000:080044FC MULS R1, R2
- seg000:080044FE LDR R3, =0x20000228
- seg000:08004500 MOVS R2, #0x12
- seg000:08004502 LDRSH R2, [R3,R2]
- seg000:08004504 LSRS R1, R1, #0x10
- seg000:08004506 LDR R3, =0x469
- seg000:08004508 MULS R1, R2
- seg000:0800450A MULS R1, R3
- seg000:0800450C MOVS R3, #0x600
- seg000:08004510 MULS R0, R3
- seg000:08004512 LSRS R0, R0, #0x10
- seg000:08004514 MULS R0, R2
- seg000:08004516 LDR R2, =0x469
- seg000:08004518 LSRS R1, R1, #0x14
- seg000:0800451A MULS R0, R2
- seg000:0800451C LDR R2, =0x20000228
- seg000:0800451E LSRS R0, R0, #0x14
- seg000:08004520 LDRB R2, [R2]
- seg000:08004522 STR R2, [SP,#0x18+var_18]
- seg000:08004524 MOVS R3, R2
- seg000:08004526 BL sub_8005D76
- seg000:0800452A LSLS R7, R0, #0x14
- seg000:0800452C ASRS R2, R1, #0x14
- seg000:0800452E ADDS R1, #0x24
- seg000:08004530 LDRB R0, [R0,#0x19]
- seg000:08004532 LSLS R5, R1, #1
- seg000:08004534 MOVS R4, #0x300
- seg000:08004538 MOV R6, R4
- seg000:0800453A MOV R5, R6
- seg000:0800453C B loc_80045C4
- seg000:0800453E ; ---------------------------------------------------------------------------
- seg000:0800453E ADDS R2, R1, R0
- seg000:08004540 LSLS R4, R2, #0xF
- seg000:08004542 MOVS R2, #0x600
- seg000:08004546 LSLS R3, R2, #0xF
- seg000:08004548 ADDS R3, R4, R3
- seg000:0800454A SUBS R1, R2, R1
- seg000:0800454C ASRS R6, R3, #0x10
- seg000:0800454E ADDS R2, R1, R0
- seg000:08004550 ASRS R5, R2, #1
- seg000:08004552 B loc_800456C
- seg000:08004554 ; ---------------------------------------------------------------------------
- seg000:08004554 SUBS R2, R1, R0
- seg000:08004556 MOVS R4, #3
- seg000:08004558 LSLS R3, R2, #0xF
- seg000:0800455A LSLS R4, R4, #9
- seg000:0800455C LSLS R2, R4, #0xF
- seg000:0800455E ADDS R3, R3, R2
- seg000:08004560 ASRS R6, R3, #0x10
- seg000:08004562 ADDS R3, R1, R0
- seg000:08004564 LSLS R3, R3, #0xF
- seg000:08004566 ADDS R2, R3, R2
- seg000:08004568 ASRS R5, R2, #0x10
- seg000:0800456A SUBS R1, R4, R1
- seg000:0800456C
- seg000:0800456C loc_800456C ; CODE XREF: SetPhaseTiming+D2j
- seg000:0800456C SUBS R0, R1, R0
- seg000:0800456E
- seg000:0800456E loc_800456E ; CODE XREF: SetPhaseTiming+10Aj
- seg000:0800456E ASRS R4, R0, #1
- seg000:08004570 B loc_80045C4
- seg000:08004572 ; ---------------------------------------------------------------------------
- seg000:08004572 MOVS R2, #0x600
- seg000:08004576 SUBS R2, R2, R1
- seg000:08004578 SUBS R3, R2, R0
- seg000:0800457A ASRS R6, R3, #1
- seg000:0800457C ADDS R1, R1, R0
- seg000:0800457E LSLS R3, R1, #0xF
- seg000:08004580 MOVS R1, #0x3000000
- seg000:08004584 ADDS R1, R3, R1
- seg000:08004586 ASRS R5, R1, #0x10
- seg000:08004588 ADDS R0, R2, R0
- seg000:0800458A B loc_800456E
- seg000:0800458C ; ---------------------------------------------------------------------------
- seg000:0800458C MOVS R2, #0x600
- seg000:08004590 SUBS R2, R2, R1
- seg000:08004592 SUBS R2, R2, R0
- seg000:08004594 ASRS R6, R2, #1
- seg000:08004596 SUBS R2, R1, R0
- seg000:08004598 LSLS R3, R2, #0xF
- seg000:0800459A MOVS R2, #0x3000000
- seg000:0800459E ADDS R3, R3, R2
- seg000:080045A0 ADDS R0, R1, R0
- seg000:080045A2 ASRS R5, R3, #0x10
- seg000:080045A4 LSLS R0, R0, #0xF
- seg000:080045A6 ADDS R0, R0, R2
- seg000:080045A8 B loc_80045C2
- seg000:080045AA ; ---------------------------------------------------------------------------
- seg000:080045AA MOVS R2, #0x600
- seg000:080045AE SUBS R2, R2, R1
- seg000:080045B0 ADDS R3, R2, R0
- seg000:080045B2 SUBS R2, R2, R0
- seg000:080045B4 ADDS R0, R1, R0
- seg000:080045B6 LSLS R1, R0, #0xF
- seg000:080045B8 MOVS R0, #3
- seg000:080045BA ASRS R6, R3, #1
- seg000:080045BC ASRS R5, R2, #1
- seg000:080045BE LSLS R0, R0, #0x18
- seg000:080045C0 ADDS R0, R1, R0
- seg000:080045C2
- seg000:080045C2 loc_80045C2 ; CODE XREF: SetPhaseTiming+128j
- seg000:080045C2 ; SetPhaseTiming+1C0j
- seg000:080045C2 ASRS R4, R0, #0x10
- seg000:080045C4
- seg000:080045C4 loc_80045C4 ; CODE XREF: SetPhaseTiming+BCj
- seg000:080045C4 ; SetPhaseTiming+F0j
- /////////// tidy up after math
- seg000:080045C4 LDR R0, =0x200000DE
- seg000:080045C6 LDRB R0, [R0]
- seg000:080045C8 LSLS R0, R0, #0x1D
- seg000:080045CA BMI loc_80045E0
- seg000:080045CC LDR R0, =0x20000228
- seg000:080045CE LDRH R1, [R0,#0x1E] ; 3 motor phase valuse
- seg000:080045D0 ADDS R1, R6, R1
- seg000:080045D2 SXTH R6, R1
- seg000:080045D4 LDRH R1, [R0,#0x20]
- seg000:080045D6 LDRH R0, [R0,#0x22]
- seg000:080045D8 ADDS R1, R5, R1
- seg000:080045DA ADDS R0, R4, R0
- seg000:080045DC SXTH R5, R1
- seg000:080045DE SXTH R4, R0
- seg000:080045E0
- //// R4,R5,R6 are the three motor H bridge timings - clamp to 0 and 0x600 (100%)
- seg000:080045E0 loc_80045E0 ; CODE XREF: SetPhaseTiming+14Aj
- seg000:080045E0 CMP R6, #0
- seg000:080045E2 BGE loc_80045E6
- seg000:080045E4 MOVS R6, #0
- seg000:080045E6
- seg000:080045E6 loc_80045E6 ; CODE XREF: SetPhaseTiming+162j
- seg000:080045E6 CMP R5, #0
- seg000:080045E8 BGE loc_80045EC
- seg000:080045EA MOVS R5, #0
- seg000:080045EC
- seg000:080045EC loc_80045EC ; CODE XREF: SetPhaseTiming+168j
- seg000:080045EC CMP R4, #0
- seg000:080045EE BGE loc_80045F2 ; clamp max on time!
- seg000:080045F0 MOVS R4, #0
- seg000:080045F2
- seg000:080045F2 loc_80045F2 ; CODE XREF: SetPhaseTiming+16Ej
- seg000:080045F2 MOVS R0, #0x600 ; clamp max on time!
- seg000:080045F6 CMP R6, R0
- seg000:080045F8 BLE loc_80045FC
- seg000:080045FA MOV R6, R0
- seg000:080045FC
- seg000:080045FC loc_80045FC ; CODE XREF: SetPhaseTiming+178j
- seg000:080045FC CMP R5, R0
- seg000:080045FE BLE loc_8004602
- seg000:08004600 MOV R5, R0
- seg000:08004602
- seg000:08004602 loc_8004602 ; CODE XREF: SetPhaseTiming+17Ej
- seg000:08004602 CMP R4, R0
- seg000:08004604 BLE loc_8004608
- seg000:08004606 MOV R4, R0
- seg000:08004608
- seg000:08004608 loc_8004608 ; CODE XREF: SetPhaseTiming+184j
- seg000:08004608 LDR R0, =0x40012C00
- //////////// Writes motor control 3-phase outputs HERE ......
- seg000:0800460A STR R6, [R0,#0x34] ; set CCR1..3 on TIM1
- seg000:0800460C STR R5, [R0,#0x38]
- seg000:0800460E STR R4, [R0,#0x3C]
- seg000:08004610 LDR R2, [SP,#0x18+var_18]
- seg000:08004612 LDR R0, =0x20000228
- seg000:08004614 MOVS R1, #4
- seg000:08004616 MOVS R3, R2
- seg000:08004618 BL sub_8005D76
- seg000:0800461C PUSH {R0-R2,LR}
- seg000:0800461E CMP R6, #0x13
- seg000:08004620 LDRSH R1, [R1,R5]
- seg000:08004622 STR R7, [SP,#0x28+arg_1C8]
- seg000:08004624 LSLS R3, R6, #2
- seg000:08004626 ADDS R2, R1, R0
- seg000:08004628 LSLS R4, R2, #0xF
- seg000:0800462A MOVS R2, #0x600
- seg000:0800462E LSLS R3, R2, #0xF
- seg000:08004630 SUBS R2, R2, R1
- seg000:08004632 SUBS R2, R2, R0
- seg000:08004634 ADDS R4, R4, R3
- seg000:08004636 SUBS R0, R1, R0
- seg000:08004638 ASRS R6, R4, #0x10
- seg000:0800463A ASRS R5, R2, #1
- seg000:0800463C LSLS R0, R0, #0xF
- seg000:0800463E ADDS R0, R0, R3
- seg000:08004640 B loc_80045C2
- seg000:08004640 ; End of function SetPhaseTiming
- seg000:08004640
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement