📄 ican-mcp2515.lst
字号:
\ 00000032 04D4 BMI.N ??RTS_3
\ 00000034 3121 MOVS R1,#+49
\ 00000036 2800 MOVS R0,R5
\ 00000038 ........ BL WriteCAN
\ 0000003C 0CE0 B.N ??RTS_4
278 else if((xdata&0x10)==0)WriteCAN(CANS,TXB1SIDH);
\ ??RTS_3:
\ 0000003E F806 LSLS R0,R7,#+27
\ 00000040 04D4 BMI.N ??RTS_5
\ 00000042 4121 MOVS R1,#+65
\ 00000044 2800 MOVS R0,R5
\ 00000046 ........ BL WriteCAN
\ 0000004A 05E0 B.N ??RTS_4
279 else if((xdata&0x40)==0)WriteCAN(CANS,TXB2SIDH);
\ ??RTS_5:
\ 0000004C 7806 LSLS R0,R7,#+25
\ 0000004E 03D4 BMI.N ??RTS_4
\ 00000050 5121 MOVS R1,#+81
\ 00000052 2800 MOVS R0,R5
\ 00000054 ........ BL WriteCAN
280 x=CANx->CANlen;
\ ??RTS_4:
\ 00000058 6079 LDRB R0,[R4, #+5]
\ 0000005A 8DF80000 STRB R0,[SP, #+0]
281 if(x==0)return 0;
\ 0000005E 9DF80010 LDRB R1,[SP, #+0]
\ 00000062 481E SUBS R0,R1,#+1
\ 00000064 8041 SBCS R0,R0,R0
\ 00000066 C043 MVNS R0,R0
\ 00000068 C00F LSRS R0,R0,#+31
\ 0000006A C0B2 UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
\ 0000006C 37E0 B.N ??RTS_2
282 else return 1;
283 }
284 if((CANx->CANFUN)==C_CAN_WRITE)
285 {
286
287 }
288
289 if((CANx->CANFUN)==C_CAN_ERROR&&(xdata&4)==0)
\ ??RTS_0:
\ 0000006E 6078 LDRB R0,[R4, #+1]
\ 00000070 10F0E000 ANDS R0,R0,#0xE0
\ 00000074 E028 CMP R0,#+224
\ 00000076 31D1 BNE.N ??RTS_6
\ 00000078 7807 LSLS R0,R7,#+29
\ 0000007A 2FD4 BMI.N ??RTS_6
290 {
291 CANS->SiIDH=*(p+C_PrductADD);//发送的标准标识符滤波10-3 ,产品地址
\ 0000007C 3088 LDRH R0,[R6, #+0]
\ 0000007E 2870 STRB R0,[R5, #+0]
292 CANS->SiIDL=0xE0;//功能码.标准标识符滤波位0,IDH的b5与IDL的b5
\ 00000080 E020 MOVS R0,#+224
\ 00000082 6870 STRB R0,[R5, #+1]
293 CANS->SiIDL|=8; //mcp2515报文滤波用于0=标准帧1=扩展帧//本应用中为扩展帧
\ 00000084 6878 LDRB R0,[R5, #+1]
\ 00000086 50F00800 ORRS R0,R0,#0x8
\ 0000008A 6870 STRB R0,[R5, #+1]
294 CANS->SiIDL|=1;
\ 0000008C 6878 LDRB R0,[R5, #+1]
\ 0000008E 50F00100 ORRS R0,R0,#0x1
\ 00000092 6870 STRB R0,[R5, #+1]
295 CANS->EIDM=CANx->EIDM&0x80;//通讯类型
\ 00000094 A078 LDRB R0,[R4, #+2]
\ 00000096 8021 MOVS R1,#+128
\ 00000098 0140 ANDS R1,R1,R0
\ 0000009A A970 STRB R1,[R5, #+2]
296 CANS->EIDM|=CANx->SiIDH&0X7F;
\ 0000009C A878 LDRB R0,[R5, #+2]
\ 0000009E 2178 LDRB R1,[R4, #+0]
\ 000000A0 4906 LSLS R1,R1,#+25 ;; ZeroExtS R1,R1,#+25,#+25
\ 000000A2 490E LSRS R1,R1,#+25
\ 000000A4 0143 ORRS R1,R1,R0
\ 000000A6 A970 STRB R1,[R5, #+2]
297 CANS->EIDL=CANx->EIDL; //CAN.EIDL start address ,CAN.DATA[0] len
\ 000000A8 E078 LDRB R0,[R4, #+3]
\ 000000AA E870 STRB R0,[R5, #+3]
298 CANS->DLC=0;
\ 000000AC 0020 MOVS R0,#+0
\ 000000AE 2871 STRB R0,[R5, #+4]
299 if((xdata&4)==0)WriteCAN(CANS,TXB0SIDH);
\ 000000B0 7807 LSLS R0,R7,#+29
\ 000000B2 04D4 BMI.N ??RTS_7
\ 000000B4 3121 MOVS R1,#+49
\ 000000B6 2800 MOVS R0,R5
\ 000000B8 ........ BL WriteCAN
\ 000000BC 0CE0 B.N ??RTS_8
300 else if((xdata&0x10)==0)WriteCAN(CANS,TXB1SIDH);
\ ??RTS_7:
\ 000000BE F806 LSLS R0,R7,#+27
\ 000000C0 04D4 BMI.N ??RTS_9
\ 000000C2 4121 MOVS R1,#+65
\ 000000C4 2800 MOVS R0,R5
\ 000000C6 ........ BL WriteCAN
\ 000000CA 05E0 B.N ??RTS_8
301 else if((xdata&0x40)==0)WriteCAN(CANS,TXB2SIDH);
\ ??RTS_9:
\ 000000CC 7806 LSLS R0,R7,#+25
\ 000000CE 03D4 BMI.N ??RTS_8
\ 000000D0 5121 MOVS R1,#+81
\ 000000D2 2800 MOVS R0,R5
\ 000000D4 ........ BL WriteCAN
302 return 0;
\ ??RTS_8:
\ 000000D8 0020 MOVS R0,#+0
\ 000000DA 00E0 B.N ??RTS_2
303 }
304 if((CANx->CANFUN)==3)
305 {
306
307 }
308 if((CANx->CANFUN)==4)
309 {
310 if(xdata&4) return 0xff;
311 CANS->SiIDL=0;
312 if(CANx->SiIDH&0X20)CANS->SiIDL|=0x20;
313 CANS->SiIDL|=8;
314 x=(CANx->SiIDH&0X18);
315 x>>=3;
316 CANS->SiIDL|=x;
317
318 x=CANx->SiIDH&0X7;
319 x<<=5;
320 CANS->EIDM=0;
321 CANS->EIDM|=x;
322 CANS->EIDM|=0x10;
323 CANS->EIDM|=(CANx->CANFUN);
324 CANS->EIDL=0XF7;
325 CANS->DLC=1;
326 WriteCAN(CANS,TXB0SIDH);
327 return 0;
328 }
329 if((CANx->CANFUN)==5);
330 if(((CANx->CANFUN)==6)||((CANx->CANFUN))==0XF)
331 {
332 if(xdata&4) return 0xff;
333 Init2515(_YT._Rate);
334 CANS->SiIDL=0;
335 if(CANx->SiIDH&0X20)CANS->SiIDL|=0x20;
336 CANS->SiIDL|=8;
337 x=(CANx->SiIDH&0X18);
338 x>>=3;
339 CANS->SiIDL|=x;
340
341 x=CANx->SiIDH&0X7;
342 x<<=5,CANS->EIDM=0;
343 CANS->EIDM|=x;
344 CANS->EIDM|=0x10;
345 CANS->EIDM|=(CANx->CANFUN); //6 or 0X0F
346 CANS->EIDL=CANx->EIDL; //F7 FE
347 CANS->DLC=1;
348 if((xdata&4)==0)
349 WriteCAN(CANS,TXB0SIDH);
350 return 0;
351 }
352 if((CANx->CANFUN)==7);
353 {
354 }
355 return 0;
\ ??RTS_6:
\ 000000DC 0020 MOVS R0,#+0
\ ??RTS_2:
\ 000000DE 01B0 ADD SP,SP,#+4
\ 000000E0 F0BD POP {R4-R7,PC} ;; return
356 }
357
358 //------------------------------------------------
359
\ In section .XML, align 4, keep-with-next
360 unsigned char ReadCAN(CAN_BUS *CANx,unsigned char FLAG,const unsigned char address)
361 {
\ ReadCAN:
\ 00000000 2DE9F041 PUSH {R4-R8,LR}
\ 00000004 9046 MOV R8,R2
\ 00000006 0400 MOVS R4,R0
\ 00000008 0D00 MOVS R5,R1
362 unsigned char x;
363 unsigned int xdata;
364 if(Get_bit(mIO_INT,mINT))return FLAG; //周立功的有个bug,扩展帧b0-7在发04时无法发正确
\ 0000000A 2948 LDR.N R0,??ReadCAN_0 ;; 0x40010c08
\ 0000000C 0168 LDR R1,[R0, #+0]
\ 0000000E 5FF40060 MOVS R0,#+2048
\ 00000012 0840 ANDS R0,R0,R1
\ 00000014 2649 LDR.N R1,??ReadCAN_0 ;; 0x40010c08
\ 00000016 0860 STR R0,[R1, #+0]
\ 00000018 0028 CMP R0,#+0
\ 0000001A 02D0 BEQ.N ??ReadCAN_1
\ 0000001C 2800 MOVS R0,R5
\ 0000001E C0B2 UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
\ 00000020 43E0 B.N ??ReadCAN_2
365 xdata=SPIFastRead(CAN_RD_STATUS);//读指令,快速读
\ ??ReadCAN_1:
\ 00000022 A020 MOVS R0,#+160
\ 00000024 ........ BL SPIFastRead
\ 00000028 0700 MOVS R7,R0
366 SPIByteWrite(CANINTF,0);
\ 0000002A 0021 MOVS R1,#+0
\ 0000002C 2C20 MOVS R0,#+44
\ 0000002E ........ BL SPIByteWrite
367 if((xdata&1)==0)return FLAG;
\ 00000032 3800 MOVS R0,R7
\ 00000034 C007 LSLS R0,R0,#+31
\ 00000036 02D4 BMI.N ??ReadCAN_3
\ 00000038 2800 MOVS R0,R5
\ 0000003A C0B2 UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
\ 0000003C 35E0 B.N ??ReadCAN_2
368 x=SPIByteRead(RXB0EID8);//扩展b8-15
\ ??ReadCAN_3:
\ 0000003E 6320 MOVS R0,#+99
\ 00000040 ........ BL SPIByteRead
\ 00000044 0600 MOVS R6,R0
369 x&=0x7f;
\ 00000046 7606 LSLS R6,R6,#+25 ;; ZeroExtS R6,R6,#+25,#+25
\ 00000048 760E LSRS R6,R6,#+25
370 if(x!=address)return FLAG;
\ 0000004A 4046 MOV R0,R8
\ 0000004C F6B2 UXTB R6,R6 ;; ZeroExtS R6,R6,#+24,#+24
\ 0000004E C0B2 UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
\ 00000050 8642 CMP R6,R0
\ 00000052 02D0 BEQ.N ??ReadCAN_4
\ 00000054 2800 MOVS R0,R5
\ 00000056 C0B2 UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
\ 00000058 27E0 B.N ??ReadCAN_2
371
372 Read2551(CANx,RXB0SIDH);
\ ??ReadCAN_4:
\ 0000005A 6121 MOVS R1,#+97
\ 0000005C 2000 MOVS R0,R4
\ 0000005E ........ BL Read2551
373 x=(CANx->CANFUN);
\ 00000062 6
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -