📄 main.lst
字号:
\ 0000000C 0047 BX R0 ;; return
\ 0000000E C046 NOP
\ ??AT91F_CAN0_CfgPMC_0:
\ 00000010 00FCFFFF DC32 0xfffffc00
\ In segment CODE, align 4, keep-with-next
\ __??Code16?? __code __interwork __atpcs void AT91F_CAN0_CfgPIO(void)
\ AT91F_CAN0_CfgPIO:
\ 00000000 00B5 PUSH {LR}
\ 00000002 0022 MOV R2,#+0
\ 00000004 C021 MOV R1,#+0xC0
\ 00000006 0905 LSL R1,R1,#+0x14 ;; #+0xC000000
\ 00000008 0248 LDR R0,??AT91F_CAN0_CfgPIO_0 ;; 0xfffff400
\ 0000000A ........ _BLF AT91F_PIO_CfgPeriph,AT91F_PIO_CfgPeriph??rT
\ 0000000E 01BC POP {R0}
\ 00000010 0047 BX R0 ;; return
\ 00000012 C046 NOP
\ ??AT91F_CAN0_CfgPIO_0:
\ 00000014 00F4FFFF DC32 0xfffff400
\ In segment CODE, align 4, keep-with-next
\ __??Code16?? __code __interwork __atpcs void AT91F_CAN1_CfgPMC(void)
\ AT91F_CAN1_CfgPMC:
\ 00000000 00B5 PUSH {LR}
\ 00000002 2021 MOV R1,#+0x20
\ 00000004 0248 LDR R0,??AT91F_CAN1_CfgPMC_0 ;; 0xfffffc00
\ 00000006 ........ _BLF AT91F_PMC_EnablePeriphClock,AT91F_PMC_EnablePeriphClock??rT
\ 0000000A 01BC POP {R0}
\ 0000000C 0047 BX R0 ;; return
\ 0000000E C046 NOP
\ ??AT91F_CAN1_CfgPMC_0:
\ 00000010 00FCFFFF DC32 0xfffffc00
\ In segment CODE, align 4, keep-with-next
\ __??Code16?? __code __interwork __atpcs void AT91F_CAN1_CfgPIO(void)
\ AT91F_CAN1_CfgPIO:
\ 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 0E48 LDR R0,??AT91F_CAN0_Handler_0 ;; 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_1
\ 0000002C 0B49 LDR R1,??AT91F_CAN0_Handler_0+0x4 ;; `?<Constant "______Interrupt now i...">`
\ 0000002E .... LDR R0,??DataTable26 ;; _Stdout
\ 00000030 ........ _BLF fprintf,fprintf??rT
38 TRACE_INFO("%d",RxData);
\ ??AT91F_CAN0_Handler_1:
\ 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,??DataTable19 ;; `?<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 0548 LDR R0,??AT91F_CAN0_Handler_0+0x8 ;; 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_0:
\ 00000058 0002F8FF DC32 0xfff80200
\ 0000005C ........ DC32 `?<Constant "______Interrupt now i...">`
\ 00000060 ........ 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 30B5 PUSH {R4,R5,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) ; //接收低四位
\ 0000001E 1A48 LDR R0,??AT91F_CAN1_Handler_0 ;; 0xfff84200
\ 00000020 ........ _BLF AT91F_CAN_GetMessageDataLow,AT91F_CAN_GetMessageDataLow??rT
\ 00000024 041C MOV R4,R0
59 TRACE_INFO("\r\n______Interrupt received data,Low is:") ;
\ 00000026 .... LDR R0,??DataTable26 ;; _Stdout
\ 00000028 0028 CMP R0,#+0
\ 0000002A 03D0 BEQ ??AT91F_CAN1_Handler_1
\ 0000002C 1749 LDR R1,??AT91F_CAN1_Handler_0+0x4 ;; `?<Constant "\\r\\n______Interrupt rec...">`
\ 0000002E .... LDR R0,??DataTable26 ;; _Stdout
\ 00000030 ........ _BLF fprintf,fprintf??rT
60 TRACE_INFO("%d",RxData );
\ ??AT91F_CAN1_Handler_1:
\ 00000034 .... LDR R0,??DataTable26 ;; _Stdout
\ 00000036 0028 CMP R0,#+0
\ 00000038 04D0 BEQ ??AT91F_CAN1_Handler_2
\ 0000003A 221C MOV R2,R4
\ 0000003C .... LDR R1,??DataTable19 ;; `?<Constant "%d">`
\ 0000003E .... LDR R0,??DataTable26 ;; _Stdout
\ 00000040 ........ _BLF fprintf,fprintf??rT
61 RxData=AT91F_CAN_GetMessageDataHigh(&AT91C_BASE_CAN1->CAN_MB0) ; //接收高四位
\ ??AT91F_CAN1_Handler_2:
\ 00000044 1048 LDR R0,??AT91F_CAN1_Handler_0 ;; 0xfff84200
\ 00000046 ........ _BLF AT91F_CAN_GetMessageDataHigh,AT91F_CAN_GetMessageDataHigh??rT
\ 0000004A 041C MOV R4,R0
62 TRACE_INFO("\r\n_______Interrupt received data,High is:") ;
\ 0000004C .... LDR R0,??DataTable26 ;; _Stdout
\ 0000004E 0028 CMP R0,#+0
\ 00000050 03D0 BEQ ??AT91F_CAN1_Handler_3
\ 00000052 0F49 LDR R1,??AT91F_CAN1_Handler_0+0x8 ;; `?<Constant "\\r\\n_______Interrupt re...">`
\ 00000054 .... LDR R0,??DataTable26 ;; _Stdout
\ 00000056 ........ _BLF fprintf,fprintf??rT
63
64
65 /**如果如下指令不执行的话,所有读出的数据都将是第一次接收到的数据**/
66 AT91C_BASE_CAN1_MB0->CAN_MB_MCR=AT91C_CAN_MTCR; //允许接收下一条消息
\ ??AT91F_CAN1_Handler_3:
\ 0000005A 0E48 LDR R0,??AT91F_CAN1_Handler_0+0xC ;; 0xfff8421c
\ 0000005C 8021 MOV R1,#+0x80
\ 0000005E 0904 LSL R1,R1,#+0x10 ;; #+0x800000
\ 00000060 0160 STR R1,[R0, #+0]
67 /*******************************************************************/
68 TRACE_INFO("%d",RxData );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -