📄 stm32f10x_can.txt
字号:
;;;280
;;;281 }
;;;282
;;;283 /* Filter Mode */
;;;284 if (CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdMask)
0001c2 7843 LDRB r3,[r0,#1]
0001c4 b92b CBNZ r3,|L1.466|
;;;285 {
;;;286 /*Id/Mask mode for the filter*/
;;;287 CAN->FM0R &= ~(u32)FilterNumber_BitPos;
0001c6 f8d2f8d2 LDR r3,[r2,#0x604]
0001ca 438b BICS r3,r3,r1
0001cc f8c2f8c2 STR r3,[r2,#0x604]
0001d0 e004 B |L1.476|
|L1.466|
;;;288 }
;;;289 else /* CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdList */
;;;290 {
;;;291 /*Identifier list mode for the filter*/
;;;292 CAN->FM0R |= (u32)FilterNumber_BitPos;
0001d2 f8d2f8d2 LDR r3,[r2,#0x604]
0001d6 430b ORRS r3,r3,r1
0001d8 f8c2f8c2 STR r3,[r2,#0x604]
|L1.476|
;;;293 }
;;;294
;;;295 /* Filter FIFO assignment */
;;;296 if (CAN_FilterInitStruct->CAN_FilterFIFOAssignment == CAN_FilterFIFO0)
0001dc 8983 LDRH r3,[r0,#0xc]
0001de b923 CBNZ r3,|L1.490|
;;;297 {
;;;298 /* FIFO 0 assignation for the filter */
;;;299 CAN->FFA0R &= ~(u32)FilterNumber_BitPos;
0001e0 f8d2f8d2 LDR r3,[r2,#0x614]
0001e4 438b BICS r3,r3,r1
0001e6 f8c2f8c2 STR r3,[r2,#0x614]
|L1.490|
;;;300 }
;;;301 if (CAN_FilterInitStruct->CAN_FilterFIFOAssignment == CAN_FilterFIFO1)
0001ea 8983 LDRH r3,[r0,#0xc]
0001ec 2b01 CMP r3,#1
0001ee d104 BNE |L1.506|
;;;302 {
;;;303 /* FIFO 1 assignation for the filter */
;;;304 CAN->FFA0R |= (u32)FilterNumber_BitPos;
0001f0 f8d2f8d2 LDR r3,[r2,#0x614]
0001f4 430b ORRS r3,r3,r1
0001f6 f8c2f8c2 STR r3,[r2,#0x614]
|L1.506|
;;;305 }
;;;306
;;;307 /* Filter activation */
;;;308 if (CAN_FilterInitStruct->CAN_FilterActivation == ENABLE)
0001fa 7b80 LDRB r0,[r0,#0xe]
0001fc 2801 CMP r0,#1
0001fe d104 BNE |L1.522|
;;;309 {
;;;310 CAN->FA0R |= FilterNumber_BitPos;
000200 f8d2f8d2 LDR r0,[r2,#0x61c]
000204 4308 ORRS r0,r0,r1
000206 f8c2f8c2 STR r0,[r2,#0x61c]
|L1.522|
;;;311 }
;;;312
;;;313 /* Leave the initialisation mode for the filter */
;;;314 CAN->FMR &= ~CAN_FMR_FINIT;
00020a f8d2f8d2 LDR r0,[r2,#0x600]
00020e f020f020 BIC r0,r0,#1
000212 f8c2f8c2 STR r0,[r2,#0x600]
;;;315 }
000216 4770 BX lr
;;;316
ENDP
CAN_StructInit PROC
;;;329 /* Initialize the time triggered communication mode */
;;;330 CAN_InitStruct->CAN_TTCM = DISABLE;
000218 2100 MOVS r1,#0
00021a 7001 STRB r1,[r0,#0]
;;;331
;;;332 /* Initialize the automatic bus-off management */
;;;333 CAN_InitStruct->CAN_ABOM = DISABLE;
00021c 7041 STRB r1,[r0,#1]
;;;334
;;;335 /* Initialize the automatic wake-up mode */
;;;336 CAN_InitStruct->CAN_AWUM = DISABLE;
00021e 7081 STRB r1,[r0,#2]
;;;337
;;;338 /* Initialize the no automatic retransmission */
;;;339 CAN_InitStruct->CAN_NART = DISABLE;
000220 70c1 STRB r1,[r0,#3]
;;;340
;;;341 /* Initialize the receive FIFO locked mode */
;;;342 CAN_InitStruct->CAN_RFLM = DISABLE;
000222 7101 STRB r1,[r0,#4]
;;;343
;;;344 /* Initialize the transmit FIFO priority */
;;;345 CAN_InitStruct->CAN_TXFP = DISABLE;
000224 7141 STRB r1,[r0,#5]
;;;346
;;;347 /* Initialize the CAN_Mode member */
;;;348 CAN_InitStruct->CAN_Mode = CAN_Mode_Normal;
000226 7181 STRB r1,[r0,#6]
;;;349
;;;350 /* Initialize the CAN_SJW member */
;;;351 CAN_InitStruct->CAN_SJW = CAN_SJW_0tq;
000228 71c1 STRB r1,[r0,#7]
;;;352
;;;353 /* Initialize the CAN_BS1 member */
;;;354 CAN_InitStruct->CAN_BS1 = CAN_BS1_4tq;
00022a 2103 MOVS r1,#3
00022c 7201 STRB r1,[r0,#8]
;;;355
;;;356 /* Initialize the CAN_BS2 member */
;;;357 CAN_InitStruct->CAN_BS2 = CAN_BS2_3tq;
00022e 2102 MOVS r1,#2
000230 7241 STRB r1,[r0,#9]
;;;358
;;;359 /* Initialize the CAN_Prescaler member */
;;;360 CAN_InitStruct->CAN_Prescaler = 1;
000232 2101 MOVS r1,#1
000234 8141 STRH r1,[r0,#0xa]
;;;361 }
000236 4770 BX lr
;;;362
ENDP
CAN_ITConfig PROC
;;;383
;;;384 if (NewState != DISABLE)
000238 4a73 LDR r2,|L1.1032|
00023a b129 CBZ r1,|L1.584|
;;;385 {
;;;386 /* Enable the selected CAN interrupt */
;;;387 CAN->IER |= CAN_IT;
00023c f8d2f8d2 LDR r1,[r2,#0x414]
000240 4308 ORRS r0,r0,r1
000242 f8c2f8c2 STR r0,[r2,#0x414]
;;;388 }
;;;389 else
;;;390 {
;;;391 /* Disable the selected CAN interrupt */
;;;392 CAN->IER &= ~CAN_IT;
;;;393 }
;;;394 }
000246 4770 BX lr
|L1.584|
000248 f8d2f8d2 LDR r1,[r2,#0x414]
00024c ea21ea21 BIC r0,r1,r0
000250 f8c2f8c2 STR r0,[r2,#0x414]
000254 4770 BX lr
;;;395
ENDP
CAN_Transmit PROC
;;;405 u8 CAN_Transmit(CanTxMsg* TxMessage)
;;;406 {
000256 b410 PUSH {r4}
;;;407 u8 TransmitMailbox = 0;
000258 2200 MOVS r2,#0
;;;408
;;;409 /* Check the parameters */
;;;410 assert(IS_CAN_STDID(TxMessage->StdId));
;;;411 assert(IS_CAN_EXTID(TxMessage->StdId));
;;;412 assert(IS_CAN_IDTYPE(TxMessage->IDE));
;;;413 assert(IS_CAN_RTR(TxMessage->RTR));
;;;414 assert(IS_CAN_DLC(TxMessage->DLC));
;;;415
;;;416 /* Select one empty transmit mailbox */
;;;417 if ((CAN->TSR&CAN_TSR_TME0) == CAN_TSR_TME0)
00025a 4b6b LDR r3,|L1.1032|
00025c f8d3f8d3 LDR r1,[r3,#0x408]
000260 f011f011 TST r1,#0x4000000
000264 d10e BNE |L1.644|
;;;418 {
;;;419 TransmitMailbox = 0;
;;;420 }
;;;421 else if ((CAN->TSR&CAN_TSR_TME1) == CAN_TSR_TME1)
000266 f8d3f8d3 LDR r1,[r3,#0x408]
00026a f011f011 TST r1,#0x8000000
00026e d001 BEQ |L1.628|
;;;422 {
;;;423 TransmitMailbox = 1;
000270 2201 MOVS r2,#1
000272 e007 B |L1.644|
|L1.628|
;;;424 }
;;;425 else if ((CAN->TSR&CAN_TSR_TME2) == CAN_TSR_TME2)
000274 f8d3f8d3 LDR r1,[r3,#0x408]
000278 f011f011 TST r1,#0x10000000
00027c d001 BEQ |L1.642|
;;;426 {
;;;427 TransmitMailbox = 2;
00027e 2202 MOVS r2,#2
000280 e000 B |L1.644|
|L1.642|
;;;428 }
;;;429 else
;;;430 {
;;;431 TransmitMailbox = CAN_NO_MB;
000282 2204 MOVS r2,#4
|L1.644|
;;;432 }
;;;433
;;;434 if (TransmitMailbox != CAN_NO_MB)
000284 2a04 CMP r2,#4
000286 d058 BEQ |L1.826|
;;;435 {
;;;436 /* Set up the Id */
;;;437 TxMessage->StdId &= (u32)0x000007FF;
000288 6801 LDR r1,[r0,#0]
;;;438 TxMessage->StdId = TxMessage->StdId << 21;
00028a 0549 LSLS r1,r1,#21
00028c 6001 STR r1,[r0,#0]
;;;439 TxMessage->ExtId &= (u32)0x0003FFFF;
00028e 6841 LDR r1,[r0,#4]
000290 f3c1f3c1 UBFX r1,r1,#0,#18
;;;440 TxMessage->ExtId <<= 3;
000294 00c9 LSLS r1,r1,#3
000296 6041 STR r1,[r0,#4]
;;;441
;;;442 CAN->sTxMailBox[TransmitMailbox].TIR &= CAN_TMIDxR_TXRQ;
000298 eb03eb03 ADD r1,r3,r2,LSL #4
00029c f8d1f8d1 LDR r3,[r1,#0x580]
0002a0 f003f003 AND r3,r3,#1
0002a4 f8c1f8c1 STR r3,[r1,#0x580]
;;;443 CAN->sTxMailBox[TransmitMailbox].TIR |= (TxMessage->StdId | TxMessage->ExtId |
0002a8 f8d0f8d0 LDR r12,[r0,#4]
0002ac 6803 LDR r3,[r0,#0]
0002ae 7a44 LDRB r4,[r0,#9]
0002b0 ea43ea43 ORR r3,r3,r12
0002b4 f890f890 LDRB r12,[r0,#8]
0002b8 ea4cea4c ORR r12,r12,r4
0002bc ea43ea43 ORR r3,r3,r12
0002c0 f8d1f8d1 LDR r12,[r1,#0x580]
0002c4 ea43ea43 ORR r3,r3,r12
0002c8 f8c1f8c1 STR r3,[r1,#0x580]
;;;444 TxMessage->IDE | TxMessage->RTR);
;;;445
;;;446 /* Set up the DLC */
;;;447 TxMessage->DLC &= (u8)0x0000000F;
0002cc 7a83 LDRB r3,[r0,#0xa]
0002ce f003f003 AND r3,r3,#0xf
0002d2 7283 STRB r3,[r0,#0xa]
;;;448 CAN->sTxMailBox[TransmitMailbox].TDTR &= (u32)0xFFFFFFF0;
0002d4 f8d1f8d1 LDR r3,[r1,#0x584]
0002d8 f023f023 BIC r3,r3,#0xf
0002dc f8c1f8c1 STR r3,[r1,#0x584]
;;;449 CAN->sTxMailBox[TransmitMailbox].TDTR |= TxMessage->DLC;
0002e0 f8d1f8d1 LDR r3,[r1,#0x584]
0002e4 f890f890 LDRB r12,[r0,#0xa]
0002e8 ea43ea43 ORR r3,r3,r12
0002ec f8c1f8c1 STR r3,[r1,#0x584]
;;;450
;;;451 /* Set up the data field */
;;;452 CAN->sTxMailBox[TransmitMailbox].TDLR = (((u32)TxMessage->Data[3] << 24) |
0002f0 7ac3 LDRB r3,[r0,#0xb]
0002f2 f890f890 LDRB r12,[r0,#0xe]
0002f6 7b04 LDRB r4,[r0,#0xc]
0002f8 ea43ea43 ORR r3,r3,r12,LSL #24
0002fc f890f890 LDRB r12,[r0,#0xd]
000300 ea4fea4f LSL r12,r12,#16
000304 ea4cea4c ORR r12,r12,r4,LSL #8
000308 ea43ea43 ORR r3,r3,r12
00030c f8c1f8c1 STR r3,[r1,#0x588]
;;;453 ((u32)TxMessage->Data[2] << 16) |
;;;454 ((u32)TxMessage->Data[1] << 8) |
;;;455 ((u32)TxMessage->Data[0]));
;;;456 CAN->sTxMailBox[TransmitMailbox].TDHR = (((u32)TxMessage->Data[7] << 24) |
000310 7bc3 LDRB r3,[r0,#0xf]
000312 f890f890 LDRB r12,[r0,#0x12]
000316 ea43ea43 ORR r3,r3,r12,LSL #24
00031a f890f890 LDRB r12,[r0,#0x11]
00031e 7c00 LDRB r0,[r0,#0x10]
000320 ea4fea4f LSL r12,r12,#16
000324 ea4cea4c ORR r0,r12,r0,LSL #8
000328 4318 ORRS r0,r0,r3
00032a f8c1f8c1 STR r0,[r1,#0x58c]
;;;457 ((u32)TxMessage->Data[6] << 16) |
;;;458 ((u32)TxMessage->Data[5] << 8) |
;;;459 ((u32)TxMessage->Data[4]));
;;;460
;;;461 /* Request transmission */
;;;462 CAN->sTxMailBox[TransmitMailbox].TIR |= CAN_TMIDxR_TXRQ;
00032e f8d1f8d1 LDR r0,[r1,#0x580]
000332 f040f040 ORR r0,r0,#1
000336 f8c1f8c1 STR r0,[r1,#0x580]
|L1.826|
;;;463 }
;;;464
;;;465 return TransmitMailbox;
;;;466 }
00033a bc10 POP {r4}
00033c 4610 MOV r0,r2
00033e 4770 BX lr
;;;467
ENDP
CAN_TransmitStatus PROC
;;;479 /* RQCP, TXOK and TME bits */
;;;480 u32 State = 0;
000340 2100 MOVS r1,#0
;;;481
;;;482 /* Check the parameters */
;;;483 assert(IS_CAN_TRANSMITMAILBOX(TransmitMailbox));
;;;484
;;;485 switch (TransmitMailbox)
000342 4a31 LDR r2,|L1.1032|
000344 b1d8 CBZ r0,|L1.894|
000346 2801 CMP r0,#1
000348 d02a BEQ |L1.928|
00034a 2802 CMP r0,#2
00034c d110 BNE |L1.880|
;;;486 {
;;;487 case (0): State |= ((CAN->TSR & CAN_TSR_RQCP0) << 2);
;;;488 State |= ((CAN->TSR & CAN_TSR_TXOK0) >> 0);
;;;489 State |= ((CAN->TSR & CAN_TSR_TME0) >> 26);
;;;490 break;
;;;491 case (1): State |= ((CAN->TSR & CAN_TSR_RQCP1) >> 6);
;;;492 State |= ((CAN->TSR & CAN_TSR_TXOK1) >> 8);
;;;493 State |= ((CAN->TSR & CAN_TSR_TME1) >> 27);
;;;494 break;
;;;495 case (2): State |= ((CAN->TSR & CAN_TSR_RQCP2) >> 14);
00034e f8d2f8d2 LDR r0,[r2,#0x408]
000352 f400f400 AND r0,r0,#0x10000
000356 ea41ea41 ORR r0,r1,r0,LSR #14
;;;496 State |= ((CAN->TSR & CAN_TSR_TXOK2) >> 16);
00035a f8d2f8d2 LDR r1,[r2,#0x408]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -