LWL/MDK-ARM/keilpro/Listing/can1.txt

304 lines
14 KiB
Plaintext
Raw Normal View History

2024-07-10 06:01:39 +00:00
; generated by Component: ARM Compiler 5.06 update 7 (build 960) Tool: ArmCC [4d365d]
; commandline ArmCC [--list --debug -c --asm --interleave -o.\output\can1.o --asm_dir=.\Listing\ --list_dir=.\Listing\ --depend=.\output\can1.d --cpu=Cortex-M3 --apcs=interwork -O3 --diag_suppress=9931 -I..\..\template\Libraries\CMSIS\startup -I..\..\template\Libraries\CMSIS -I..\..\template\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\template\Libraries\STM32F10x_StdPeriph_Driver\src -I..\..\nlib -I..\user\inc -I..\user\src -ID:\Keil533\ARM\RV31\INC -ID:\Keil533\ARM\CMSIS\Include -ID:\Keil533\ARM\INC\ST\STM32F10x -D__MICROLIB -D__UVISION_VERSION=525 -DUSE_STDPERIPH_DRIVER -DSTM32F10X_MD --omf_browse=.\output\can1.crf ..\user\src\can1.c]
THUMB
AREA ||.text||, CODE, READONLY, ALIGN=2
REQUIRE _printf_percent
REQUIRE _printf_d
REQUIRE _printf_int_dec
CAN_Mode_Init PROC
;;;24 // <20><><EFBFBD><EFBFBD>,<2C><>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7>;
;;;25 u8 CAN_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode)
000000 e92d47f0 PUSH {r4-r10,lr}
;;;26 {
000004 b08a SUB sp,sp,#0x28
000006 4689 MOV r9,r1
000008 4680 MOV r8,r0
00000a 461e MOV r6,r3
00000c 4617 MOV r7,r2
;;;27 GPIO_InitTypeDef GPIO_InitStructure;
;;;28 CAN_InitTypeDef CAN_InitStructure;
;;;29 CAN_FilterInitTypeDef CAN_FilterInitStructure;
;;;30 #if CAN_RX0_INT_ENABLE
;;;31 NVIC_InitTypeDef NVIC_InitStructure;
;;;32 #endif
;;;33
;;;34 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//ʹ<><CAB9>PORTAʱ<41><CAB1>
00000e 2101 MOVS r1,#1
000010 2004 MOVS r0,#4
000012 f8dda048 LDR r10,[sp,#0x48]
000016 f7fffffe BL RCC_APB2PeriphClockCmd
;;;35
;;;36 RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);//ʹ<><CAB9>CAN1ʱ<31><CAB1>
00001a 2101 MOVS r1,#1
00001c 0648 LSLS r0,r1,#25
00001e f7fffffe BL RCC_APB1PeriphClockCmd
;;;37
;;;38 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
000022 f44f5080 MOV r0,#0x1000
000026 f8ad001c STRH r0,[sp,#0x1c]
;;;39 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
00002a 2003 MOVS r0,#3
00002c f88d001e STRB r0,[sp,#0x1e]
;;;40 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
000030 2018 MOVS r0,#0x18
;;;41 GPIO_Init(GPIOA, &GPIO_InitStructure); //<2F><>ʼ<EFBFBD><CABC>IO
000032 4c5a LDR r4,|L1.412|
000034 f88d001f STRB r0,[sp,#0x1f] ;40
000038 a907 ADD r1,sp,#0x1c
00003a 4620 MOV r0,r4
00003c f7fffffe BL GPIO_Init
;;;42
;;;43 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
000040 14e0 ASRS r0,r4,#19
000042 f8ad001c STRH r0,[sp,#0x1c]
;;;44 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
000046 2048 MOVS r0,#0x48
000048 f88d001f STRB r0,[sp,#0x1f]
;;;45 GPIO_Init(GPIOA, &GPIO_InitStructure); //<2F><>ʼ<EFBFBD><CABC>IO
00004c a907 ADD r1,sp,#0x1c
00004e 4620 MOV r0,r4
000050 f7fffffe BL GPIO_Init
;;;46
;;;47 //CAN<41><4E>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>
;;;48 CAN_InitStructure.CAN_TTCM=DISABLE; //<2F><>ʱ<EFBFBD><EFBFBD><E4B4A5>ͨ<EFBFBD><CDA8>ģʽ
000054 2400 MOVS r4,#0
;;;49 CAN_InitStructure.CAN_ABOM=DISABLE; //<2F><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>߹<EFBFBD><DFB9><EFBFBD>
;;;50 CAN_InitStructure.CAN_AWUM=DISABLE; //˯<><CBAF>ģʽͨ<CABD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>CAN->MCR<43><52>SLEEPλ)
;;;51 CAN_InitStructure.CAN_NART=ENABLE; //<2F><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
;;;52 CAN_InitStructure.CAN_RFLM=DISABLE; //<2F><><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>,<2C>µĸ<C2B5><C4B8>Ǿɵ<C7BE>
;;;53 CAN_InitStructure.CAN_TXFP=DISABLE; //<2F><><EFBFBD>ȼ<EFBFBD><C8BC>ɱ<EFBFBD><C9B1>ı<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
;;;54 CAN_InitStructure.CAN_Mode= mode; //ģʽ<C4A3><CABD><EFBFBD>ã<EFBFBD> mode:0,<2C><>ͨģʽ;1,<2C>ػ<EFBFBD>ģʽ;
000056 f88da002 STRB r10,[sp,#2]
;;;55 //<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>
;;;56 CAN_InitStructure.CAN_SJW=tsjw; //<2F><><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD>Ծ<EFBFBD><D4BE><EFBFBD><EFBFBD>(Tsjw)Ϊtsjw+1<><31>ʱ<EFBFBD>䵥λ CAN_SJW_1tq CAN_SJW_2tq CAN_SJW_3tq CAN_SJW_4tq
00005a f88d8003 STRB r8,[sp,#3]
00005e f88d4006 STRB r4,[sp,#6] ;48
000062 f88d4008 STRB r4,[sp,#8] ;50
000066 2501 MOVS r5,#1 ;51
;;;57 CAN_InitStructure.CAN_BS1=tbs1; //Tbs1=tbs1+1<><31>ʱ<EFBFBD>䵥λCAN_BS1_1tq ~CAN_BS1_16tq
;;;58 CAN_InitStructure.CAN_BS2=tbs2; //Tbs2=tbs2+1<><31>ʱ<EFBFBD>䵥λCAN_BS2_1tq ~ CAN_BS2_8tq
;;;59 CAN_InitStructure.CAN_Prescaler=brp; //<2F><>Ƶϵ<C6B5><CFB5>(Fdiv)Ϊbrp+1
000068 f8ad6000 STRH r6,[sp,#0]
00006c f88d4007 STRB r4,[sp,#7] ;49
000070 f88d5009 STRB r5,[sp,#9] ;51
;;;60 CAN_Init(CAN1, &CAN_InitStructure); //<2F><>ʼ<EFBFBD><CABC>CAN1
000074 4e4a LDR r6,|L1.416|
000076 f88d400a STRB r4,[sp,#0xa] ;52
00007a f88d7004 STRB r7,[sp,#4] ;57
00007e f88d400b STRB r4,[sp,#0xb] ;53
000082 f88d9005 STRB r9,[sp,#5] ;58
000086 4669 MOV r1,sp
000088 4630 MOV r0,r6
00008a f7fffffe BL CAN_Init
;;;61
;;;62 CAN_FilterInitStructure.CAN_FilterNumber=0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
00008e f88d4016 STRB r4,[sp,#0x16]
;;;63 CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; //<2F><><EFBFBD><EFBFBD>λģʽ
000092 f88d4017 STRB r4,[sp,#0x17]
;;;64 CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //32λ<32><CEBB>
000096 f88d5018 STRB r5,[sp,#0x18]
;;;65 CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000; //32λID
00009a f8ad400c STRH r4,[sp,#0xc]
;;;66 CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
;;;67 CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;//32λMASK
00009e f8ad4010 STRH r4,[sp,#0x10]
0000a2 f8ad400e STRH r4,[sp,#0xe] ;66
;;;68 CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
0000a6 f8ad4012 STRH r4,[sp,#0x12]
;;;69 CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FIFO0
0000aa f8ad4014 STRH r4,[sp,#0x14]
;;;70 CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
0000ae f88d5019 STRB r5,[sp,#0x19]
;;;71
;;;72 CAN_FilterInit(&CAN_FilterInitStructure); //<2F>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
0000b2 a803 ADD r0,sp,#0xc
0000b4 f7fffffe BL CAN_FilterInit
;;;73
;;;74 #if CAN_RX0_INT_ENABLE
;;;75 CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE); //FIFO0<4F><30>Ϣ<EFBFBD>Һ<EFBFBD><D2BA>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>.
0000b8 2201 MOVS r2,#1
0000ba 2102 MOVS r1,#2
0000bc 4630 MOV r0,r6
0000be f7fffffe BL CAN_ITConfig
;;;76
;;;77 NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
0000c2 2014 MOVS r0,#0x14
0000c4 f88d0020 STRB r0,[sp,#0x20]
;;;78 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // <20><><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>Ϊ1
0000c8 f88d5021 STRB r5,[sp,#0x21]
;;;79 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // <20><><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>Ϊ0
0000cc f88d4022 STRB r4,[sp,#0x22]
;;;80 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
0000d0 f88d5023 STRB r5,[sp,#0x23]
;;;81 NVIC_Init(&NVIC_InitStructure);
0000d4 a808 ADD r0,sp,#0x20
0000d6 f7fffffe BL NVIC_Init
;;;82 #endif
;;;83 return 0;
;;;84 }
0000da b00a ADD sp,sp,#0x28
0000dc 2000 MOVS r0,#0 ;83
0000de e8bd87f0 POP {r4-r10,pc}
;;;85
ENDP
USB_LP_CAN1_RX0_IRQHandler PROC
;;;87 //<2F>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
;;;88 void USB_LP_CAN1_RX0_IRQHandler(void)
0000e2 b530 PUSH {r4,r5,lr}
;;;89 {
0000e4 b085 SUB sp,sp,#0x14
;;;90 CanRxMsg RxMessage;
;;;91 int i=0;
0000e6 2400 MOVS r4,#0
;;;92
;;;93 CAN_Receive(CAN1, 0, &RxMessage);
0000e8 466a MOV r2,sp
0000ea 4621 MOV r1,r4
0000ec 482c LDR r0,|L1.416|
0000ee f7fffffe BL CAN_Receive
0000f2 466d MOV r5,sp ;90
|L1.244|
;;;94
;;;95 for(i=0;i<8;i++)
;;;96 {
;;;97 printf("rxbuf[%d]:%d\r\n",i,RxMessage.Data[i]);
0000f4 1928 ADDS r0,r5,r4
0000f6 4621 MOV r1,r4
0000f8 7ac2 LDRB r2,[r0,#0xb]
0000fa a02a ADR r0,|L1.420|
0000fc f7fffffe BL __2printf
000100 1c64 ADDS r4,r4,#1
000102 2c08 CMP r4,#8 ;95
000104 dbf6 BLT |L1.244|
|L1.262|
;;;98 }
;;;99 }
000106 b005 ADD sp,sp,#0x14
000108 bd30 POP {r4,r5,pc}
;;;100 #endif
ENDP
Can_Send_Msg PROC
;;;106 // <20><><EFBFBD><EFBFBD><><CAA7>;
;;;107 u32 Can_Send_Msg(u8* msg,u8 len,u32 appid)
00010a b5f0 PUSH {r4-r7,lr}
;;;108 {
00010c b085 SUB sp,sp,#0x14
;;;109 u8 mbox;
;;;110 u16 i=0;
00010e 2300 MOVS r3,#0
;;;111 CanTxMsg TxMessage;
;;;112 // TxMessage.StdId=0x12; // <20><>׼<EFBFBD><D7BC>ʶ<EFBFBD><CAB6>
;;;113 TxMessage.ExtId=appid; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><D5B9>ʾ<EFBFBD><CABE>
;;;114 TxMessage.IDE=CAN_Id_Extended ; //
000110 9201 STR r2,[sp,#4]
000112 2204 MOVS r2,#4
000114 f88d2008 STRB r2,[sp,#8]
;;;115 TxMessage.RTR=CAN_RTR_Data; // <20><><EFBFBD><EFBFBD>֡
000118 f88d3009 STRB r3,[sp,#9]
;;;116 TxMessage.DLC=len; // Ҫ<><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
00011c f88d100a STRB r1,[sp,#0xa]
000120 466a MOV r2,sp ;111
000122 e004 B |L1.302|
|L1.292|
;;;117 for(i=0;i<len;i++)
;;;118 TxMessage.Data[i]=msg[i];
000124 5cc4 LDRB r4,[r0,r3]
000126 18d5 ADDS r5,r2,r3
000128 1c5b ADDS r3,r3,#1
00012a 72ec STRB r4,[r5,#0xb]
00012c b29b UXTH r3,r3 ;117
|L1.302|
00012e 428b CMP r3,r1 ;117
000130 d3f8 BCC |L1.292|
;;;119 mbox= CAN_Transmit(CAN1, &TxMessage);
000132 4f1b LDR r7,|L1.416|
000134 4611 MOV r1,r2
000136 4638 MOV r0,r7
000138 f7fffffe BL CAN_Transmit
00013c 4606 MOV r6,r0
;;;120 i=0;
00013e 2400 MOVS r4,#0
;;;121 while((CAN_TransmitStatus(CAN1, mbox)==CAN_TxStatus_Failed)&&(i<0XFFF))i++; //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>
000140 f64075ff MOV r5,#0xfff
000144 e001 B |L1.330|
|L1.326|
000146 1c64 ADDS r4,r4,#1
000148 b2a4 UXTH r4,r4
|L1.330|
00014a 4631 MOV r1,r6
00014c 4638 MOV r0,r7
00014e f7fffffe BL CAN_TransmitStatus
000152 b908 CBNZ r0,|L1.344|
000154 42ac CMP r4,r5
000156 d3f6 BCC |L1.326|
|L1.344|
;;;122 if(i>=0XFFF)return 1;
000158 42ac CMP r4,r5
00015a d302 BCC |L1.354|
00015c 2001 MOVS r0,#1
|L1.350|
;;;123 return 0;
;;;124 }
00015e b005 ADD sp,sp,#0x14
000160 bdf0 POP {r4-r7,pc}
|L1.354|
000162 2000 MOVS r0,#0 ;123
000164 e7fb B |L1.350|
;;;125 //can<61>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD>ѯ
ENDP
Can_Receive_Msg PROC
;;;128 // <20><><EFBFBD><EFBFBD>,<2C><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>;
;;;129 u8 Can_Receive_Msg(u8 *buf)
000166 b530 PUSH {r4,r5,lr}
;;;130 {
;;;131 u32 i;
;;;132 CanRxMsg RxMessage;
;;;133 if( CAN_MessagePending(CAN1,CAN_FIFO0)==0)return 0; //û<>н<EFBFBD><D0BD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><><D6B1><EFBFBD>˳<EFBFBD>
000168 4d0d LDR r5,|L1.416|
00016a 4604 MOV r4,r0 ;130
00016c b085 SUB sp,sp,#0x14 ;130
00016e 2100 MOVS r1,#0
000170 4628 MOV r0,r5
000172 f7fffffe BL CAN_MessagePending
000176 2800 CMP r0,#0
000178 d0c5 BEQ |L1.262|
;;;134 CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
00017a 466a MOV r2,sp
00017c 2100 MOVS r1,#0
00017e 4628 MOV r0,r5
000180 f7fffffe BL CAN_Receive
;;;135 for(i=0;i<8;i++)
000184 2100 MOVS r1,#0
000186 4668 MOV r0,sp ;132
|L1.392|
;;;136 buf[i]=RxMessage.Data[i];
000188 1842 ADDS r2,r0,r1
00018a 7ad2 LDRB r2,[r2,#0xb]
00018c 5462 STRB r2,[r4,r1]
00018e 1c49 ADDS r1,r1,#1
000190 2908 CMP r1,#8 ;135
000192 d3f9 BCC |L1.392|
;;;137 return RxMessage.DLC;
000194 f89d000a LDRB r0,[sp,#0xa]
;;;138 }
000198 e7b5 B |L1.262|
;;;139
ENDP
00019a 0000 DCW 0x0000
|L1.412|
DCD 0x40010800
|L1.416|
DCD 0x40006400
|L1.420|
0001a4 72786275 DCB "rxbuf[%d]:%d\r\n",0
0001a8 665b2564
0001ac 5d3a2564
0001b0 0d0a00
0001b3 00 DCB 0