📄 ican-mcp2515.lst
字号:
136 CANS->DATA[y+1]=*p&0xff,CANS->DLC++;;
\ 00000076 E4B2 UXTB R4,R4 ;; ZeroExtS R4,R4,#+24,#+24
\ 00000078 0D19 ADDS R5,R1,R4
\ 0000007A 1688 LDRH R6,[R2, #+0]
\ 0000007C AE71 STRB R6,[R5, #+6]
\ 0000007E 0D79 LDRB R5,[R1, #+4]
\ 00000080 6D1C ADDS R5,R5,#+1
\ 00000082 0D71 STRB R5,[R1, #+4]
137 p++;
\ 00000084 921C ADDS R2,R2,#+2
138 CANx->EIDL++;
\ 00000086 C578 LDRB R5,[R0, #+3]
\ 00000088 6D1C ADDS R5,R5,#+1
\ 0000008A C570 STRB R5,[R0, #+3]
139 if(CANx->DATA[0]>=1)CANx->DATA[0]--;
\ 0000008C 4579 LDRB R5,[R0, #+5]
\ 0000008E 012D CMP R5,#+1
\ 00000090 03D3 BCC.N ??ConfCAN_3
\ 00000092 4579 LDRB R5,[R0, #+5]
\ 00000094 6D1E SUBS R5,R5,#+1
\ 00000096 4571 STRB R5,[R0, #+5]
\ 00000098 01E0 B.N ??ConfCAN_4
140 else CANx->DATA[0]=0;
\ ??ConfCAN_3:
\ 0000009A 0025 MOVS R5,#+0
\ 0000009C 4571 STRB R5,[R0, #+5]
141 }
\ ??ConfCAN_4:
\ 0000009E 5B1C ADDS R3,R3,#+1
\ 000000A0 D5E7 B.N ??ConfCAN_1
142 if(CANx->DATA[0]==0)CANS->SiIDL|=0x3; // 数据发完时C0
\ ??ConfCAN_2:
\ 000000A2 4579 LDRB R5,[R0, #+5]
\ 000000A4 002D CMP R5,#+0
\ 000000A6 04D1 BNE.N ??ConfCAN_5
\ 000000A8 4D78 LDRB R5,[R1, #+1]
\ 000000AA 55F00305 ORRS R5,R5,#0x3
\ 000000AE 4D70 STRB R5,[R1, #+1]
\ 000000B0 03E0 B.N ??ConfCAN_6
143 else CANS->SiIDL|=0X1;
\ ??ConfCAN_5:
\ 000000B2 4D78 LDRB R5,[R1, #+1]
\ 000000B4 55F00105 ORRS R5,R5,#0x1
\ 000000B8 4D70 STRB R5,[R1, #+1]
144 #if 0
145 CANS->SiIDH=0XAA;
146 CANS->EIDM=0XAA;
147 CANS->EIDL=0X1;
148 CANS->DLC=0;
149 CANS->DATA[0]=0XBB;
150 CANS->DATA[1]=0X7F;
151 CANS->DATA[2]=0X7F;
152 CANS->DATA[3]=0X7F;
153 CANS->DATA[4]=0X7F;
154 CANS->DATA[5]=0X7F;
155 CANS->DATA[6]=0X7F;
156 CANS->DATA[7]=0X7F;
157 CANS->SiIDL=8;
158 #endif
159 }
\ ??ConfCAN_6:
\ 000000BA 01B0 ADD SP,SP,#+4
\ 000000BC 70BC POP {R4-R6}
\ 000000BE 7047 BX LR ;; return
160 //---------------------------------------------------------
161 //---------------------------------------------------------
\ In section .XML, align 4, keep-with-next
162 WriteCAN(const CAN_BUS *WCAN,unsigned char c)
163 {
\ WriteCAN:
\ 00000000 F1B5 PUSH {R0,R4-R7,LR}
\ 00000002 0400 MOVS R4,R0
\ 00000004 0F00 MOVS R7,R1
164 unsigned char c1,c2,c3;
165 c3=c;
\ 00000006 3E00 MOVS R6,R7
166 SPIByteWrite(c,WCAN->SiIDH);
\ 00000008 2178 LDRB R1,[R4, #+0]
\ 0000000A 3800 MOVS R0,R7
\ 0000000C C0B2 UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
\ 0000000E ........ BL SPIByteWrite
167 SPIByteWrite(++c,WCAN->SiIDL);
\ 00000012 7F1C ADDS R7,R7,#+1
\ 00000014 6178 LDRB R1,[R4, #+1]
\ 00000016 3800 MOVS R0,R7
\ 00000018 C0B2 UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
\ 0000001A ........ BL SPIByteWrite
168 SPIByteWrite(++c,WCAN->EIDM);
\ 0000001E 7F1C ADDS R7,R7,#+1
\ 00000020 A178 LDRB R1,[R4, #+2]
\ 00000022 3800 MOVS R0,R7
\ 00000024 C0B2 UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
\ 00000026 ........ BL SPIByteWrite
169 SPIByteWrite(++c,WCAN->EIDL);
\ 0000002A 7F1C ADDS R7,R7,#+1
\ 0000002C E178 LDRB R1,[R4, #+3]
\ 0000002E 3800 MOVS R0,R7
\ 00000030 C0B2 UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
\ 00000032 ........ BL SPIByteWrite
170 SPIByteWrite(++c,WCAN->DLC);
\ 00000036 7F1C ADDS R7,R7,#+1
\ 00000038 2179 LDRB R1,[R4, #+4]
\ 0000003A 3800 MOVS R0,R7
\ 0000003C C0B2 UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
\ 0000003E ........ BL SPIByteWrite
171 c1=WCAN->DLC&0xf;
\ 00000042 2079 LDRB R0,[R4, #+4]
\ 00000044 0007 LSLS R0,R0,#+28 ;; ZeroExtS R0,R0,#+28,#+28
\ 00000046 000F LSRS R0,R0,#+28
\ 00000048 8DF80000 STRB R0,[SP, #+0]
172 for(c2=0;c2<c1;c2++)
\ 0000004C 0020 MOVS R0,#+0
\ 0000004E 0500 MOVS R5,R0
\ ??WriteCAN_0:
\ 00000050 9DF80000 LDRB R0,[SP, #+0]
\ 00000054 EDB2 UXTB R5,R5 ;; ZeroExtS R5,R5,#+24,#+24
\ 00000056 8542 CMP R5,R0
\ 00000058 09D2 BCS.N ??WriteCAN_1
173 SPIByteWrite(++c,WCAN->DATA[c2]);
\ 0000005A 7F1C ADDS R7,R7,#+1
\ 0000005C EDB2 UXTB R5,R5 ;; ZeroExtS R5,R5,#+24,#+24
\ 0000005E 6019 ADDS R0,R4,R5
\ 00000060 4179 LDRB R1,[R0, #+5]
\ 00000062 3800 MOVS R0,R7
\ 00000064 C0B2 UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
\ 00000066 ........ BL SPIByteWrite
\ 0000006A 6D1C ADDS R5,R5,#+1
\ 0000006C F0E7 B.N ??WriteCAN_0
174
175 if(c3==TXB0SIDH)SPIByteWrite(TXB0CTRL,8);
\ ??WriteCAN_1:
\ 0000006E F6B2 UXTB R6,R6 ;; ZeroExtS R6,R6,#+24,#+24
\ 00000070 312E CMP R6,#+49
\ 00000072 04D1 BNE.N ??WriteCAN_2
\ 00000074 0821 MOVS R1,#+8
\ 00000076 3020 MOVS R0,#+48
\ 00000078 ........ BL SPIByteWrite
\ 0000007C 0EE0 B.N ??WriteCAN_3
176 else if(c3==TXB1SIDH)SPIByteWrite(TXB1CTRL,8);
\ ??WriteCAN_2:
\ 0000007E F6B2 UXTB R6,R6 ;; ZeroExtS R6,R6,#+24,#+24
\ 00000080 412E CMP R6,#+65
\ 00000082 04D1 BNE.N ??WriteCAN_4
\ 00000084 0821 MOVS R1,#+8
\ 00000086 4020 MOVS R0,#+64
\ 00000088 ........ BL SPIByteWrite
\ 0000008C 06E0 B.N ??WriteCAN_3
177 else if(c3==TXB2SIDH)SPIByteWrite(TXB2CTRL,8);
\ ??WriteCAN_4:
\ 0000008E F6B2 UXTB R6,R6 ;; ZeroExtS R6,R6,#+24,#+24
\ 00000090 512E CMP R6,#+81
\ 00000092 03D1 BNE.N ??WriteCAN_3
\ 00000094 0821 MOVS R1,#+8
\ 00000096 5020 MOVS R0,#+80
\ 00000098 ........ BL SPIByteWrite
178 }
\ ??WriteCAN_3:
\ 0000009C 01B0 ADD SP,SP,#+4
\ 0000009E F0BD POP {R4-R7,PC} ;; return
179 /////////////////////////////////////////////////////////////
180
\ In section .XML, align 4, keep-with-next
181 void Init2515(Int8U m)
182 {
\ Init2515:
\ 00000000 31B5 PUSH {R0,R4,R5,LR}
\ 00000002 0500 MOVS R5,R0
183 Int16U i;
184 SPIReset();
\ 00000004 ........ BL SPIReset
185 delay_nop(100);
\ 00000008 6420 MOVS R0,#+100
\ 0000000A ........ BL delay_nop
186
187 SPIByteWrite(RXB0CTRL,0x00);//清RXB0
\ 0000000E 0021 MOVS R1,#+0
\ 00000010 6020 MOVS R0,#+96
\ 00000012 ........ BL SPIByteWrite
188 //Clear masks to RX all messages
189 SPIByteWrite(RXM0SIDH,0x00);//标准标识低位
\ 00000016 0021 MOVS R1,#+0
\ 00000018 2020 MOVS R0,#+32
\ 0000001A ........ BL SPIByteWrite
190 SPIByteWrite(RXM0SIDL,0x00);//标准标识高位
\ 0000001E 0021 MOVS R1,#+0
\ 00000020 2120 MOVS R0,#+33
\ 00000022 ........ BL SPIByteWrite
191 //Clear filter... really only concerned to clear EXIDE bit
192 SPIByteWrite(RXF0SIDH,0x00);//验收滤波器H位
\ 00000026 0021 MOVS R1,#+0
\ 00000028 0020 MOVS R0,#+0
\ 0000002A ........ BL SPIByteWrite
193 SPIByteWrite(RXF0SIDL,0x08);//验收滤波器L位
\ 0000002E 0821 MOVS R1,#+8
\ 00000030 0120 MOVS R0,#+1
\ 00000032 ........ BL SPIByteWrite
194 SPIByteWrite(RXF0EID8,0x3F);//验收滤波器扩展8~15位
\ 00000036 3F21 MOVS R1,#+63
\ 00000038 0220 MOVS R0,#+2
\ 0000003A ........ BL SPIByteWrite
195 SPIByteWrite(RXF0EID0,0x0);//验收滤波器扩展0-7位
\ 0000003E 0021 MOVS R1,#+0
\ 00000040 0320 MOVS R0,#+3
\ 00000042 ........ BL SPIByteWrite
196
197 //Set CNF1
198 m=CAN_RATE_TAB[m];
\ 00000046 EDB2 UXTB R5,R5 ;; ZeroExtS R5,R5,#+24,#+24
\ 00000048 3348 LDR.N R0,??Init2515_0 ;; CAN_RATE_TAB
\ 0000004A 455D LDRB R5,[R0, R5]
199 SPIByteWrite(CNF1,m);//分频CAN_125kbps
\ 0000004C 2900 MOVS R1,R5
\ 0000004E C9B2 UXTB R1,R1 ;; ZeroExtS R1,R1,#+24,#+24
\ 00000050 2A20 MOVS R0,#+42
\ 00000052 ........ BL SPIByteWrite
200
201 //Set CNF2
202 SPIByteWrite(CNF2,0x80 | PHSEG1_3TQ | PRSEG_1TQ);
\ 00000056 9021 MOVS R1,#+144
\ 00000058 2920 MOVS R0,#+41
\ 0000005A ........ BL SPIByteWrite
203
204 //Set CNF3
205 SPIByteWrite(CNF3, PHSEG2_3TQ);
\ 0000005E 0221 MOVS R1,#+2
\ 00000060 2820 MOVS R0,#+40
\ 00000062 ........ BL SPIByteWrite
206
207 //Set TXB0 DLC and Data for a "Write Register" Input Message to the MCP25020
208 SPIByteWrite(TXB0SIDH,0xA0); //发送器标识符高位
\ 00000066 A021 MOVS R1,#+160
\ 00000068 3120 MOVS R0,#+49
\ 0000006A ........ BL SPIByteWrite
209 SPIByteWrite(TXB0SIDL,0xe8); //
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -