📄 ican-mcp2515.lst
字号:
\ 00000090 .... LDR.N R2,??DataTable25 ;; 0x40010c0c
\ 00000092 1360 STR R3,[R2, #+0]
62 return DataIn;
\ 00000094 C0B2 UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
\ 00000096 7047 BX LR ;; return
63 }
64 //-------------------------------------------------------------
65 //-------------------------------------------------------------------------
66 // SPIByteWrite()
67 //-------------------------------------------------------------------------
\ In section .XML, align 4, keep-with-next
68 void SPIByteWrite(unsigned char addr, unsigned char value )
69 {
\ SPIByteWrite:
\ 00000000 31B5 PUSH {R0,R4,R5,LR}
\ 00000002 0400 MOVS R4,R0
\ 00000004 0D00 MOVS R5,R1
70 Clr_bit(IO_CS,mCS) ; //mCS = LOW;
\ 00000006 .... LDR.N R0,??DataTable41 ;; 0x4001100c
\ 00000008 0068 LDR R0,[R0, #+0]
\ 0000000A 2021 MOVS R1,#+32
\ 0000000C 8843 BICS R0,R0,R1
\ 0000000E .... LDR.N R1,??DataTable41 ;; 0x4001100c
\ 00000010 0860 STR R0,[R1, #+0]
71 WriteSPI(CAN_WRITE);
\ 00000012 0220 MOVS R0,#+2
\ 00000014 ........ BL WriteSPI
72 WriteSPI(addr);
\ 00000018 2000 MOVS R0,R4
\ 0000001A C0B2 UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
\ 0000001C ........ BL WriteSPI
73 WriteSPI(value);
\ 00000020 2800 MOVS R0,R5
\ 00000022 C0B2 UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
\ 00000024 ........ BL WriteSPI
74 Set_bit(IO_CS,mCS); //mCS = HIGH;;
\ 00000028 .... LDR.N R0,??DataTable41 ;; 0x4001100c
\ 0000002A 0068 LDR R0,[R0, #+0]
\ 0000002C 50F02000 ORRS R0,R0,#0x20
\ 00000030 .... LDR.N R1,??DataTable41 ;; 0x4001100c
\ 00000032 0860 STR R0,[R1, #+0]
75 }
\ 00000034 01B0 ADD SP,SP,#+4
\ 00000036 30BD POP {R4,R5,PC} ;; return
76
77
78 //-----------------------------------------------------------------------------
79 // SPIByteRead()
80 //-----------------------------------------------------------------------------
\ In section .XML, align 4, keep-with-next
81 unsigned char SPIByteRead(unsigned char addr)
82 {
\ SPIByteRead:
\ 00000000 31B5 PUSH {R0,R4,R5,LR}
\ 00000002 0400 MOVS R4,R0
83 unsigned char tempdata;
84 Clr_bit(IO_CS,mCS); //mCS = LOW;;
\ 00000004 .... LDR.N R0,??DataTable41 ;; 0x4001100c
\ 00000006 0068 LDR R0,[R0, #+0]
\ 00000008 2021 MOVS R1,#+32
\ 0000000A 8843 BICS R0,R0,R1
\ 0000000C .... LDR.N R1,??DataTable41 ;; 0x4001100c
\ 0000000E 0860 STR R0,[R1, #+0]
85 WriteSPI(CAN_READ);
\ 00000010 0320 MOVS R0,#+3
\ 00000012 ........ BL WriteSPI
86 WriteSPI(addr);
\ 00000016 2000 MOVS R0,R4
\ 00000018 C0B2 UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
\ 0000001A ........ BL WriteSPI
87 tempdata = ReadSPI();
\ 0000001E ........ BL ReadSPI
\ 00000022 0500 MOVS R5,R0
88 Set_bit(IO_CS,mCS); //mCS = HIGH;;
\ 00000024 .... LDR.N R0,??DataTable41 ;; 0x4001100c
\ 00000026 0068 LDR R0,[R0, #+0]
\ 00000028 50F02000 ORRS R0,R0,#0x20
\ 0000002C .... LDR.N R1,??DataTable41 ;; 0x4001100c
\ 0000002E 0860 STR R0,[R1, #+0]
89 return tempdata;
\ 00000030 2800 MOVS R0,R5
\ 00000032 C0B2 UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
\ 00000034 01B0 ADD SP,SP,#+4
\ 00000036 30BD POP {R4,R5,PC} ;; return
90 }
91 //-----------------------------------------------------------------------------
92 // SPIReset()
93 //-----------------------------------------------------------------------------
\ In section .XML, align 4, keep-with-next
94 void SPIReset(void)
95 {
\ SPIReset:
\ 00000000 01B5 PUSH {R0,LR}
96 Clr_bit(IO_CS,mCS);//mCS = LOW;
\ 00000002 .... LDR.N R0,??DataTable41 ;; 0x4001100c
\ 00000004 0068 LDR R0,[R0, #+0]
\ 00000006 2021 MOVS R1,#+32
\ 00000008 8843 BICS R0,R0,R1
\ 0000000A .... LDR.N R1,??DataTable41 ;; 0x4001100c
\ 0000000C 0860 STR R0,[R1, #+0]
97 WriteSPI(CAN_RESET);
\ 0000000E C020 MOVS R0,#+192
\ 00000010 ........ BL WriteSPI
98 Set_bit(IO_CS,mCS);
\ 00000014 .... LDR.N R0,??DataTable41 ;; 0x4001100c
\ 00000016 0068 LDR R0,[R0, #+0]
\ 00000018 50F02000 ORRS R0,R0,#0x20
\ 0000001C .... LDR.N R1,??DataTable41 ;; 0x4001100c
\ 0000001E 0860 STR R0,[R1, #+0]
99 }
\ 00000020 01B0 ADD SP,SP,#+4
\ 00000022 00BD POP {PC} ;; return
\ In section .XML, align 4, keep-with-next
100 SPIFastRead(unsigned char m)
101 {
\ SPIFastRead:
\ 00000000 31B5 PUSH {R0,R4,R5,LR}
\ 00000002 0400 MOVS R4,R0
102 unsigned char tempdata;
103 Clr_bit(IO_CS,mCS); //mCS = LOW;;
\ 00000004 .... LDR.N R0,??DataTable41 ;; 0x4001100c
\ 00000006 0068 LDR R0,[R0, #+0]
\ 00000008 2021 MOVS R1,#+32
\ 0000000A 8843 BICS R0,R0,R1
\ 0000000C .... LDR.N R1,??DataTable41 ;; 0x4001100c
\ 0000000E 0860 STR R0,[R1, #+0]
104 WriteSPI(m);
\ 00000010 2000 MOVS R0,R4
\ 00000012 C0B2 UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
\ 00000014 ........ BL WriteSPI
105 tempdata = ReadSPI();
\ 00000018 ........ BL ReadSPI
\ 0000001C 0500 MOVS R5,R0
106 Set_bit(IO_CS,mCS); //mCS = HIGH;;
\ 0000001E .... LDR.N R0,??DataTable41 ;; 0x4001100c
\ 00000020 0068 LDR R0,[R0, #+0]
\ 00000022 50F02000 ORRS R0,R0,#0x20
\ 00000026 .... LDR.N R1,??DataTable41 ;; 0x4001100c
\ 00000028 0860 STR R0,[R1, #+0]
107 return tempdata;
\ 0000002A EDB2 UXTB R5,R5 ;; ZeroExtS R5,R5,#+24,#+24
\ 0000002C 2800 MOVS R0,R5
\ 0000002E 01B0 ADD SP,SP,#+4
\ 00000030 30BD POP {R4,R5,PC} ;; return
108 }
\ In section .XML, align 4, keep-with-next
109 SPIFastWrite()
110 {
111 }
\ SPIFastWrite:
\ 00000000 7047 BX LR ;; return
112 //-----------------------------------------------------------------------------
113 //----------------------------------------------------
\ In section .XML, align 4, keep-with-next
114 void ConfCAN(CAN_BUS *CANx,volatile CAN_BUS *CANS,const Int16U *p)
115 {
\ ConfCAN:
\ 00000000 71B4 PUSH {R0,R4-R6}
116 unsigned char x,y;
117
118
119
120 CANS->SiIDH=*(p+C_PrductADD);//发送的标准标识符滤波10-3 ,产品地址
\ 00000002 1588 LDRH R5,[R2, #+0]
\ 00000004 0D70 STRB R5,[R1, #+0]
121
122 CANS->SiIDL=0;
\ 00000006 0025 MOVS R5,#+0
\ 00000008 4D70 STRB R5,[R1, #+1]
123 if(CANx->SiIDL&0Xe0)CANS->SiIDL|=0xe0;//功能码.标准标识符滤波位0,IDH的b5与IDL的b5
\ 0000000A 4578 LDRB R5,[R0, #+1]
\ 0000000C 15F0E00F TST R5,#0xE0
\ 00000010 03D0 BEQ.N ??ConfCAN_0
\ 00000012 4D78 LDRB R5,[R1, #+1]
\ 00000014 55F0E005 ORRS R5,R5,#0xE0
\ 00000018 4D70 STRB R5,[R1, #+1]
124 CANS->SiIDL|=8; //mcp2515报文滤波用于0=标准帧1=扩展帧//本应用中为扩展帧
\ ??ConfCAN_0:
\ 0000001A 4D78 LDRB R5,[R1, #+1]
\ 0000001C 55F00805 ORRS R5,R5,#0x8
\ 00000020 4D70 STRB R5,[R1, #+1]
125 CANS->EIDM=CANx->EIDM&0xc0;//通讯类型
\ 00000022 8578 LDRB R5,[R0, #+2]
\ 00000024 15F0C005 ANDS R5,R5,#0xC0
\ 00000028 8D70 STRB R5,[R1, #+2]
126 CANS->EIDM|=CANx->SiIDH&0X3F;
\ 0000002A 8D78 LDRB R5,[R1, #+2]
\ 0000002C 0678 LDRB R6,[R0, #+0]
\ 0000002E B606 LSLS R6,R6,#+26 ;; ZeroExtS R6,R6,#+26,#+26
\ 00000030 B60E LSRS R6,R6,#+26
\ 00000032 2E43 ORRS R6,R6,R5
\ 00000034 8E70 STRB R6,[R1, #+2]
127 CANS->EIDL=CANx->EIDL;
\ 00000036 C578 LDRB R5,[R0, #+3]
\ 00000038 CD70 STRB R5,[R1, #+3]
128 //CAN.EIDL start address ,CAN.DATA[0] len
129 CANS->DLC=0;
\ 0000003A 0025 MOVS R5,#+0
\ 0000003C 0D71 STRB R5,[R1, #+4]
130 x=CANx->EIDL; //起始地址
\ 0000003E C578 LDRB R5,[R0, #+3]
\ 00000040 2B00 MOVS R3,R5
131 p+=x;
\ 00000042 DBB2 UXTB R3,R3 ;; ZeroExtS R3,R3,#+24,#+24
\ 00000044 0225 MOVS R5,#+2
\ 00000046 03FB0522 MLA R2,R3,R5,R2
132 for(x=0;(x<4)&&(CANx->DATA[0]!=0);x++)//CAN.DATA[0]数据长度
\ 0000004A 0025 MOVS R5,#+0
\ 0000004C 2B00 MOVS R3,R5
\ ??ConfCAN_1:
\ 0000004E DBB2 UXTB R3,R3 ;; ZeroExtS R3,R3,#+24,#+24
\ 00000050 042B CMP R3,#+4
\ 00000052 26D2 BCS.N ??ConfCAN_2
\ 00000054 4579 LDRB R5,[R0, #+5]
\ 00000056 002D CMP R5,#+0
\ 00000058 23D0 BEQ.N ??ConfCAN_2
133 {
134 y=2*x;
\ 0000005A 0225 MOVS R5,#+2
\ 0000005C 03FB05F4 MUL R4,R3,R5
135 CANS->DATA[y]=*p/256,CANS->DLC++;;
\ 00000060 1588 LDRH R5,[R2, #+0]
\ 00000062 5FF48076 MOVS R6,#+256
\ 00000066 95FBF6F5 SDIV R5,R5,R6
\ 0000006A E4B2 UXTB R4,R4 ;; ZeroExtS R4,R4,#+24,#+24
\ 0000006C 0E19 ADDS R6,R1,R4
\ 0000006E 7571 STRB R5,[R6, #+5]
\ 00000070 0D79 LDRB R5,[R1, #+4]
\ 00000072 6D1C ADDS R5,R5,#+1
\ 00000074 0D71 STRB R5,[R1, #+4]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -