📄 mcp2515.lst
字号:
315 case BandRate_100kbps:
316 MCP2515_Write(CNF1, SJW1|0x4); //Synchronization Jump Width Length =1 TQ
\ ??MCP2515_SetBandRate_6:
\ 000000F8 0410A0E3 MOV R1,#+4
\ 000000FC 2A00A0E3 MOV R0,#+42
\ 00000100 ........ BL MCP2515_Write
317 MCP2515_Write(CNF2, BTLMODE_CNF3|(SEG4<<3)|SEG7); // Phase Seg 1 = 4, Prop Seg = 7
\ 00000104 9E10A0E3 MOV R1,#+158
\ 00000108 2900A0E3 MOV R0,#+41
\ 0000010C ........ BL MCP2515_Write
318 MCP2515_Write(CNF3, SEG4); // Phase Seg 2 = 4
\ 00000110 0310A0E3 MOV R1,#+3
\ 00000114 2800A0E3 MOV R0,#+40
\ 00000118 ........ BL MCP2515_Write
\ 0000011C 440000EA B ??MCP2515_SetBandRate_1
319 break;
320
321 case BandRate_125kbps:
322 MCP2515_Write(CNF1, SJW1|BRP4); //Synchronization Jump Width Length =1 TQ
\ ??MCP2515_SetBandRate_7:
\ 00000120 0310A0E3 MOV R1,#+3
\ 00000124 2A00A0E3 MOV R0,#+42
\ 00000128 ........ BL MCP2515_Write
323 MCP2515_Write(CNF2, BTLMODE_CNF3|(SEG4<<3)|SEG7); // Phase Seg 1 = 4, Prop Seg = 7
\ 0000012C 9E10A0E3 MOV R1,#+158
\ 00000130 2900A0E3 MOV R0,#+41
\ 00000134 ........ BL MCP2515_Write
324 MCP2515_Write(CNF3, SEG4); // Phase Seg 2 = 4
\ 00000138 0310A0E3 MOV R1,#+3
\ 0000013C 2800A0E3 MOV R0,#+40
\ 00000140 ........ BL MCP2515_Write
\ 00000144 3A0000EA B ??MCP2515_SetBandRate_1
325 break;
326
327 case BandRate_142kbps:
328 MCP2515_Write(CNF1, SJW1|0x6); //Synchronization Jump Width Length =1 TQ
\ ??MCP2515_SetBandRate_8:
\ 00000148 0610A0E3 MOV R1,#+6
\ 0000014C 2A00A0E3 MOV R0,#+42
\ 00000150 ........ BL MCP2515_Write
329 MCP2515_Write(CNF2, BTLMODE_CNF3|(SEG3<<3)|SEG2); // Phase Seg 1 = 4, Prop Seg = 7
\ 00000154 9110A0E3 MOV R1,#+145
\ 00000158 2900A0E3 MOV R0,#+41
\ 0000015C ........ BL MCP2515_Write
330 MCP2515_Write(CNF3, SEG2); // Phase Seg 2 = 4
\ 00000160 0110A0E3 MOV R1,#+1
\ 00000164 2800A0E3 MOV R0,#+40
\ 00000168 ........ BL MCP2515_Write
\ 0000016C 300000EA B ??MCP2515_SetBandRate_1
331 break;
332
333 case BandRate_167kbps:
334 MCP2515_Write(CNF1, SJW1|0x2); //Synchronization Jump Width Length =1 TQ
\ ??MCP2515_SetBandRate_9:
\ 00000170 0210A0E3 MOV R1,#+2
\ 00000174 2A00A0E3 MOV R0,#+42
\ 00000178 ........ BL MCP2515_Write
335 MCP2515_Write(CNF2, BTLMODE_CNF3|(SEG4<<3)|SEG7); // Phase Seg 1 = 4, Prop Seg = 7
\ 0000017C 9E10A0E3 MOV R1,#+158
\ 00000180 2900A0E3 MOV R0,#+41
\ 00000184 ........ BL MCP2515_Write
336 MCP2515_Write(CNF3, SEG4); // Phase Seg 2 = 4
\ 00000188 0310A0E3 MOV R1,#+3
\ 0000018C 2800A0E3 MOV R0,#+40
\ 00000190 ........ BL MCP2515_Write
\ 00000194 260000EA B ??MCP2515_SetBandRate_1
337 break;
338
339 case BandRate_200kbps:
340 MCP2515_Write(CNF1, SJW1|BRP5); //Synchronization Jump Width Length =1 TQ
\ ??MCP2515_SetBandRate_10:
\ 00000198 0410A0E3 MOV R1,#+4
\ 0000019C 2A00A0E3 MOV R0,#+42
\ 000001A0 ........ BL MCP2515_Write
341 MCP2515_Write(CNF2, BTLMODE_CNF3|(SEG3<<3)|SEG2); // Phase Seg 1 = 4, Prop Seg = 7
\ 000001A4 9110A0E3 MOV R1,#+145
\ 000001A8 2900A0E3 MOV R0,#+41
\ 000001AC ........ BL MCP2515_Write
342 MCP2515_Write(CNF3, SEG2); // Phase Seg 2 = 4
\ 000001B0 0110A0E3 MOV R1,#+1
\ 000001B4 2800A0E3 MOV R0,#+40
\ 000001B8 ........ BL MCP2515_Write
\ 000001BC 1C0000EA B ??MCP2515_SetBandRate_1
343 break;
344
345 case BandRate_250kbps:
346 MCP2515_Write(CNF1, SJW1|BRP2); //Synchronization Jump Width Length =1 TQ
\ ??MCP2515_SetBandRate_11:
\ 000001C0 0110A0E3 MOV R1,#+1
\ 000001C4 2A00A0E3 MOV R0,#+42
\ 000001C8 ........ BL MCP2515_Write
347 MCP2515_Write(CNF2, BTLMODE_CNF3|(SEG4<<3)|SEG7); // Phase Seg 1 = 4, Prop Seg = 7
\ 000001CC 9E10A0E3 MOV R1,#+158
\ 000001D0 2900A0E3 MOV R0,#+41
\ 000001D4 ........ BL MCP2515_Write
348 MCP2515_Write(CNF3, SEG4); // Phase Seg 2 = 4
\ 000001D8 0310A0E3 MOV R1,#+3
\ 000001DC 2800A0E3 MOV R0,#+40
\ 000001E0 ........ BL MCP2515_Write
\ 000001E4 120000EA B ??MCP2515_SetBandRate_1
349 break;
350
351 case BandRate_500kbps:
352 MCP2515_Write(CNF1, SJW1|BRP1); //Synchronization Jump Width Length =1 TQ
\ ??MCP2515_SetBandRate_12:
\ 000001E8 0010A0E3 MOV R1,#+0
\ 000001EC 2A00A0E3 MOV R0,#+42
\ 000001F0 ........ BL MCP2515_Write
353 MCP2515_Write(CNF2, BTLMODE_CNF3|(SEG4<<3)|SEG7); // Phase Seg 1 = 4, Prop Seg = 7
\ 000001F4 9E10A0E3 MOV R1,#+158
\ 000001F8 2900A0E3 MOV R0,#+41
\ 000001FC ........ BL MCP2515_Write
354 MCP2515_Write(CNF3, SEG4); // Phase Seg 2 = 4
\ 00000200 0310A0E3 MOV R1,#+3
\ 00000204 2800A0E3 MOV R0,#+40
\ 00000208 ........ BL MCP2515_Write
\ 0000020C 080000EA B ??MCP2515_SetBandRate_1
355 break;
356
357 case BandRate_1Mbps: //
358 MCP2515_Write(CNF1, SJW1|BRP1); //Synchronization Jump Width Length =1 TQ
\ ??MCP2515_SetBandRate_13:
\ 00000210 0010A0E3 MOV R1,#+0
\ 00000214 2A00A0E3 MOV R0,#+42
\ 00000218 ........ BL MCP2515_Write
359 MCP2515_Write(CNF2, BTLMODE_CNF3|(SEG3<<3)|SEG2); // Phase Seg 1 = 2, Prop Seg = 3
\ 0000021C 9110A0E3 MOV R1,#+145
\ 00000220 2900A0E3 MOV R0,#+41
\ 00000224 ........ BL MCP2515_Write
360 MCP2515_Write(CNF3, SEG2); // Phase Seg 2 = 1
\ 00000228 0110A0E3 MOV R1,#+1
\ 0000022C 2800A0E3 MOV R0,#+40
\ 00000230 ........ BL MCP2515_Write
361 break;
362
363 default :
364 break;
365 }
366
367 if(IsBackNormal)
\ ??MCP2515_SetBandRate_1:
\ 00000234 FF5015E2 ANDS R5,R5,#0xFF ;; Zero extend
\ 00000238 000055E3 CMP R5,#+0
\ 0000023C 0200000A BEQ ??MCP2515_SetBandRate_14
368 {
369 //Enable clock output
370 MCP2515_Write(CLKCTRL, MODE_NORMAL | CLKEN | CLK1); //使用外部时钟
\ 00000240 0410A0E3 MOV R1,#+4
\ 00000244 0F00A0E3 MOV R0,#+15
\ 00000248 ........ BL MCP2515_Write
371 }
372
373 MCP2515_Read(CNF3,tmp);
\ ??MCP2515_SetBandRate_14:
\ 0000024C 0610B0E1 MOVS R1,R6
\ 00000250 FF1011E2 ANDS R1,R1,#0xFF ;; Zero extend
\ 00000254 2800A0E3 MOV R0,#+40
\ 00000258 ........ BL MCP2515_Read
374 }
\ 0000025C 7080BDE8 POP {R4-R6,PC} ;; return
375
376
377 //*****************************************************************************
378 //* 函数名称:mcp_write_can_id
379 //* 函数功能:写 CAN ID
380 //* 入口参数:mcp_addr : MCP2515 寄存器地址
381 //* ext : 帧类型(0:标准帧 1:扩展帧)
382 //* *can_id : CAN ID 地址
383 //* 返回值 :无
384 //*****************************************************************************
\ In section .text, align 4, keep-with-next
385 void mcp_write_can_id( unsigned char mcp_addr, unsigned char ext, unsigned int can_id)
386 {
\ mcp_write_can_id:
\ 00000000 F8402DE9 PUSH {R3-R7,LR}
\ 00000004 0040B0E1 MOVS R4,R0
\ 00000008 0150B0E1 MOVS R5,R1
\ 0000000C 0260B0E1 MOVS R6,R2
387 unsigned int canid;
388 unsigned char tbufdata[4];
389 canid = (unsigned int)(can_id & 0x1FFFFFFF);
\ 00000010 8601B0E1 LSLS R0,R6,#+3
\ 00000014 A001B0E1 LSRS R0,R0,#+3
\ 00000018 0070B0E1 MOVS R7,R0
390 if (ext) // 扩展帧
\ 0000001C FF5015E2 ANDS R5,R5,#0xFF ;; Zero extend
\ 00000020 000055E3 CMP R5,#+0
\ 00000024 1200000A BEQ ??mcp_write_can_id_0
391 {
392 tbufdata[EID0] = (unsigned char) (canid & 0xFF); // 取 canid 0~ 7位 EID 0~EID 7
\ 00000028 0370CDE5 STRB R7,[SP, #+3]
393 tbufdata[EID8] = (unsigned char) (canid / 0x100); // 取 canid 8~16位 EID 8~EID15
\ 0000002C 2704B0E1 LSRS R0,R7,#+8
\ 00000030 0200CDE5 STRB R0,[SP, #+2]
394 canid = (unsigned int)( can_id / 0x10000L ); // 取 canid 16~32位
\ 00000034 2608B0E1 LSRS R0,R6,#+16
\ 00000038 0070B0E1 MOVS R7,R0
395 tbufdata[SIDL] = (unsigned char) (canid & 0x03); // 取 canid 16~17位 EID16~EID17
\ 0000003C 0700B0E1 MOVS R0,R7
\ 00000040 030010E2 ANDS R0,R0,#0x3
\ 00000044 0100CDE5 STRB R0,[SP, #+1]
396 tbufdata[SIDL] += (unsigned char) ((canid & 0x1C)<<3); // 取 canid 18~20位 SID 0~SID 2
\ 00000048 0100DDE5 LDRB R0,[SP, #+1]
\ 0000004C 0710B0E1 MOVS R1,R7
\ 00000050 1C1011E2 ANDS R1,R1,#0x1C
\ 00000054 810190E0 ADDS R0,R0,R1, LSL #+3
\ 00000058 0100CDE5 STRB R0,[SP, #+1]
397 tbufdata[SIDL] |= TXB_EXIDE_M; //
\ 0000005C 0100DDE5 LDRB R0,[SP, #+1]
\ 00000060 080090E3 ORRS R0,R0,#0x8
\ 00000064 0100CDE5 STRB R0,[SP, #+1]
398 tbufdata[SIDH] = (unsigned char) (canid / 32 ); // 取 canid 21~29位 SID 3~SID10
\ 00000068 A702B0E1 LSRS R0,R7,#+5
\ 0000006C 0000CDE5 STRB R0,[SP, #+0]
\ 00000070 080000EA B ??mcp_write_can_id_1
399 }
400 else // 标准帧
401 {
402 tbufdata[SIDH] = (unsigned char) (canid / 8 );
\ ??mcp_write_can_id_0:
\ 00000074 A701B0E1 LSRS R0,R7,#+3
\ 00000078 0000CDE5 STRB R0,[SP, #+0]
403 tbufdata[SIDL] = (unsigned char) ((canid & 0x07 )<<5); //*32
\ 0000007C 0700B0E1 MOVS R0,R7
\ 00000080 8002B0E1 LSLS R0,R0,#+5
\ 00000084 0100CDE5 STRB R0,[SP, #+1]
404 tbufdata[EID0] = 0;
\ 00000088 0010A0E3 MOV R1,#+0
\ 0000008C 0310CDE5 STRB R1,[SP, #+3]
405 tbufdata[EID8] = 0;
\ 00000090 0010A0E3 MOV R1,#+0
\ 00000094 0210CDE5 STRB R1,[SP, #+2]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -