📄 ican-mcp2515.s
字号:
///////////////////////////////////////////////////////////////////////////////
// /
// 06/Dec/2008 17:12:51 /
// IAR ARM ANSI C/C++ Compiler V5.11.0.20622/W32 EVALUATION /
// Copyright 1999-2007 IAR Systems. All rights reserved. /
// /
// Cpu mode = thumb /
// Endian = little /
// Source file = E:\ELE\yten\pro\message\ican-mcp2515.c /
// Command line = E:\ELE\yten\pro\message\ican-mcp2515.c -D EMB_FLASH /
// -lCN E:\ELE\yten\pro\Debug\List\ -lb /
// E:\ELE\yten\pro\Debug\List\ -o /
// E:\ELE\yten\pro\Debug\Obj\ --no_cse --no_unroll /
// --no_inline --no_code_motion --no_tbaa --no_clustering /
// --no_scheduling --debug --endian little --cpu /
// Cortex-M3 -e --fpu None --dlib_config "C:\Program /
// Files\IAR Systems\Embedded Workbench 5.0 /
// Evaluation\ARM\INC\DLib_Config_Normal.h" -I /
// E:\ELE\yten\pro\ -I E:\ELE\yten\pro\..\LIBRARY\INC\ -I /
// "C:\Program Files\IAR Systems\Embedded Workbench 5.0 /
// Evaluation\ARM\INC\" --section .text=.XML -On /
// List file = E:\ELE\yten\pro\Debug\List\ican-mcp2515.s /
// /
// /
///////////////////////////////////////////////////////////////////////////////
NAME `ican-mcp2515`
EXTERN WWDG_ClearFlag
EXTERN delay_nop
PUBLIC CAN_BAUD
PUBLIC CAN_RATE_TAB
PUBLIC ConfCAN
PUBLIC Init2515
PUBLIC RTS
PUBLIC Read2551
PUBLIC ReadCAN
PUBLIC ReadSPI
PUBLIC SPIByteRead
PUBLIC SPIByteWrite
PUBLIC SPIFastRead
PUBLIC SPIFastWrite
PUBLIC SPIReset
PUBLIC WriteCAN
PUBLIC WriteSPI
SECTION `.rodata`:CONST:NOROOT(2)
// unsigned char const __data CAN_RATE_TAB[3]
CAN_RATE_TAB:
DATA
DC8 1, 4, 24, 0
SECTION `.rodata`:CONST:NOROOT(2)
CAN_BAUD:
DATA
DC8 1, 4, 18, 0
SECTION `.XML`:CODE:NOROOT(2)
THUMB
WriteSPI:
LDR.N R2,??DataTable25 ;; 0x40010c0c
LDR R2,[R2, #+0]
MVNS R3,#+1024
ANDS R3,R3,R2
LDR.N R2,??DataTable25 ;; 0x40010c0c
STR R3,[R2, #+0]
MOVS R2,#+0
MOVS R1,R2
??WriteSPI_0:
UXTB R1,R1 ;; ZeroExtS R1,R1,#+24,#+24
CMP R1,#+8
BCS.N ??WriteSPI_1
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
LSLS R2,R0,R1
LSLS R2,R2,#+24
BPL.N ??WriteSPI_2
LDR.N R2,??DataTable25 ;; 0x40010c0c
LDR R2,[R2, #+0]
ORRS R2,R2,#0x2
LDR.N R3,??DataTable25 ;; 0x40010c0c
STR R2,[R3, #+0]
B.N ??WriteSPI_3
??WriteSPI_2:
LDR.N R2,??DataTable25 ;; 0x40010c0c
LDR R2,[R2, #+0]
MOVS R3,#+2
BICS R2,R2,R3
LDR.N R3,??DataTable25 ;; 0x40010c0c
STR R2,[R3, #+0]
??WriteSPI_3:
nop
nop
nop
LDR.N R2,??DataTable25 ;; 0x40010c0c
LDR R2,[R2, #+0]
ORRS R2,R2,#0x400
LDR.N R3,??DataTable25 ;; 0x40010c0c
STR R2,[R3, #+0]
nop
nop
nop
nop
nop
LDR.N R2,??DataTable25 ;; 0x40010c0c
LDR R2,[R2, #+0]
MVNS R3,#+1024
ANDS R3,R3,R2
LDR.N R2,??DataTable25 ;; 0x40010c0c
STR R3,[R2, #+0]
nop
nop
nop
nop
LDR.N R2,??DataTable25 ;; 0x40010c0c
LDR R2,[R2, #+0]
MOVS R3,#+2
BICS R2,R2,R3
LDR.N R3,??DataTable25 ;; 0x40010c0c
STR R2,[R3, #+0]
ADDS R1,R1,#+1
B.N ??WriteSPI_0
??WriteSPI_1:
BX LR ;; return
SECTION `.XML`:CODE:NOROOT(2)
THUMB
ReadSPI:
MOVS R2,#+0
MOVS R0,R2
LDR.N R2,??DataTable25 ;; 0x40010c0c
LDR R2,[R2, #+0]
MVNS R3,#+1024
ANDS R3,R3,R2
LDR.N R2,??DataTable25 ;; 0x40010c0c
STR R3,[R2, #+0]
MOVS R2,#+0
MOVS R1,R2
??ReadSPI_0:
UXTB R1,R1 ;; ZeroExtS R1,R1,#+24,#+24
CMP R1,#+7
BCS.N ??ReadSPI_1
LDR.N R2,??DataTable25 ;; 0x40010c0c
LDR R2,[R2, #+0]
ORRS R2,R2,#0x400
LDR.N R3,??DataTable25 ;; 0x40010c0c
STR R2,[R3, #+0]
nop
nop
LDR.N R2,??DataTable23 ;; 0x40010c08
LDR R3,[R2, #+0]
MOVS R2,#+1
ANDS R2,R2,R3
LDR.N R3,??DataTable23 ;; 0x40010c08
STR R2,[R3, #+0]
CMP R2,#+0
BEQ.N ??ReadSPI_2
ORRS R0,R0,#0x1
B.N ??ReadSPI_3
??ReadSPI_2:
ANDS R0,R0,#0xFE
??ReadSPI_3:
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
LSLS R0,R0,#+1
LDR.N R2,??DataTable25 ;; 0x40010c0c
LDR R2,[R2, #+0]
MVNS R3,#+1024
ANDS R3,R3,R2
LDR.N R2,??DataTable25 ;; 0x40010c0c
STR R3,[R2, #+0]
nop
nop
ADDS R1,R1,#+1
B.N ??ReadSPI_0
??ReadSPI_1:
LDR.N R2,??DataTable25 ;; 0x40010c0c
LDR R2,[R2, #+0]
ORRS R2,R2,#0x400
LDR.N R3,??DataTable25 ;; 0x40010c0c
STR R2,[R3, #+0]
LDR.N R2,??DataTable23 ;; 0x40010c08
LDR R3,[R2, #+0]
MOVS R2,#+1
ANDS R2,R2,R3
LDR.N R3,??DataTable23 ;; 0x40010c08
STR R2,[R3, #+0]
CMP R2,#+0
BEQ.N ??ReadSPI_4
ORRS R0,R0,#0x1
B.N ??ReadSPI_5
??ReadSPI_4:
ANDS R0,R0,#0xFE
??ReadSPI_5:
LDR.N R2,??DataTable25 ;; 0x40010c0c
LDR R2,[R2, #+0]
MVNS R3,#+1024
ANDS R3,R3,R2
LDR.N R2,??DataTable25 ;; 0x40010c0c
STR R3,[R2, #+0]
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
BX LR ;; return
SECTION `.XML`:CODE:NOROOT(2)
DATA
??DataTable23:
DC32 0x40010c08
SECTION `.XML`:CODE:NOROOT(2)
DATA
??DataTable25:
DC32 0x40010c0c
SECTION `.XML`:CODE:NOROOT(2)
THUMB
SPIByteWrite:
PUSH {R0,R4,R5,LR}
MOVS R4,R0
MOVS R5,R1
LDR.N R0,??DataTable41 ;; 0x4001100c
LDR R0,[R0, #+0]
MOVS R1,#+32
BICS R0,R0,R1
LDR.N R1,??DataTable41 ;; 0x4001100c
STR R0,[R1, #+0]
MOVS R0,#+2
BL WriteSPI
MOVS R0,R4
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
BL WriteSPI
MOVS R0,R5
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
BL WriteSPI
LDR.N R0,??DataTable41 ;; 0x4001100c
LDR R0,[R0, #+0]
ORRS R0,R0,#0x20
LDR.N R1,??DataTable41 ;; 0x4001100c
STR R0,[R1, #+0]
ADD SP,SP,#+4
POP {R4,R5,PC} ;; return
SECTION `.XML`:CODE:NOROOT(2)
THUMB
SPIByteRead:
PUSH {R0,R4,R5,LR}
MOVS R4,R0
LDR.N R0,??DataTable41 ;; 0x4001100c
LDR R0,[R0, #+0]
MOVS R1,#+32
BICS R0,R0,R1
LDR.N R1,??DataTable41 ;; 0x4001100c
STR R0,[R1, #+0]
MOVS R0,#+3
BL WriteSPI
MOVS R0,R4
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
BL WriteSPI
BL ReadSPI
MOVS R5,R0
LDR.N R0,??DataTable41 ;; 0x4001100c
LDR R0,[R0, #+0]
ORRS R0,R0,#0x20
LDR.N R1,??DataTable41 ;; 0x4001100c
STR R0,[R1, #+0]
MOVS R0,R5
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
ADD SP,SP,#+4
POP {R4,R5,PC} ;; return
SECTION `.XML`:CODE:NOROOT(2)
THUMB
SPIReset:
PUSH {R0,LR}
LDR.N R0,??DataTable41 ;; 0x4001100c
LDR R0,[R0, #+0]
MOVS R1,#+32
BICS R0,R0,R1
LDR.N R1,??DataTable41 ;; 0x4001100c
STR R0,[R1, #+0]
MOVS R0,#+192
BL WriteSPI
LDR.N R0,??DataTable41 ;; 0x4001100c
LDR R0,[R0, #+0]
ORRS R0,R0,#0x20
LDR.N R1,??DataTable41 ;; 0x4001100c
STR R0,[R1, #+0]
ADD SP,SP,#+4
POP {PC} ;; return
SECTION `.XML`:CODE:NOROOT(2)
THUMB
SPIFastRead:
PUSH {R0,R4,R5,LR}
MOVS R4,R0
LDR.N R0,??DataTable41 ;; 0x4001100c
LDR R0,[R0, #+0]
MOVS R1,#+32
BICS R0,R0,R1
LDR.N R1,??DataTable41 ;; 0x4001100c
STR R0,[R1, #+0]
MOVS R0,R4
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
BL WriteSPI
BL ReadSPI
MOVS R5,R0
LDR.N R0,??DataTable41 ;; 0x4001100c
LDR R0,[R0, #+0]
ORRS R0,R0,#0x20
LDR.N R1,??DataTable41 ;; 0x4001100c
STR R0,[R1, #+0]
UXTB R5,R5 ;; ZeroExtS R5,R5,#+24,#+24
MOVS R0,R5
ADD SP,SP,#+4
POP {R4,R5,PC} ;; return
SECTION `.XML`:CODE:NOROOT(2)
DATA
??DataTable41:
DC32 0x4001100c
SECTION `.XML`:CODE:NOROOT(2)
THUMB
SPIFastWrite:
BX LR ;; return
SECTION `.XML`:CODE:NOROOT(2)
THUMB
ConfCAN:
PUSH {R0,R4-R6}
LDRH R5,[R2, #+0]
STRB R5,[R1, #+0]
MOVS R5,#+0
STRB R5,[R1, #+1]
LDRB R5,[R0, #+1]
TST R5,#0xE0
BEQ.N ??ConfCAN_0
LDRB R5,[R1, #+1]
ORRS R5,R5,#0xE0
STRB R5,[R1, #+1]
??ConfCAN_0:
LDRB R5,[R1, #+1]
ORRS R5,R5,#0x8
STRB R5,[R1, #+1]
LDRB R5,[R0, #+2]
ANDS R5,R5,#0xC0
STRB R5,[R1, #+2]
LDRB R5,[R1, #+2]
LDRB R6,[R0, #+0]
LSLS R6,R6,#+26 ;; ZeroExtS R6,R6,#+26,#+26
LSRS R6,R6,#+26
ORRS R6,R6,R5
STRB R6,[R1, #+2]
LDRB R5,[R0, #+3]
STRB R5,[R1, #+3]
MOVS R5,#+0
STRB R5,[R1, #+4]
LDRB R5,[R0, #+3]
MOVS R3,R5
UXTB R3,R3 ;; ZeroExtS R3,R3,#+24,#+24
MOVS R5,#+2
MLA R2,R3,R5,R2
MOVS R5,#+0
MOVS R3,R5
??ConfCAN_1:
UXTB R3,R3 ;; ZeroExtS R3,R3,#+24,#+24
CMP R3,#+4
BCS.N ??ConfCAN_2
LDRB R5,[R0, #+5]
CMP R5,#+0
BEQ.N ??ConfCAN_2
MOVS R5,#+2
MUL R4,R3,R5
LDRH R5,[R2, #+0]
MOVS R6,#+256
SDIV R5,R5,R6
UXTB R4,R4 ;; ZeroExtS R4,R4,#+24,#+24
ADDS R6,R1,R4
STRB R5,[R6, #+5]
LDRB R5,[R1, #+4]
ADDS R5,R5,#+1
STRB R5,[R1, #+4]
UXTB R4,R4 ;; ZeroExtS R4,R4,#+24,#+24
ADDS R5,R1,R4
LDRH R6,[R2, #+0]
STRB R6,[R5, #+6]
LDRB R5,[R1, #+4]
ADDS R5,R5,#+1
STRB R5,[R1, #+4]
ADDS R2,R2,#+2
LDRB R5,[R0, #+3]
ADDS R5,R5,#+1
STRB R5,[R0, #+3]
LDRB R5,[R0, #+5]
CMP R5,#+1
BCC.N ??ConfCAN_3
LDRB R5,[R0, #+5]
SUBS R5,R5,#+1
STRB R5,[R0, #+5]
B.N ??ConfCAN_4
??ConfCAN_3:
MOVS R5,#+0
STRB R5,[R0, #+5]
??ConfCAN_4:
ADDS R3,R3,#+1
B.N ??ConfCAN_1
??ConfCAN_2:
LDRB R5,[R0, #+5]
CMP R5,#+0
BNE.N ??ConfCAN_5
LDRB R5,[R1, #+1]
ORRS R5,R5,#0x3
STRB R5,[R1, #+1]
B.N ??ConfCAN_6
??ConfCAN_5:
LDRB R5,[R1, #+1]
ORRS R5,R5,#0x1
STRB R5,[R1, #+1]
??ConfCAN_6:
ADD SP,SP,#+4
POP {R4-R6}
BX LR ;; return
SECTION `.XML`:CODE:NOROOT(2)
THUMB
WriteCAN:
PUSH {R0,R4-R7,LR}
MOVS R4,R0
MOVS R7,R1
MOVS R6,R7
LDRB R1,[R4, #+0]
MOVS R0,R7
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
BL SPIByteWrite
ADDS R7,R7,#+1
LDRB R1,[R4, #+1]
MOVS R0,R7
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
BL SPIByteWrite
ADDS R7,R7,#+1
LDRB R1,[R4, #+2]
MOVS R0,R7
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
BL SPIByteWrite
ADDS R7,R7,#+1
LDRB R1,[R4, #+3]
MOVS R0,R7
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
BL SPIByteWrite
ADDS R7,R7,#+1
LDRB R1,[R4, #+4]
MOVS R0,R7
UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
BL SPIByteWrite
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -