📄 ican-mcp2515.s
字号:
LDRB R0,[R4, #+4]
LSLS R0,R0,#+28 ;; ZeroExtS R0,R0,#+28,#+28
LSRS R0,R0,#+28
STRB R0,[SP, #+0]
MOVS R0,#+0
MOVS R5,R0
??WriteCAN_0:
LDRB R0,[SP, #+0]
UXTB R5,R5 ;; ZeroExtS R5,R5,#+24,#+24
CMP R5,R0
BCS.N ??WriteCAN_1
ADDS R7,R7,#+1
UXTB R5,R5 ;; ZeroExtS R5,R5,#+24,#+24
ADDS R0,R4,R5
LDRB R1,[R0, #+5]
MOVS R0,R7
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
BL SPIByteWrite
ADDS R5,R5,#+1
B.N ??WriteCAN_0
??WriteCAN_1:
UXTB R6,R6 ;; ZeroExtS R6,R6,#+24,#+24
CMP R6,#+49
BNE.N ??WriteCAN_2
MOVS R1,#+8
MOVS R0,#+48
BL SPIByteWrite
B.N ??WriteCAN_3
??WriteCAN_2:
UXTB R6,R6 ;; ZeroExtS R6,R6,#+24,#+24
CMP R6,#+65
BNE.N ??WriteCAN_4
MOVS R1,#+8
MOVS R0,#+64
BL SPIByteWrite
B.N ??WriteCAN_3
??WriteCAN_4:
UXTB R6,R6 ;; ZeroExtS R6,R6,#+24,#+24
CMP R6,#+81
BNE.N ??WriteCAN_3
MOVS R1,#+8
MOVS R0,#+80
BL SPIByteWrite
??WriteCAN_3:
ADD SP,SP,#+4
POP {R4-R7,PC} ;; return
SECTION `.XML`:CODE:NOROOT(2)
THUMB
Init2515:
PUSH {R0,R4,R5,LR}
MOVS R5,R0
BL SPIReset
MOVS R0,#+100
BL delay_nop
MOVS R1,#+0
MOVS R0,#+96
BL SPIByteWrite
MOVS R1,#+0
MOVS R0,#+32
BL SPIByteWrite
MOVS R1,#+0
MOVS R0,#+33
BL SPIByteWrite
MOVS R1,#+0
MOVS R0,#+0
BL SPIByteWrite
MOVS R1,#+8
MOVS R0,#+1
BL SPIByteWrite
MOVS R1,#+63
MOVS R0,#+2
BL SPIByteWrite
MOVS R1,#+0
MOVS R0,#+3
BL SPIByteWrite
UXTB R5,R5 ;; ZeroExtS R5,R5,#+24,#+24
LDR.N R0,??Init2515_0 ;; CAN_RATE_TAB
LDRB R5,[R0, R5]
MOVS R1,R5
UXTB R1,R1 ;; ZeroExtS R1,R1,#+24,#+24
MOVS R0,#+42
BL SPIByteWrite
MOVS R1,#+144
MOVS R0,#+41
BL SPIByteWrite
MOVS R1,#+2
MOVS R0,#+40
BL SPIByteWrite
MOVS R1,#+160
MOVS R0,#+49
BL SPIByteWrite
MOVS R1,#+232
MOVS R0,#+50
BL SPIByteWrite
MOVS R1,#+255
MOVS R0,#+51
BL SPIByteWrite
MOVS R1,#+168
MOVS R0,#+52
BL SPIByteWrite
MOVS R1,#+3
MOVS R0,#+53
BL SPIByteWrite
MOVS R1,#+6
MOVS R0,#+54
BL SPIByteWrite
MOVS R1,#+255
MOVS R0,#+55
BL SPIByteWrite
MOVS R1,#+255
MOVS R0,#+56
BL SPIByteWrite
MOVS R1,#+80
MOVS R0,#+65
BL SPIByteWrite
MOVS R1,#+0
MOVS R0,#+66
BL SPIByteWrite
MOVS R1,#+72
MOVS R0,#+69
BL SPIByteWrite
MOVS R1,#+1
MOVS R0,#+43
BL SPIByteWrite
MOVS R0,#+100
BL delay_nop
MOVS R0,#+2
BL SPIByteRead
MOVS R4,R0
MOVS R1,#+8
MOVS R0,#+15
BL SPIByteWrite
MOVS R0,#+14
BL SPIByteRead
MOVS R4,R0
MOVS R1,#+0
MOVS R0,#+48
BL SPIByteWrite
MOVS R0,#+0
MOVS R4,R0
??Init2515_1:
MOVS R0,#+160
BL SPIByteRead
TST R0,#0x54
BEQ.N ??Init2515_2
LDR.N R0,??Init2515_0+0x4 ;; 0x61a8
UXTH R4,R4 ;; ZeroExtS R4,R4,#+16,#+16
CMP R4,R0
BCS.N ??Init2515_2
BL WWDG_ClearFlag
ADDS R4,R4,#+1
B.N ??Init2515_1
??Init2515_2:
MOVS R1,#+0
MOVS R0,#+44
BL SPIByteWrite
ADD SP,SP,#+4
POP {R4,R5,PC} ;; return
DATA
??Init2515_0:
DC32 CAN_RATE_TAB
DC32 0x61a8
SECTION `.XML`:CODE:NOROOT(2)
THUMB
Read2551:
PUSH {R0,R4,R5,LR}
MOVS R4,R0
MOVS R5,R1
MOVS R0,R5
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
BL SPIByteRead
STRB R0,[R4, #+0]
ADDS R5,R5,#+1
MOVS R0,R5
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
BL SPIByteRead
STRB R0,[R4, #+1]
ADDS R5,R5,#+1
MOVS R0,R5
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
BL SPIByteRead
STRB R0,[R4, #+2]
ADDS R5,R5,#+1
MOVS R0,R5
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
BL SPIByteRead
STRB R0,[R4, #+3]
ADDS R5,R5,#+1
MOVS R0,R5
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
BL SPIByteRead
STRB R0,[R4, #+4]
ADDS R5,R5,#+1
MOVS R0,R5
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
BL SPIByteRead
STRB R0,[R4, #+5]
ADDS R5,R5,#+1
MOVS R0,R5
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
BL SPIByteRead
STRB R0,[R4, #+6]
ADDS R5,R5,#+1
MOVS R0,R5
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
BL SPIByteRead
STRB R0,[R4, #+7]
ADDS R5,R5,#+1
MOVS R0,R5
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
BL SPIByteRead
STRB R0,[R4, #+8]
ADDS R5,R5,#+1
MOVS R0,R5
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
BL SPIByteRead
STRB R0,[R4, #+9]
ADDS R5,R5,#+1
MOVS R0,R5
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
BL SPIByteRead
STRB R0,[R4, #+10]
ADDS R5,R5,#+1
MOVS R0,R5
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
BL SPIByteRead
STRB R0,[R4, #+11]
ADDS R5,R5,#+1
MOVS R0,R5
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
BL SPIByteRead
STRB R0,[R4, #+12]
ADD SP,SP,#+4
POP {R4,R5,PC} ;; return
SECTION `.XML`:CODE:NOROOT(2)
THUMB
RTS:
PUSH {R0,R4-R7,LR}
MOVS R4,R0
MOVS R5,R1
MOVS R6,R2
MOVS R0,#+160
BL SPIFastRead
MOVS R7,R0
MOVS R0,#+0
STRB R0,[R4, #+1]
LDRB R0,[R4, #+1]
TST R0,#0xE0
BNE.N ??RTS_0
UXTB R7,R7 ;; ZeroExtS R7,R7,#+24,#+24
LSLS R0,R7,#+29
BPL.N ??RTS_1
MOVS R0,#+255
B.N ??RTS_2
??RTS_1:
MOVS R2,R6
MOVS R1,R5
MOVS R0,R4
BL ConfCAN
LSLS R0,R7,#+29
BMI.N ??RTS_3
MOVS R1,#+49
MOVS R0,R5
BL WriteCAN
B.N ??RTS_4
??RTS_3:
LSLS R0,R7,#+27
BMI.N ??RTS_5
MOVS R1,#+65
MOVS R0,R5
BL WriteCAN
B.N ??RTS_4
??RTS_5:
LSLS R0,R7,#+25
BMI.N ??RTS_4
MOVS R1,#+81
MOVS R0,R5
BL WriteCAN
??RTS_4:
LDRB R0,[R4, #+5]
STRB R0,[SP, #+0]
LDRB R1,[SP, #+0]
SUBS R0,R1,#+1
SBCS R0,R0,R0
MVNS R0,R0
LSRS R0,R0,#+31
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
B.N ??RTS_2
??RTS_0:
LDRB R0,[R4, #+1]
ANDS R0,R0,#0xE0
CMP R0,#+224
BNE.N ??RTS_6
LSLS R0,R7,#+29
BMI.N ??RTS_6
LDRH R0,[R6, #+0]
STRB R0,[R5, #+0]
MOVS R0,#+224
STRB R0,[R5, #+1]
LDRB R0,[R5, #+1]
ORRS R0,R0,#0x8
STRB R0,[R5, #+1]
LDRB R0,[R5, #+1]
ORRS R0,R0,#0x1
STRB R0,[R5, #+1]
LDRB R0,[R4, #+2]
MOVS R1,#+128
ANDS R1,R1,R0
STRB R1,[R5, #+2]
LDRB R0,[R5, #+2]
LDRB R1,[R4, #+0]
LSLS R1,R1,#+25 ;; ZeroExtS R1,R1,#+25,#+25
LSRS R1,R1,#+25
ORRS R1,R1,R0
STRB R1,[R5, #+2]
LDRB R0,[R4, #+3]
STRB R0,[R5, #+3]
MOVS R0,#+0
STRB R0,[R5, #+4]
LSLS R0,R7,#+29
BMI.N ??RTS_7
MOVS R1,#+49
MOVS R0,R5
BL WriteCAN
B.N ??RTS_8
??RTS_7:
LSLS R0,R7,#+27
BMI.N ??RTS_9
MOVS R1,#+65
MOVS R0,R5
BL WriteCAN
B.N ??RTS_8
??RTS_9:
LSLS R0,R7,#+25
BMI.N ??RTS_8
MOVS R1,#+81
MOVS R0,R5
BL WriteCAN
??RTS_8:
MOVS R0,#+0
B.N ??RTS_2
??RTS_6:
MOVS R0,#+0
??RTS_2:
ADD SP,SP,#+4
POP {R4-R7,PC} ;; return
SECTION `.XML`:CODE:NOROOT(2)
THUMB
ReadCAN:
PUSH {R4-R8,LR}
MOV R8,R2
MOVS R4,R0
MOVS R5,R1
LDR.N R0,??ReadCAN_0 ;; 0x40010c08
LDR R1,[R0, #+0]
MOVS R0,#+2048
ANDS R0,R0,R1
LDR.N R1,??ReadCAN_0 ;; 0x40010c08
STR R0,[R1, #+0]
CMP R0,#+0
BEQ.N ??ReadCAN_1
MOVS R0,R5
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
B.N ??ReadCAN_2
??ReadCAN_1:
MOVS R0,#+160
BL SPIFastRead
MOVS R7,R0
MOVS R1,#+0
MOVS R0,#+44
BL SPIByteWrite
MOVS R0,R7
LSLS R0,R0,#+31
BMI.N ??ReadCAN_3
MOVS R0,R5
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
B.N ??ReadCAN_2
??ReadCAN_3:
MOVS R0,#+99
BL SPIByteRead
MOVS R6,R0
LSLS R6,R6,#+25 ;; ZeroExtS R6,R6,#+25,#+25
LSRS R6,R6,#+25
MOV R0,R8
UXTB R6,R6 ;; ZeroExtS R6,R6,#+24,#+24
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
CMP R6,R0
BEQ.N ??ReadCAN_4
MOVS R0,R5
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
B.N ??ReadCAN_2
??ReadCAN_4:
MOVS R1,#+97
MOVS R0,R4
BL Read2551
LDRB R0,[R4, #+1]
ANDS R6,R0,#0xE0
UXTB R6,R6 ;; ZeroExtS R6,R6,#+24,#+24
LSRS R6,R6,#+5
UXTB R6,R6 ;; ZeroExtS R6,R6,#+24,#+24
CMP R6,#+1
BEQ.N ??ReadCAN_5
UXTB R6,R6 ;; ZeroExtS R6,R6,#+24,#+24
CMP R6,#+0
BNE.N ??ReadCAN_6
??ReadCAN_5:
LDRB R0,[R4, #+3]
LDRB R1,[R4, #+5]
ADDS R0,R0,R1
MOVS R7,R0
CMP R7,#+155
BCC.N ??ReadCAN_6
LDRB R0,[R4, #+1]
ORRS R0,R0,#0xE0
STRB R0,[R4, #+1]
MOVS R0,#+254
STRB R0,[R4, #+3]
??ReadCAN_6:
LDRB R0,[R4, #+4]
LSLS R0,R0,#+29
BNE.N ??ReadCAN_7
UXTB R6,R6 ;; ZeroExtS R6,R6,#+24,#+24
CMP R6,#+2
BCS.N ??ReadCAN_7
LDRB R0,[R4, #+1]
ORRS R0,R0,#0xE0
STRB R0,[R4, #+1]
MOVS R0,#+254
STRB R0,[R4, #+3]
??ReadCAN_7:
MOVS R0,#+1
??ReadCAN_2:
POP {R4-R8,PC} ;; return
Nop
DATA
??ReadCAN_0:
DC32 0x40010c08
END
//
// 1 702 bytes in section .XML
// 8 bytes in section .rodata
//
// 1 702 bytes of CODE memory
// 8 bytes of CONST memory
//
//Errors: none
//Warnings: 2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -