📄 main.lst
字号:
\ 00000000 00B5 PUSH {LR}
\ 00000002 0022 MOV R2,#+0
\ 00000004 C021 MOV R1,#+0xC0
\ 00000006 8905 LSL R1,R1,#+0x16 ;; #+0x30000000
\ 00000008 0448 LDR R0,??AT91F_CAN1_CfgPIO_0 ;; 0xfffff400
\ 0000000A ........ _BLF AT91F_PIO_CfgPeriph,AT91F_PIO_CfgPeriph??rT
\ 0000000E 8022 MOV R2,#+0x80
\ 00000010 0021 MOV R1,#+0
\ 00000012 0348 LDR R0,??AT91F_CAN1_CfgPIO_0+0x4 ;; 0xfffff600
\ 00000014 ........ _BLF AT91F_PIO_CfgPeriph,AT91F_PIO_CfgPeriph??rT
\ 00000018 01BC POP {R0}
\ 0000001A 0047 BX R0 ;; return
\ ??AT91F_CAN1_CfgPIO_0:
\ 0000001C 00F4FFFF DC32 0xfffff400
\ 00000020 00F6FFFF DC32 0xfffff600
21 /* Global variables */
\ In segment DATA_Z, align 1, align-sorted
22 volatile char testCAN0 = AT91C_TEST_NOK;
\ testCAN0:
\ 00000000 DS8 1
\ In segment DATA_Z, align 1, align-sorted
23 volatile char testCAN1 = AT91C_TEST_NOK;
\ testCAN1:
\ 00000000 DS8 1
24 extern void CanSendData(unsigned int LData,unsigned HData) ;
25
26 //*----------------------------------------------------------------------------
27 //* \fn AT91F_CAN0_Handler
28 //* \brief
29 //*----------------------------------------------------------------------------
\ In segment CODE, align 4, keep-with-next
30 void AT91F_CAN0_Handler(void)
31 {
\ AT91F_CAN0_Handler:
\ 00000000 30B5 PUSH {R4,R5,LR}
\ 00000002 81B0 SUB SP,#+0x4
32 volatile unsigned int status;
33
34 status = AT91F_CAN_GetStatus(AT91C_BASE_CAN0) & AT91F_CAN_GetInterruptMaskStatus(AT91C_BASE_CAN0);
\ 00000004 .... LDR R0,??DataTable27 ;; 0xfff80000
\ 00000006 ........ _BLF AT91F_CAN_GetStatus,AT91F_CAN_GetStatus??rT
\ 0000000A 051C MOV R5,R0
\ 0000000C .... LDR R0,??DataTable27 ;; 0xfff80000
\ 0000000E ........ _BLF AT91F_CAN_GetInterruptMaskStatus,AT91F_CAN_GetInterruptMaskStatus??rT
\ 00000012 2840 AND R0,R5
\ 00000014 0090 STR R0,[SP, #+0]
35 AT91F_CAN_DisableIt(AT91C_BASE_CAN0,status);
\ 00000016 0099 LDR R1,[SP, #+0]
\ 00000018 .... LDR R0,??DataTable27 ;; 0xfff80000
\ 0000001A ........ _BLF AT91F_CAN_DisableIt,AT91F_CAN_DisableIt??rT
36 int RxData=AT91F_CAN_GetMessageDataLow(&AT91C_BASE_CAN0->CAN_MB0) ;
\ 0000001E .... LDR R0,??DataTable18 ;; 0xfff80200
\ 00000020 ........ _BLF AT91F_CAN_GetMessageDataLow,AT91F_CAN_GetMessageDataLow??rT
\ 00000024 041C MOV R4,R0
37 TRACE_INFO("______Interrupt now is received some data____________") ;
\ 00000026 .... LDR R0,??DataTable26 ;; _Stdout
\ 00000028 0028 CMP R0,#+0
\ 0000002A 03D0 BEQ ??AT91F_CAN0_Handler_0
\ 0000002C 0A49 LDR R1,??AT91F_CAN0_Handler_1 ;; `?<Constant "______Interrupt now i...">`
\ 0000002E .... LDR R0,??DataTable26 ;; _Stdout
\ 00000030 ........ _BLF fprintf,fprintf??rT
38 TRACE_INFO("%d",RxData);
\ ??AT91F_CAN0_Handler_0:
\ 00000034 .... LDR R0,??DataTable26 ;; _Stdout
\ 00000036 0028 CMP R0,#+0
\ 00000038 04D0 BEQ ??AT91F_CAN0_Handler_2
\ 0000003A 221C MOV R2,R4
\ 0000003C .... LDR R1,??DataTable13 ;; `?<Constant "%d">`
\ 0000003E .... LDR R0,??DataTable26 ;; _Stdout
\ 00000040 ........ _BLF fprintf,fprintf??rT
39 if(status & AT91C_CAN_WAKEUP) {
\ ??AT91F_CAN0_Handler_2:
\ 00000044 0098 LDR R0,[SP, #+0]
\ 00000046 8002 LSL R0,R0,#+0xA
\ 00000048 02D5 BPL ??AT91F_CAN0_Handler_3
40 testCAN0 = AT91C_TEST_OK;
\ 0000004A 0448 LDR R0,??AT91F_CAN0_Handler_1+0x4 ;; testCAN0
\ 0000004C 0121 MOV R1,#+0x1
\ 0000004E 0170 STRB R1,[R0, #+0]
41 TRACE_DEBUG_H("=> CAN0 WAKEUP ");
42 }
43
44 }
\ ??AT91F_CAN0_Handler_3:
\ 00000050 01B0 ADD SP,#+0x4
\ 00000052 30BC POP {R4,R5}
\ 00000054 01BC POP {R0}
\ 00000056 0047 BX R0 ;; return
\ ??AT91F_CAN0_Handler_1:
\ 00000058 ........ DC32 `?<Constant "______Interrupt now i...">`
\ 0000005C ........ DC32 testCAN0
45
46 //*----------------------------------------------------------------------------
47 //* \fn AT91F_CAN1_Handler
48 //* \brief
49 //*----------------------------------------------------------------------------
\ In segment CODE, align 4, keep-with-next
50 void AT91F_CAN1_Handler(void) //接收CAN0 ->MB0 发送的数据
51 {
\ AT91F_CAN1_Handler:
\ 00000000 70B5 PUSH {R4-R6,LR}
\ 00000002 81B0 SUB SP,#+0x4
52 volatile unsigned int status;
53 int RxData ;
54
55 status = AT91F_CAN_GetStatus(AT91C_BASE_CAN1) & AT91F_CAN_GetInterruptMaskStatus(AT91C_BASE_CAN1);
\ 00000004 .... LDR R0,??DataTable28 ;; 0xfff84000
\ 00000006 ........ _BLF AT91F_CAN_GetStatus,AT91F_CAN_GetStatus??rT
\ 0000000A 051C MOV R5,R0
\ 0000000C .... LDR R0,??DataTable28 ;; 0xfff84000
\ 0000000E ........ _BLF AT91F_CAN_GetInterruptMaskStatus,AT91F_CAN_GetInterruptMaskStatus??rT
\ 00000012 2840 AND R0,R5
\ 00000014 0090 STR R0,[SP, #+0]
56 AT91F_CAN_DisableIt(AT91C_BASE_CAN1,status);
\ 00000016 0099 LDR R1,[SP, #+0]
\ 00000018 .... LDR R0,??DataTable28 ;; 0xfff84000
\ 0000001A ........ _BLF AT91F_CAN_DisableIt,AT91F_CAN_DisableIt??rT
57
58 /* RxData=AT91F_CAN_GetMessageDataLow(&AT91C_BASE_CAN1->CAN_MB0) ; //接收低四位
59 TRACE_INFO("\r\nCAN1-MailBox0_______Interrupt received data,Low is:") ;
60 TRACE_INFO("%d",RxData );
61 RxData=AT91F_CAN_GetMessageDataHigh(&AT91C_BASE_CAN1->CAN_MB0) ; //接收高四位
62 TRACE_INFO("\r\nCAN1-MailBox0_______Interrupt received data,High is:") ;
63 TRACE_INFO("%d",RxData );
64
65 */
66
67 RxData=AT91F_CAN_GetMessageDataHigh(&AT91C_BASE_CAN1->CAN_MB0) ;
\ 0000001E 2248 LDR R0,??AT91F_CAN1_Handler_0 ;; 0xfff84200
\ 00000020 ........ _BLF AT91F_CAN_GetMessageDataHigh,AT91F_CAN_GetMessageDataHigh??rT
\ 00000024 041C MOV R4,R0
68 TRACE_INFO("%d",RxData );
\ 00000026 .... LDR R0,??DataTable26 ;; _Stdout
\ 00000028 0028 CMP R0,#+0
\ 0000002A 04D0 BEQ ??AT91F_CAN1_Handler_1
\ 0000002C 221C MOV R2,R4
\ 0000002E .... LDR R1,??DataTable13 ;; `?<Constant "%d">`
\ 00000030 .... LDR R0,??DataTable26 ;; _Stdout
\ 00000032 ........ _BLF fprintf,fprintf??rT
69 TRACE_INFO("\r\n");
\ ??AT91F_CAN1_Handler_1:
\ 00000036 .... LDR R0,??DataTable26 ;; _Stdout
\ 00000038 0028 CMP R0,#+0
\ 0000003A 03D0 BEQ ??AT91F_CAN1_Handler_2
\ 0000003C 1B49 LDR R1,??AT91F_CAN1_Handler_0+0x4 ;; `?<Constant "\\r\\n">`
\ 0000003E .... LDR R0,??DataTable26 ;; _Stdout
\ 00000040 ........ _BLF fprintf,fprintf??rT
70
71
72
73 if((AT91F_CAN_GetMessageDataLow(&AT91C_BASE_CAN1->CAN_MB0)!=AT91F_CAN_GetMessageDataLow(&AT91C_BASE_CAN0->CAN_MB0))
74 |(AT91F_CAN_GetMessageDataHigh(&AT91C_BASE_CAN1->CAN_MB0)!=AT91F_CAN_GetMessageDataHigh(&AT91C_BASE_CAN0->CAN_MB0)))
\ ??AT91F_CAN1_Handler_2:
\ 00000044 1848 LDR R0,??AT91F_CAN1_Handler_0 ;; 0xfff84200
\ 00000046 ........ _BLF AT91F_CAN_GetMessageDataLow,AT91F_CAN_GetMessageDataLow??rT
\ 0000004A 051C MOV R5,R0
\ 0000004C .... LDR R0,??DataTable18 ;; 0xfff80200
\ 0000004E ........ _BLF AT91F_CAN_GetMessageDataLow,AT91F_CAN_GetMessageDataLow??rT
\ 00000052 8542 CMP R5,R0
\ 00000054 01D0 BEQ ??AT91F_CAN1_Handler_3
\ 00000056 0125 MOV R5,#+0x1
\ 00000058 00E0 B ??AT91F_CAN1_Handler_4
\ ??AT91F_CAN1_Handler_3:
\ 0000005A 0025 MOV R5,#+0
\ ??AT91F_CAN1_Handler_4:
\ 0000005C 1248 LDR R0,??AT91F_CAN1_Handler_0 ;; 0xfff84200
\ 0000005E ........ _BLF AT91F_CAN_GetMessageDataHigh,AT91F_CAN_GetMessageDataHigh??rT
\ 00000062 061C MOV R6,R0
\ 00000064 .... LDR R0,??DataTable18 ;; 0xfff80200
\ 00000066 ........ _BLF AT91F_CAN_GetMessageDataHigh,AT91F_CAN_GetMessageDataHigh??rT
\ 0000006A 8642 CMP R6,R0
\ 0000006C 01D0 BEQ ??AT91F_CAN1_Handler_5
\ 0000006E 0120 MOV R0,#+0x1
\ 00000070 00E0 B ??AT91F_CAN1_Handler_6
\ ??AT91F_CAN1_Handler_5:
\ 00000072 0020 MOV R0,#+0
\ ??AT91F_CAN1_Handler_6:
\ 00000074 2843 ORR R0,R5
\ 00000076 0006 LSL R0,R0,#+0x18 ;; ZeroExt R0,R0,#+0x18,#+0x18
\ 00000078 000E LSR R0,R0,#+0x18
\ 0000007A 0028 CMP R0,#+0
\ 0000007C 06D0 BEQ ??AT91F_CAN1_Handler_7
75 TRACE_INFO("\r\n*********************ERROR**************************************") ;
\ 0000007E .... LDR R0,??DataTable26 ;; _Stdout
\ 00000080 0028 CMP R0,#+0
\ 00000082 03D0 BEQ ??AT91F_CAN1_Handler_7
\ 00000084 0A49 LDR R1,??AT91F_CAN1_Handler_0+0x8 ;; `?<Constant "\\r\\n*******************...">`
\ 00000086 .... LDR R0,??DataTable26 ;; _Stdout
\ 00000088 ........ _BLF fprintf,fprintf??rT
76
77 /**如果如下指令不执行的话,所有读出的数据都将是第一次接收到的数据**/
78 AT91C_BASE_CAN1_MB0->CAN_MB_MCR=AT91C_CAN_MTCR & (0x1<<23); //允许接收下一条消息
\ ??AT91F_CAN1_Handler_7:
\ 0000008C 0948 LDR R0,??AT91F_CAN1_Handler_0+0xC ;; 0xfff8421c
\ 0000008E 8021 MOV R1,#+0x80
\ 00000090 0904 LSL R1,R1,#+0x10 ;; #+0x800000
\ 00000092 0160 STR R1,[R0, #+0]
79 /*******************************************************************/
80
81 if((status & AT91C_CAN_WAKEUP) == AT91C_CAN_WAKEUP) {
\ 00000094 0098 LDR R0,[SP, #+0]
\ 00000096 8002 LSL R0,R0,#+0xA
\ 00000098 02D5 BPL ??AT91F_CAN1_Handler_8
82 testCAN1 = AT91C_TEST_OK;
\ 0000009A 0748 LDR R0,??AT91F_CAN1_Handler_0+0x10 ;; testCAN1
\ 0000009C 0121 MOV R1,#+0x1
\ 0000009E 0170 STRB R1,[R0, #+0]
83 TRACE_DEBUG_H("=> CAN1 WAKEUP ");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -