📄 stm32f10x_can.lst
字号:
378 /* Initialize the automatic wake-up mode */
379 CAN_InitStruct->CAN_AWUM = DISABLE;
\ 00000008 0021 MOVS R1,#+0
\ 0000000A 0172 STRB R1,[R0, #+8]
380 /* Initialize the no automatic retransmission */
381 CAN_InitStruct->CAN_NART = DISABLE;
\ 0000000C 0021 MOVS R1,#+0
\ 0000000E 4172 STRB R1,[R0, #+9]
382 /* Initialize the receive FIFO locked mode */
383 CAN_InitStruct->CAN_RFLM = DISABLE;
\ 00000010 0021 MOVS R1,#+0
\ 00000012 8172 STRB R1,[R0, #+10]
384 /* Initialize the transmit FIFO priority */
385 CAN_InitStruct->CAN_TXFP = DISABLE;
\ 00000014 0021 MOVS R1,#+0
\ 00000016 C172 STRB R1,[R0, #+11]
386 /* Initialize the CAN_Mode member */
387 CAN_InitStruct->CAN_Mode = CAN_Mode_Normal;
\ 00000018 0021 MOVS R1,#+0
\ 0000001A 8170 STRB R1,[R0, #+2]
388 /* Initialize the CAN_SJW member */
389 CAN_InitStruct->CAN_SJW = CAN_SJW_1tq;
\ 0000001C 0021 MOVS R1,#+0
\ 0000001E C170 STRB R1,[R0, #+3]
390 /* Initialize the CAN_BS1 member */
391 CAN_InitStruct->CAN_BS1 = CAN_BS1_4tq;
\ 00000020 0321 MOVS R1,#+3
\ 00000022 0171 STRB R1,[R0, #+4]
392 /* Initialize the CAN_BS2 member */
393 CAN_InitStruct->CAN_BS2 = CAN_BS2_3tq;
\ 00000024 0221 MOVS R1,#+2
\ 00000026 4171 STRB R1,[R0, #+5]
394 /* Initialize the CAN_Prescaler member */
395 CAN_InitStruct->CAN_Prescaler = 1;
\ 00000028 0121 MOVS R1,#+1
\ 0000002A 0180 STRH R1,[R0, #+0]
396 }
\ 0000002C 7047 BX LR ;; return
397
398 /**
399 * @brief Select the start bank filter for slave CAN.
400 * @note This function applies only to STM32 Connectivity line devices.
401 * @param CAN_BankNumber: Select the start slave bank filter from 1..27.
402 * @retval None.
403 */
\ In section .text, align 2, keep-with-next
404 void CAN_SlaveStartBank(uint8_t CAN_BankNumber)
405 {
406 /* Check the parameters */
407 assert_param(IS_CAN_BANKNUMBER(CAN_BankNumber));
408 /* enter Initialisation mode for the filter */
409 CAN1->FMR |= FMR_FINIT;
\ CAN_SlaveStartBank:
\ 00000000 ........ LDR.W R1,??DataTable5_1 ;; 0x40006600
\ 00000004 0968 LDR R1,[R1, #+0]
\ 00000006 51F00101 ORRS R1,R1,#0x1
\ 0000000A ........ LDR.W R2,??DataTable5_1 ;; 0x40006600
\ 0000000E 1160 STR R1,[R2, #+0]
410 /* Select the start slave bank */
411 CAN1->FMR &= (uint32_t)0xFFFFC0F1 ;
\ 00000010 ........ LDR.W R1,??DataTable5_1 ;; 0x40006600
\ 00000014 0968 LDR R1,[R1, #+0]
\ 00000016 ........ LDR.W R2,??DataTable5_7 ;; 0xffffc0f1
\ 0000001A 1140 ANDS R1,R2,R1
\ 0000001C ........ LDR.W R2,??DataTable5_1 ;; 0x40006600
\ 00000020 1160 STR R1,[R2, #+0]
412 CAN1->FMR |= (uint32_t)(CAN_BankNumber)<<8;
\ 00000022 ........ LDR.W R1,??DataTable5_1 ;; 0x40006600
\ 00000026 0968 LDR R1,[R1, #+0]
\ 00000028 C0B2 UXTB R0,R0 ;; ZeroExt R0,R0,#+24,#+24
\ 0000002A 51EA0021 ORRS R1,R1,R0, LSL #+8
\ 0000002E ........ LDR.W R2,??DataTable5_1 ;; 0x40006600
\ 00000032 1160 STR R1,[R2, #+0]
413 /* Leave Initialisation mode for the filter */
414 CAN1->FMR &= ~FMR_FINIT;
\ 00000034 ........ LDR.W R1,??DataTable5_1 ;; 0x40006600
\ 00000038 0968 LDR R1,[R1, #+0]
\ 0000003A 4908 LSRS R1,R1,#+1
\ 0000003C 4900 LSLS R1,R1,#+1
\ 0000003E ........ LDR.W R2,??DataTable5_1 ;; 0x40006600
\ 00000042 1160 STR R1,[R2, #+0]
415 }
\ 00000044 7047 BX LR ;; return
416
417 /**
418 * @brief Enables or disables the specified CANx interrupts.
419 * @param CANx: where x can be 1 or 2 to to select the CAN peripheral.
420 * @param CAN_IT: specifies the CAN interrupt sources to be enabled or disabled.
421 * This parameter can be:
422 * -CAN_IT_TME,
423 * -CAN_IT_FMP0,
424 * -CAN_IT_FF0,
425 * -CAN_IT_FOV0,
426 * -CAN_IT_FMP1,
427 * -CAN_IT_FF1,
428 * -CAN_IT_FOV1,
429 * -CAN_IT_EWG,
430 * -CAN_IT_EPV,
431 * -CAN_IT_LEC,
432 * -CAN_IT_ERR,
433 * -CAN_IT_WKU or
434 * -CAN_IT_SLK.
435 * @param NewState: new state of the CAN interrupts.
436 * This parameter can be: ENABLE or DISABLE.
437 * @retval None.
438 */
\ In section .text, align 2, keep-with-next
439 void CAN_ITConfig(CAN_TypeDef* CANx, uint32_t CAN_IT, FunctionalState NewState)
440 {
441 /* Check the parameters */
442 assert_param(IS_CAN_ALL_PERIPH(CANx));
443 assert_param(IS_CAN_IT(CAN_IT));
444 assert_param(IS_FUNCTIONAL_STATE(NewState));
445
446 if (NewState != DISABLE)
\ CAN_ITConfig:
\ 00000000 D2B2 UXTB R2,R2 ;; ZeroExt R2,R2,#+24,#+24
\ 00000002 002A CMP R2,#+0
\ 00000004 03D0 BEQ.N ??CAN_ITConfig_0
447 {
448 /* Enable the selected CANx interrupt */
449 CANx->IER |= CAN_IT;
\ 00000006 4369 LDR R3,[R0, #+20]
\ 00000008 0B43 ORRS R3,R1,R3
\ 0000000A 4361 STR R3,[R0, #+20]
\ 0000000C 02E0 B.N ??CAN_ITConfig_1
450 }
451 else
452 {
453 /* Disable the selected CANx interrupt */
454 CANx->IER &= ~CAN_IT;
\ ??CAN_ITConfig_0:
\ 0000000E 4369 LDR R3,[R0, #+20]
\ 00000010 8B43 BICS R3,R3,R1
\ 00000012 4361 STR R3,[R0, #+20]
455 }
456 }
\ ??CAN_ITConfig_1:
\ 00000014 7047 BX LR ;; return
457
458 /**
459 * @brief Initiates the transmission of a message.
460 * @param CANx: where x can be 1 or 2 to to select the CAN peripheral.
461 * @param TxMessage: pointer to a structure which contains CAN Id, CAN
462 * DLC and CAN datas.
463 * @retval The number of the mailbox that is used for transmission
464 * or CAN_NO_MB if there is no empty mailbox.
465 */
\ In section .text, align 2, keep-with-next
466 uint8_t CAN_Transmit(CAN_TypeDef* CANx, CanTxMsg* TxMessage)
467 {
\ CAN_Transmit:
\ 00000000 30B4 PUSH {R4,R5}
\ 00000002 0200 MOVS R2,R0
468 uint8_t transmit_mailbox = 0;
\ 00000004 0020 MOVS R0,#+0
469 /* Check the parameters */
470 assert_param(IS_CAN_ALL_PERIPH(CANx));
471 assert_param(IS_CAN_IDTYPE(TxMessage->IDE));
472 assert_param(IS_CAN_RTR(TxMessage->RTR));
473 assert_param(IS_CAN_DLC(TxMessage->DLC));
474
475 /* Select one empty transmit mailbox */
476 if ((CANx->TSR&CAN_TSR_TME0) == CAN_TSR_TME0)
\ 00000006 9368 LDR R3,[R2, #+8]
\ 00000008 5B01 LSLS R3,R3,#+5
\ 0000000A 02D5 BPL.N ??CAN_Transmit_0
477 {
478 transmit_mailbox = 0;
\ 0000000C 0023 MOVS R3,#+0
\ 0000000E 1800 MOVS R0,R3
\ 00000010 0DE0 B.N ??CAN_Transmit_1
479 }
480 else if ((CANx->TSR&CAN_TSR_TME1) == CAN_TSR_TME1)
\ ??CAN_Transmit_0:
\ 00000012 9368 LDR R3,[R2, #+8]
\ 00000014 1B01 LSLS R3,R3,#+4
\ 00000016 02D5 BPL.N ??CAN_Transmit_2
481 {
482 transmit_mailbox = 1;
\ 00000018 0123 MOVS R3,#+1
\ 0000001A 1800 MOVS R0,R3
\ 0000001C 07E0 B.N ??CAN_Transmit_1
483 }
484 else if ((CANx->TSR&CAN_TSR_TME2) == CAN_TSR_TME2)
\ ??CAN_Transmit_2:
\ 0000001E 9368 LDR R3,[R2, #+8]
\ 00000020 DB00 LSLS R3,R3,#+3
\ 00000022 02D5 BPL.N ??CAN_Transmit_3
485 {
486 transmit_mailbox = 2;
\ 00000024 0223 MOVS R3,#+2
\ 00000026 1800 MOVS R0,R3
\ 00000028 01E0 B.N ??CAN_Transmit_1
487 }
488 else
489 {
490 transmit_mailbox = CAN_NO_MB;
\ ??CAN_Transmit_3:
\ 0000002A 0423 MOVS R3,#+4
\ 0000002C 1800 MOVS R0,R3
491 }
492
493 if (transmit_mailbox != CAN_NO_MB)
\ ??CAN_Transmit_1:
\ 0000002E C0B2 UXTB R0,R0 ;; ZeroExt R0,R0,#+24,#+24
\ 00000030 0428 CMP R0,#+4
\ 00000032 75D0 BEQ.N ??CAN_Transmit_4
494 {
495 /* Set up the Id */
496 CANx->sTxMailBox[transmit_mailbox].TIR &= TMIDxR_TXRQ;
\ 00000034 C0B2 UXTB R0,R0 ;; ZeroExt R0,R0,#+24,#+24
\ 00000036 12EB0013 ADDS R3,R2,R0, LSL #+4
\ 0000003A D3F88031 LDR R3,[R3, #+384]
\ 0000003E 13F00103 ANDS R3,R3,#0x1
\ 00000042 C0B2 UXTB R0,R0 ;; ZeroExt R0,R0,#+24,#+24
\ 00000044 12EB0014 ADDS R4,R2,R0, LSL #+4
\ 00000048 C4F88031 STR R3,[R4, #+384]
497 if (TxMessage->IDE == CAN_ID_STD)
\ 0000004C 0B7A LDRB R3,[R1, #+8]
\ 0000004E 002B CMP R3,#+0
\ 00000050 0FD1 BNE.N ??CAN_Transmit_5
498 {
499 assert_param(IS_CAN_STDID(TxMessage->StdId));
500 CANx->sTxMailBox[transmit_mailbox].TIR |= ((TxMessage->StdId << 21) | TxMessage->RTR);
\ 00000052 C0B2 UXTB R0,R0 ;; ZeroExt R0,R0,#+24,#+24
\ 00000054 12EB0013 ADDS R3,R2,R0, LSL #+4
\ 00000058 D3F88031 LDR R3,[R3, #+384]
\ 0000005C 0C68 LDR R4,[R1, #+0]
\ 0000005E 4D7A LDRB R5,[R1, #+9]
\ 00000060 55EA4454 ORRS R4,R5,R4, LSL #+21
\ 00000064 2343 ORRS R3,R4,R3
\ 00000066 C0B2 UXTB R0,R0 ;; ZeroExt R0,R0,#+24,#+24
\ 00000068 12EB0014 ADDS R4,R2,R0, LSL #+4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -