?? stm32f10x_can.txt
字號:
00035e f401f401 AND r1,r1,#0x20000
000362 ea40ea40 ORR r0,r0,r1,LSR #16
;;;497 State |= ((CAN->TSR & CAN_TSR_TME2) >> 28);
000366 f8d2f8d2 LDR r1,[r2,#0x408]
00036a f3c1f3c1 UBFX r1,r1,#28,#1
00036e 4301 ORRS r1,r1,r0
|L1.880|
;;;498 break;
;;;499 default:
;;;500 State = CANTXFAILED;
;;;501 break;
;;;502 }
;;;503
;;;504 switch (State)
000370 b341 CBZ r1,|L1.964|
000372 2905 CMP r1,#5
000374 d028 BEQ |L1.968|
000376 2907 CMP r1,#7
000378 d128 BNE |L1.972|
;;;505 {
;;;506 /* transmit pending */
;;;507 case (0x0): State = CANTXPENDING;
;;;508 break;
;;;509 /* transmit failed */
;;;510 case (0x5): State = CANTXFAILED;
;;;511 break;
;;;512 /* transmit succedeed */
;;;513 case (0x7): State = CANTXOK;
00037a 2001 MOVS r0,#1
;;;514 break;
00037c e027 B |L1.974|
|L1.894|
00037e f8d2f8d2 LDR r0,[r2,#0x408]
000382 f000f000 AND r0,r0,#1
000386 ea41ea41 ORR r0,r1,r0,LSL #2
00038a f8d2f8d2 LDR r1,[r2,#0x408]
00038e f001f001 AND r1,r1,#2
000392 4308 ORRS r0,r0,r1
000394 f8d2f8d2 LDR r1,[r2,#0x408]
000398 f3c1f3c1 UBFX r1,r1,#26,#1
00039c 4301 ORRS r1,r1,r0
00039e e7e7 B |L1.880|
|L1.928|
0003a0 f8d2f8d2 LDR r0,[r2,#0x408]
0003a4 f400f400 AND r0,r0,#0x100
0003a8 ea41ea41 ORR r0,r1,r0,LSR #6
0003ac f8d2f8d2 LDR r1,[r2,#0x408]
0003b0 f401f401 AND r1,r1,#0x200
0003b4 ea40ea40 ORR r0,r0,r1,LSR #8
0003b8 f8d2f8d2 LDR r1,[r2,#0x408]
0003bc f3c1f3c1 UBFX r1,r1,#27,#1
0003c0 4301 ORRS r1,r1,r0
0003c2 e7d5 B |L1.880|
|L1.964|
0003c4 2002 MOVS r0,#2
0003c6 e002 B |L1.974|
|L1.968|
0003c8 2000 MOVS r0,#0
0003ca e000 B |L1.974|
|L1.972|
;;;515 default:
;;;516 State = CANTXFAILED;
0003cc 2000 MOVS r0,#0
|L1.974|
;;;517 break;
;;;518 }
;;;519
;;;520 return State;
0003ce b2c0 UXTB r0,r0
;;;521 }
0003d0 4770 BX lr
;;;522
ENDP
CAN_CancelTransmit PROC
;;;535 /* abort transmission */
;;;536 switch (Mailbox)
0003d2 490d LDR r1,|L1.1032|
0003d4 b150 CBZ r0,|L1.1004|
0003d6 2801 CMP r0,#1
0003d8 d00f BEQ |L1.1018|
0003da 2802 CMP r0,#2
0003dc d105 BNE |L1.1002|
;;;537 {
;;;538 case (0): CAN->TSR |= CAN_TSR_ABRQ0;
;;;539 break;
;;;540 case (1): CAN->TSR |= CAN_TSR_ABRQ1;
;;;541 break;
;;;542 case (2): CAN->TSR |= CAN_TSR_ABRQ2;
0003de f8d1f8d1 LDR r0,[r1,#0x408]
0003e2 f440f440 ORR r0,r0,#0x800000
0003e6 f8c1f8c1 STR r0,[r1,#0x408]
|L1.1002|
;;;543 break;
;;;544 default:
;;;545 break;
;;;546 }
;;;547 }
0003ea 4770 BX lr
|L1.1004|
0003ec f8d1f8d1 LDR r0,[r1,#0x408]
0003f0 f040f040 ORR r0,r0,#0x80
0003f4 f8c1f8c1 STR r0,[r1,#0x408]
0003f8 4770 BX lr
|L1.1018|
0003fa f8d1f8d1 LDR r0,[r1,#0x408]
0003fe f440f440 ORR r0,r0,#0x8000
000402 f8c1f8c1 STR r0,[r1,#0x408]
000406 4770 BX lr
|L1.1032|
000408 40006000 DCD 0x40006000
ENDP
CAN_FIFORelease PROC
;;;561 /* Release FIFO0 */
;;;562 if (FIFONumber == CAN_FIFO0)
00040c 4a98 LDR r2,|L1.1648|
00040e 2120 MOVS r1,#0x20
000410 b910 CBNZ r0,|L1.1048|
;;;563 {
;;;564 CAN->RF0R = CAN_RF0R_RFOM0;
000412 f8c2f8c2 STR r1,[r2,#0x40c]
;;;565 }
;;;566 /* Release FIFO1 */
;;;567 else /* FIFONumber == CAN_FIFO1 */
;;;568 {
;;;569 CAN->RF1R = CAN_RF1R_RFOM1;
;;;570 }
;;;571 }
000416 4770 BX lr
|L1.1048|
000418 f8c2f8c2 STR r1,[r2,#0x410]
00041c 4770 BX lr
;;;572
ENDP
CAN_MessagePending PROC
;;;580 u8 CAN_MessagePending(u8 FIFONumber)
;;;581 {
00041e 4601 MOV r1,r0
;;;582 u8 MessagePending=0;
000420 2000 MOVS r0,#0
;;;583
;;;584 /* Check the parameters */
;;;585 assert(IS_CAN_FIFO(FIFONumber));
;;;586
;;;587 if (FIFONumber == CAN_FIFO0)
000422 4a93 LDR r2,|L1.1648|
000424 b921 CBNZ r1,|L1.1072|
;;;588 {
;;;589 MessagePending = (u8)(CAN->RF0R&(u32)0x03);
000426 f8d2f8d2 LDR r0,[r2,#0x40c]
00042a f000f000 AND r0,r0,#3
|L1.1070|
;;;590 }
;;;591 else if (FIFONumber == CAN_FIFO1)
;;;592 {
;;;593 MessagePending = (u8)(CAN->RF1R&(u32)0x03);
;;;594 }
;;;595 else
;;;596 {
;;;597 MessagePending = 0;
;;;598 }
;;;599 return MessagePending;
;;;600 }
00042e 4770 BX lr
|L1.1072|
000430 2901 CMP r1,#1
000432 d1fc BNE |L1.1070|
000434 f8d2f8d2 LDR r0,[r2,#0x410]
000438 f000f000 AND r0,r0,#3
00043c 4770 BX lr
;;;601
ENDP
CAN_Receive PROC
;;;615 /* Get the Id */
;;;616 RxMessage->StdId = (u32)0x000007FF & (CAN->sFIFOMailBox[FIFONumber].RIR >> 21);
00043e 4a8c LDR r2,|L1.1648|
000440 eb02eb02 ADD r2,r2,r0,LSL #4
000444 f8d2f8d2 LDR r3,[r2,#0x5b0]
000448 0d5b LSRS r3,r3,#21
00044a 600b STR r3,[r1,#0]
;;;617 RxMessage->ExtId = (u32)0x0003FFFF & (CAN->sFIFOMailBox[FIFONumber].RIR >> 3);
00044c f8d2f8d2 LDR r3,[r2,#0x5b0]
000450 f3c3f3c3 UBFX r3,r3,#3,#18
000454 604b STR r3,[r1,#4]
;;;618
;;;619 RxMessage->IDE = (u32)0x00000004 & CAN->sFIFOMailBox[FIFONumber].RIR;
000456 f8d2f8d2 LDR r3,[r2,#0x5b0]
00045a f003f003 AND r3,r3,#4
00045e 720b STRB r3,[r1,#8]
;;;620 RxMessage->RTR = (u32)0x00000002 & CAN->sFIFOMailBox[FIFONumber].RIR;
000460 f8d2f8d2 LDR r3,[r2,#0x5b0]
000464 f003f003 AND r3,r3,#2
000468 724b STRB r3,[r1,#9]
;;;621
;;;622 /* Get the DLC */
;;;623 RxMessage->DLC = (u32)0x0000000F & CAN->sFIFOMailBox[FIFONumber].RDTR;
00046a f8d2f8d2 LDR r3,[r2,#0x5b4]
00046e f003f003 AND r3,r3,#0xf
000472 728b STRB r3,[r1,#0xa]
;;;624
;;;625 /* Get the FMI */
;;;626 RxMessage->FMI = (u32)0x000000FF & (CAN->sFIFOMailBox[FIFONumber].RDTR >> 8);
000474 f8d2f8d2 LDR r3,[r2,#0x5b4]
000478 0a1b LSRS r3,r3,#8
00047a 74cb STRB r3,[r1,#0x13]
;;;627
;;;628 /* Get the data field */
;;;629 RxMessage->Data[0] = (u32)0x000000FF & CAN->sFIFOMailBox[FIFONumber].RDLR;
00047c f8d2f8d2 LDR r3,[r2,#0x5b8]
000480 72cb STRB r3,[r1,#0xb]
;;;630 RxMessage->Data[1] = (u32)0x000000FF & (CAN->sFIFOMailBox[FIFONumber].RDLR >> 8);
000482 f8d2f8d2 LDR r3,[r2,#0x5b8]
000486 0a1b LSRS r3,r3,#8
000488 730b STRB r3,[r1,#0xc]
;;;631 RxMessage->Data[2] = (u32)0x000000FF & (CAN->sFIFOMailBox[FIFONumber].RDLR >> 16);
00048a f8d2f8d2 LDR r3,[r2,#0x5b8]
00048e 0c1b LSRS r3,r3,#16
000490 734b STRB r3,[r1,#0xd]
;;;632 RxMessage->Data[3] = (u32)0x000000FF & (CAN->sFIFOMailBox[FIFONumber].RDLR >> 24);
000492 f8d2f8d2 LDR r3,[r2,#0x5b8]
000496 0e1b LSRS r3,r3,#24
000498 738b STRB r3,[r1,#0xe]
;;;633
;;;634 RxMessage->Data[4] = (u32)0x000000FF & CAN->sFIFOMailBox[FIFONumber].RDHR;
00049a f8d2f8d2 LDR r3,[r2,#0x5bc]
00049e 73cb STRB r3,[r1,#0xf]
;;;635 RxMessage->Data[5] = (u32)0x000000FF & (CAN->sFIFOMailBox[FIFONumber].RDHR >> 8);
0004a0 f8d2f8d2 LDR r3,[r2,#0x5bc]
0004a4 0a1b LSRS r3,r3,#8
0004a6 740b STRB r3,[r1,#0x10]
;;;636 RxMessage->Data[6] = (u32)0x000000FF & (CAN->sFIFOMailBox[FIFONumber].RDHR >> 16);
0004a8 f8d2f8d2 LDR r3,[r2,#0x5bc]
0004ac 0c1b LSRS r3,r3,#16
0004ae 744b STRB r3,[r1,#0x11]
;;;637 RxMessage->Data[7] = (u32)0x000000FF & (CAN->sFIFOMailBox[FIFONumber].RDHR >> 24);
0004b0 f8d2f8d2 LDR r2,[r2,#0x5bc]
0004b4 0e12 LSRS r2,r2,#24
0004b6 748a STRB r2,[r1,#0x12]
;;;638
;;;639 /* Release the FIFO */
;;;640 CAN_FIFORelease(FIFONumber);
0004b8 e7fe B CAN_FIFORelease
;;;641 }
;;;642
ENDP
CAN_Sleep PROC
;;;654 /* Sleep mode entering request */
;;;655 CAN->MCR |= CAN_MCR_SLEEP;
0004ba 496e LDR r1,|L1.1652|
0004bc 6808 LDR r0,[r1,#0]
0004be f040f040 ORR r0,r0,#2
0004c2 6008 STR r0,[r1,#0]
;;;656 SleepStatus = CANSLEEPOK;
0004c4 2001 MOVS r0,#1
;;;657
;;;658 /* Sleep mode status */
;;;659 if ((CAN->MCR&CAN_MCR_SLEEP) == 0)
0004c6 6809 LDR r1,[r1,#0]
0004c8 f011f011 TST r1,#2
0004cc d100 BNE |L1.1232|
;;;660 {
;;;661 /* Sleep mode not entered */
;;;662 SleepStatus = CANSLEEPFAILED;
0004ce 2000 MOVS r0,#0
|L1.1232|
;;;663 }
;;;664
;;;665 /* At this step, sleep mode status */
;;;666 return SleepStatus;
;;;667 }
0004d0 4770 BX lr
;;;668
ENDP
CAN_WakeUp PROC
;;;678 {
;;;679 u8 WakeUpStatus = 0;
0004d2 2000 MOVS r0,#0
;;;680
;;;681 /* Wake up request */
;;;682 CAN->MCR &= ~CAN_MCR_SLEEP;
0004d4 4967 LDR r1,|L1.1652|
0004d6 680a LDR r2,[r1,#0]
0004d8 f022f022 BIC r2,r2,#2
0004dc 600a STR r2,[r1,#0]
;;;683 WakeUpStatus = CANWAKEUPFAILED;
;;;684
;;;685 /* Sleep mode status */
;;;686 if ((CAN->MCR&CAN_MCR_SLEEP) == 0)
0004de 6809 LDR r1,[r1,#0]
0004e0 f011f011 TST r1,#2
0004e4 d100 BNE |L1.1256|
;;;687 {
;;;688 /* Sleep mode exited */
;;;689 WakeUpStatus = CANWAKEUPOK;
0004e6 2001 MOVS r0,#1
|L1.1256|
;;;690 }
;;;691
;;;692 /* At this step, sleep mode status */
;;;693 return WakeUpStatus;
;;;694 }
0004e8 4770 BX lr
;;;695
ENDP
CAN_GetFlagStatus PROC
;;;705 FlagStatus CAN_GetFlagStatus(u32 CAN_FLAG)
;;;706 {
0004ea 4601 MOV r1,r0
;;;707 FlagStatus bitstatus = RESET;
0004ec 2000 MOVS r0,#0
;;;708
;;;709 /* Check the parameters */
;;;710 assert(IS_CAN_FLAG(CAN_FLAG));
;;;711
;;;712 /* Check the status of the specified CAN flag */
;;;713 if ((CAN->ESR & CAN_FLAG) != (u32)RESET)
0004ee 4a62 LDR r2,|L1.1656|
0004f0 6812 LDR r2,[r2,#0]
0004f2 420a TST r2,r1
0004f4 d000 BEQ |L1.1272|
;;;714 {
;;;715 /* CAN_FLAG is set */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -