📄 ican-mcp2515.lst
字号:
\ 0000006E E821 MOVS R1,#+232
\ 00000070 3220 MOVS R0,#+50
\ 00000072 ........ BL SPIByteWrite
210 SPIByteWrite(TXB0EID8,0XFF); //发送器扩展8-15位
\ 00000076 FF21 MOVS R1,#+255
\ 00000078 3320 MOVS R0,#+51
\ 0000007A ........ BL SPIByteWrite
211 SPIByteWrite(TXB0EID0,0XA8);
\ 0000007E A821 MOVS R1,#+168
\ 00000080 3420 MOVS R0,#+52
\ 00000082 ........ BL SPIByteWrite
212 SPIByteWrite(TXB0DLC,DLC_3);// 发送数据字节长度,0-8字节
\ 00000086 0321 MOVS R1,#+3
\ 00000088 3520 MOVS R0,#+53
\ 0000008A ........ BL SPIByteWrite
213 SPIByteWrite(TXB0D0,0x6); //发送器发送数据D0
\ 0000008E 0621 MOVS R1,#+6
\ 00000090 3620 MOVS R0,#+54
\ 00000092 ........ BL SPIByteWrite
214 SPIByteWrite(TXB0D1,0xff); //D1 = Mask = 0x10
\ 00000096 FF21 MOVS R1,#+255
\ 00000098 3720 MOVS R0,#+55
\ 0000009A ........ BL SPIByteWrite
215 SPIByteWrite(TXB0D2,0xff);
\ 0000009E FF21 MOVS R1,#+255
\ 000000A0 3820 MOVS R0,#+56
\ 000000A2 ........ BL SPIByteWrite
216
217 //Set TXB1 DLC and Data for a "READ I/O IRM"
218 SPIByteWrite(TXB1SIDH,0x50); //Set TXB0 SIDH
\ 000000A6 5021 MOVS R1,#+80
\ 000000A8 4120 MOVS R0,#+65
\ 000000AA ........ BL SPIByteWrite
219 SPIByteWrite(TXB1SIDL,0x00); //Set TXB0 SIDL
\ 000000AE 0021 MOVS R1,#+0
\ 000000B0 4220 MOVS R0,#+66
\ 000000B2 ........ BL SPIByteWrite
220 SPIByteWrite(TXB1DLC,0x40 | DLC_8); //Set DLC = 3 bytes and RTR bit
\ 000000B6 4821 MOVS R1,#+72
\ 000000B8 4520 MOVS R0,#+69
\ 000000BA ........ BL SPIByteWrite
221
222 //Interrupt on RXB0 - CANINTE
223 SPIByteWrite(CANINTE,0x01); //
\ 000000BE 0121 MOVS R1,#+1
\ 000000C0 2B20 MOVS R0,#+43
\ 000000C2 ........ BL SPIByteWrite
224
225
226 delay_nop(100);
\ 000000C6 6420 MOVS R0,#+100
\ 000000C8 ........ BL delay_nop
227 i=SPIByteRead(RXF0EID8);
\ 000000CC 0220 MOVS R0,#+2
\ 000000CE ........ BL SPIByteRead
\ 000000D2 0400 MOVS R4,R0
228 SPIByteWrite(CANCTRL,REQOP_NORMAL | CLKOUT_DISABLE);//正常工作+时钟开
\ 000000D4 0821 MOVS R1,#+8
\ 000000D6 0F20 MOVS R0,#+15
\ 000000D8 ........ BL SPIByteWrite
229
230 i = SPIByteRead(CANSTAT);//中断代码
\ 000000DC 0E20 MOVS R0,#+14
\ 000000DE ........ BL SPIByteRead
\ 000000E2 0400 MOVS R4,R0
231
232 SPIByteWrite(TXB0CTRL, 0);//无报文,清0
\ 000000E4 0021 MOVS R1,#+0
\ 000000E6 3020 MOVS R0,#+48
\ 000000E8 ........ BL SPIByteWrite
233 i=0;
\ 000000EC 0020 MOVS R0,#+0
\ 000000EE 0400 MOVS R4,R0
234 while((SPIByteRead(CAN_RD_STATUS)&0x54)&&i<25000)
\ ??Init2515_1:
\ 000000F0 A020 MOVS R0,#+160
\ 000000F2 ........ BL SPIByteRead
\ 000000F6 10F0540F TST R0,#0x54
\ 000000FA 07D0 BEQ.N ??Init2515_2
\ 000000FC 0748 LDR.N R0,??Init2515_0+0x4 ;; 0x61a8
\ 000000FE A4B2 UXTH R4,R4 ;; ZeroExtS R4,R4,#+16,#+16
\ 00000100 8442 CMP R4,R0
\ 00000102 03D2 BCS.N ??Init2515_2
235 {
236 WWDG_ClearFlag();//快速读,清空发
\ 00000104 ........ BL WWDG_ClearFlag
237 ++i;
\ 00000108 641C ADDS R4,R4,#+1
\ 0000010A F1E7 B.N ??Init2515_1
238 }
239 SPIByteWrite(CANINTF,0);
\ ??Init2515_2:
\ 0000010C 0021 MOVS R1,#+0
\ 0000010E 2C20 MOVS R0,#+44
\ 00000110 ........ BL SPIByteWrite
240 }
\ 00000114 01B0 ADD SP,SP,#+4
\ 00000116 30BD POP {R4,R5,PC} ;; return
\ ??Init2515_0:
\ 00000118 ........ DC32 CAN_RATE_TAB
\ 0000011C A8610000 DC32 0x61a8
241 //-----------------------------------------------------------
\ In section .XML, align 4, keep-with-next
242 void Read2551(CAN_BUS *RCAN,unsigned char x)
243 {
\ Read2551:
\ 00000000 31B5 PUSH {R0,R4,R5,LR}
\ 00000002 0400 MOVS R4,R0
\ 00000004 0D00 MOVS R5,R1
244
245 RCAN->SiIDH=SPIByteRead(x);
\ 00000006 2800 MOVS R0,R5
\ 00000008 C0B2 UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
\ 0000000A ........ BL SPIByteRead
\ 0000000E 2070 STRB R0,[R4, #+0]
246 RCAN->SiIDL=SPIByteRead(++x);
\ 00000010 6D1C ADDS R5,R5,#+1
\ 00000012 2800 MOVS R0,R5
\ 00000014 C0B2 UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
\ 00000016 ........ BL SPIByteRead
\ 0000001A 6070 STRB R0,[R4, #+1]
247 RCAN->EIDM=SPIByteRead(++x);
\ 0000001C 6D1C ADDS R5,R5,#+1
\ 0000001E 2800 MOVS R0,R5
\ 00000020 C0B2 UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
\ 00000022 ........ BL SPIByteRead
\ 00000026 A070 STRB R0,[R4, #+2]
248 RCAN->EIDL=SPIByteRead(++x);
\ 00000028 6D1C ADDS R5,R5,#+1
\ 0000002A 2800 MOVS R0,R5
\ 0000002C C0B2 UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
\ 0000002E ........ BL SPIByteRead
\ 00000032 E070 STRB R0,[R4, #+3]
249 RCAN->DLC=SPIByteRead(++x);
\ 00000034 6D1C ADDS R5,R5,#+1
\ 00000036 2800 MOVS R0,R5
\ 00000038 C0B2 UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
\ 0000003A ........ BL SPIByteRead
\ 0000003E 2071 STRB R0,[R4, #+4]
250
251 RCAN->DATA[0]=SPIByteRead(++x);
\ 00000040 6D1C ADDS R5,R5,#+1
\ 00000042 2800 MOVS R0,R5
\ 00000044 C0B2 UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
\ 00000046 ........ BL SPIByteRead
\ 0000004A 6071 STRB R0,[R4, #+5]
252 RCAN->DATA[1]=SPIByteRead(++x);
\ 0000004C 6D1C ADDS R5,R5,#+1
\ 0000004E 2800 MOVS R0,R5
\ 00000050 C0B2 UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
\ 00000052 ........ BL SPIByteRead
\ 00000056 A071 STRB R0,[R4, #+6]
253 RCAN->DATA[2]=SPIByteRead(++x);
\ 00000058 6D1C ADDS R5,R5,#+1
\ 0000005A 2800 MOVS R0,R5
\ 0000005C C0B2 UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
\ 0000005E ........ BL SPIByteRead
\ 00000062 E071 STRB R0,[R4, #+7]
254 RCAN->DATA[3]=SPIByteRead(++x);
\ 00000064 6D1C ADDS R5,R5,#+1
\ 00000066 2800 MOVS R0,R5
\ 00000068 C0B2 UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
\ 0000006A ........ BL SPIByteRead
\ 0000006E 2072 STRB R0,[R4, #+8]
255 RCAN->DATA[4]=SPIByteRead(++x);
\ 00000070 6D1C ADDS R5,R5,#+1
\ 00000072 2800 MOVS R0,R5
\ 00000074 C0B2 UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
\ 00000076 ........ BL SPIByteRead
\ 0000007A 6072 STRB R0,[R4, #+9]
256 RCAN->DATA[5]=SPIByteRead(++x);
\ 0000007C 6D1C ADDS R5,R5,#+1
\ 0000007E 2800 MOVS R0,R5
\ 00000080 C0B2 UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
\ 00000082 ........ BL SPIByteRead
\ 00000086 A072 STRB R0,[R4, #+10]
257 RCAN->DATA[6]=SPIByteRead(++x);
\ 00000088 6D1C ADDS R5,R5,#+1
\ 0000008A 2800 MOVS R0,R5
\ 0000008C C0B2 UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
\ 0000008E ........ BL SPIByteRead
\ 00000092 E072 STRB R0,[R4, #+11]
258 RCAN->DATA[7]=SPIByteRead(++x);
\ 00000094 6D1C ADDS R5,R5,#+1
\ 00000096 2800 MOVS R0,R5
\ 00000098 C0B2 UXTB R0,R0 ;; ZeroExtS R0,R0,#+24,#+24
\ 0000009A ........ BL SPIByteRead
\ 0000009E 2073 STRB R0,[R4, #+12]
259 }
\ 000000A0 01B0 ADD SP,SP,#+4
\ 000000A2 30BD POP {R4,R5,PC} ;; return
260 //-----------------------------------------------------------------------------
261 // RTS(buffer)
262 // buffer = CAN_RTS_TXBn; where 'n' = 0, 1, 2
263 // buffer = CAN_RTS; followed by | 0 - 7 (e.g., CAN_RTS | 7)
264 //发送操作,buffer分出是那个发送器
265 //-----------------------------------------------------------------------------
\ In section .XML, align 4, keep-with-next
266 Boolean RTS(CAN_BUS *CANx,CAN_BUS *CANS,const Int16U *p)//发送操作
267 {
\ RTS:
\ 00000000 F1B5 PUSH {R0,R4-R7,LR}
\ 00000002 0400 MOVS R4,R0
\ 00000004 0D00 MOVS R5,R1
\ 00000006 1600 MOVS R6,R2
268 unsigned char x,xdata;
269
270 xdata=SPIFastRead(CAN_RD_STATUS);//读指令,快速读
\ 00000008 A020 MOVS R0,#+160
\ 0000000A ........ BL SPIFastRead
\ 0000000E 0700 MOVS R7,R0
271 CANx->SiIDL=0;
\ 00000010 0020 MOVS R0,#+0
\ 00000012 6070 STRB R0,[R4, #+1]
272
273 if((CANx->CANFUN)==C_CAN_READ)
\ 00000014 6078 LDRB R0,[R4, #+1]
\ 00000016 10F0E00F TST R0,#0xE0
\ 0000001A 28D1 BNE.N ??RTS_0
274 {
275 if((xdata&0x04)==0x04)return 0xff;
\ 0000001C FFB2 UXTB R7,R7 ;; ZeroExtS R7,R7,#+24,#+24
\ 0000001E 7807 LSLS R0,R7,#+29
\ 00000020 01D5 BPL.N ??RTS_1
\ 00000022 FF20 MOVS R0,#+255
\ 00000024 5BE0 B.N ??RTS_2
276 ConfCAN(CANx,CANS,p);
\ ??RTS_1:
\ 00000026 3200 MOVS R2,R6
\ 00000028 2900 MOVS R1,R5
\ 0000002A 2000 MOVS R0,R4
\ 0000002C ........ BL ConfCAN
277 if((xdata&4)==0)WriteCAN(CANS,TXB0SIDH);
\ 00000030 7807 LSLS R0,R7,#+29
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -