📄 main.lst
字号:
\ 00000000 00B5 PUSH {LR}
\ 00000002 0022 MOV R2,#+0
\ 00000004 C021 MOV R1,#+0xC0
\ 00000006 4903 LSL R1,R1,#+0xD ;; #+0x180000
\ 00000008 0248 LDR R0,??AT91F_CAN_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_CAN_CfgPIO_0:
\ 00000014 00F4FFFF DC32 0xfffff400
21
22 /* Global variables */
\ In segment DATA_Z, align 1, align-sorted
23 volatile char testCAN = AT91C_TEST_NOK;
\ testCAN:
\ 00000000 DS8 1
\ In segment DATA_Z, align 4, align-sorted
24 unsigned int txcounter,rxcounter;
\ txcounter:
\ 00000000 DS8 4
\ In segment DATA_Z, align 4, align-sorted
\ rxcounter:
\ 00000000 DS8 4
25
26 //*----------------------------------------------------------------------------
27 //* \fn AT91F_CAN_Handler
28 //* \brief
29 //*----------------------------------------------------------------------------
\ In segment CODE, align 4, keep-with-next
30 void AT91F_CAN_Handler(void)
31 {
\ AT91F_CAN_Handler:
\ 00000000 10B5 PUSH {R4,LR}
\ 00000002 81B0 SUB SP,#+0x4
32 volatile unsigned int status;
33
34 status = AT91F_CAN_GetStatus(AT91C_BASE_CAN) & AT91F_CAN_GetInterruptMaskStatus(AT91C_BASE_CAN);
\ 00000004 .... LDR R0,??DataTable5 ;; 0xfffd0000
\ 00000006 ........ _BLF AT91F_CAN_GetStatus,AT91F_CAN_GetStatus??rT
\ 0000000A 041C MOV R4,R0
\ 0000000C .... LDR R0,??DataTable5 ;; 0xfffd0000
\ 0000000E ........ _BLF AT91F_CAN_GetInterruptMaskStatus,AT91F_CAN_GetInterruptMaskStatus??rT
\ 00000012 2040 AND R0,R4
\ 00000014 0090 STR R0,[SP, #+0]
35 AT91F_CAN_DisableIt(AT91C_BASE_CAN,status);
\ 00000016 0099 LDR R1,[SP, #+0]
\ 00000018 .... LDR R0,??DataTable5 ;; 0xfffd0000
\ 0000001A ........ _BLF AT91F_CAN_DisableIt,AT91F_CAN_DisableIt??rT
36
37 if(status & AT91C_CAN_WAKEUP) {
\ 0000001E 0098 LDR R0,[SP, #+0]
\ 00000020 8002 LSL R0,R0,#+0xA
\ 00000022 02D5 BPL ??AT91F_CAN_Handler_0
38 testCAN = AT91C_TEST_OK;
\ 00000024 1048 LDR R0,??AT91F_CAN_Handler_1 ;; testCAN
\ 00000026 0121 MOV R1,#+0x1
\ 00000028 0170 STRB R1,[R0, #+0]
39 TRACE_DEBUG_H("\n\r=> CAN WAKEUP ");
40 }
41
42 if(status & AT91C_CAN_MB0) {
\ ??AT91F_CAN_Handler_0:
\ 0000002A 0098 LDR R0,[SP, #+0]
\ 0000002C C007 LSL R0,R0,#+0x1F
\ 0000002E 0CD5 BPL ??AT91F_CAN_Handler_2
43 txcounter++;
\ 00000030 0E48 LDR R0,??AT91F_CAN_Handler_1+0x4 ;; txcounter
\ 00000032 0E49 LDR R1,??AT91F_CAN_Handler_1+0x4 ;; txcounter
\ 00000034 0968 LDR R1,[R1, #+0]
\ 00000036 491C ADD R1,#+0x1
\ 00000038 0160 STR R1,[R0, #+0]
44 // Enable Reception on Mailbox 1
45 AT91F_CAN_InitTransferRequest(AT91C_BASE_CAN,AT91C_CAN_MB1);
\ 0000003A 0221 MOV R1,#+0x2
\ 0000003C .... LDR R0,??DataTable5 ;; 0xfffd0000
\ 0000003E ........ _BLF AT91F_CAN_InitTransferRequest,AT91F_CAN_InitTransferRequest??rT
46 // Enable Mailbox 1 interrupt
47 AT91F_CAN_EnableIt(AT91C_BASE_CAN,AT91C_CAN_MB1);
\ 00000042 0221 MOV R1,#+0x2
\ 00000044 .... LDR R0,??DataTable5 ;; 0xfffd0000
\ 00000046 ........ _BLF AT91F_CAN_EnableIt,AT91F_CAN_EnableIt??rT
48 TRACE_DEBUG_H("\n\r=> CAN MB0 Interrupt");
49 }
50
51 if(status & AT91C_CAN_MB1) {
\ ??AT91F_CAN_Handler_2:
\ 0000004A 0098 LDR R0,[SP, #+0]
\ 0000004C 8007 LSL R0,R0,#+0x1E
\ 0000004E 07D5 BPL ??AT91F_CAN_Handler_3
52 testCAN = AT91C_TEST_OK;
\ 00000050 0548 LDR R0,??AT91F_CAN_Handler_1 ;; testCAN
\ 00000052 0121 MOV R1,#+0x1
\ 00000054 0170 STRB R1,[R0, #+0]
53 rxcounter++;
\ 00000056 0648 LDR R0,??AT91F_CAN_Handler_1+0x8 ;; rxcounter
\ 00000058 0549 LDR R1,??AT91F_CAN_Handler_1+0x8 ;; rxcounter
\ 0000005A 0968 LDR R1,[R1, #+0]
\ 0000005C 491C ADD R1,#+0x1
\ 0000005E 0160 STR R1,[R0, #+0]
54 TRACE_DEBUG_H("\n\r=> CAN MB1 Interrupt");
55 }
56 }
\ ??AT91F_CAN_Handler_3:
\ 00000060 01B0 ADD SP,#+0x4
\ 00000062 10BC POP {R4}
\ 00000064 01BC POP {R0}
\ 00000066 0047 BX R0 ;; return
\ ??AT91F_CAN_Handler_1:
\ 00000068 ........ DC32 testCAN
\ 0000006C ........ DC32 txcounter
\ 00000070 ........ DC32 rxcounter
57
58 //*--------------------------------------------------------------------------------------
59 //* Function Name : Main
60 //* Object : Software entry point
61 //*--------------------------------------------------------------------------------------
\ In segment CODE, align 4, keep-with-next
62 void main()
63 {
\ main:
\ 00000000 00B5 PUSH {LR}
64 ////////////////////////////////////////////////////////////////////////////////////////////////////
65 // DBGU Init
66 /////////////////////////////////////////////////////////////////////////////////////////////////////
67
68 // Enable DBGU Clock
69 //AT91F_DBGU_CfgPMC(); // DBGU is always clocked
70 // Open PIO for DBGU
71 AT91F_DBGU_CfgPIO();
\ 00000002 ........ _BLF AT91F_DBGU_CfgPIO,AT91F_DBGU_CfgPIO??rT
72 AT91F_US_Configure ((AT91PS_USART) AT91C_BASE_DBGU,
73 AT91C_MASTER_CLOCK,
74 AT91C_US_ASYNC_MODE, // mode Register to be programmed
75 AT91C_BAUDRATE_115200, // baudrate to be programmed
76 0); // timeguard to be programmed
\ 00000006 0020 MOV R0,#+0
\ 00000008 01B4 PUSH {R0}
\ 0000000A E123 MOV R3,#+0xE1
\ 0000000C 5B02 LSL R3,R3,#+0x9 ;; #+0x1C200
\ 0000000E 8C22 MOV R2,#+0x8C
\ 00000010 1201 LSL R2,R2,#+0x4 ;; #+0x8C0
\ 00000012 2049 LDR R1,??main_0 ;; 0x2dc6c00
\ 00000014 2048 LDR R0,??main_0+0x4 ;; 0xfffff200
\ 00000016 ........ _BLF AT91F_US_Configure,AT91F_US_Configure??rT
\ 0000001A 01B0 ADD SP,#+0x4
77 // Enable Transmitter
78 AT91F_US_EnableTx((AT91PS_USART) AT91C_BASE_DBGU);
\ 0000001C 1E48 LDR R0,??main_0+0x4 ;; 0xfffff200
\ 0000001E ........ _BLF AT91F_US_EnableTx,AT91F_US_EnableTx??rT
79
80 TRACE_INFO("\n\n\r======================================\n\r");
\ 00000022 1E48 LDR R0,??main_0+0x8 ;; _Stdout
\ 00000024 0028 CMP R0,#+0
\ 00000026 03D0 BEQ ??main_1
\ 00000028 1D49 LDR R1,??main_0+0xC ;; `?<Constant "\\n\\n\\r==================...">`
\ 0000002A 1C48 LDR R0,??main_0+0x8 ;; _Stdout
\ 0000002C ........ _BLF fprintf,fprintf??rT
81 TRACE_INFO("AT91SAMX Basic CAN\n\r");
\ ??main_1:
\ 00000030 1A48 LDR R0,??main_0+0x8 ;; _Stdout
\ 00000032 0028 CMP R0,#+0
\ 00000034 03D0 BEQ ??main_2
\ 00000036 1B49 LDR R1,??main_0+0x10 ;; `?<Constant "AT91SAMX Basic CAN\\n\\r">`
\ 00000038 1848 LDR R0,??main_0+0x8 ;; _Stdout
\ 0000003A ........ _BLF fprintf,fprintf??rT
82 TRACE_INFO("======================================\n\r");
\ ??main_2:
\ 0000003E 1748 LDR R0,??main_0+0x8 ;; _Stdout
\ 00000040 0028 CMP R0,#+0
\ 00000042 03D0 BEQ ??main_3
\ 00000044 1849 LDR R1,??main_0+0x14 ;; `?<Constant "=====================...">`
\ 00000046 1548 LDR R0,??main_0+0x8 ;; _Stdout
\ 00000048 ........ _BLF fprintf,fprintf??rT
83
84 ///////////////////////////////////////////////////////////////////////////////////////////
85 // Init CAN
86 ///////////////////////////////////////////////////////////////////////////////////////////
87
88 // Enable CAN PIOs
89 AT91F_CAN_CfgPIO();
\ ??main_3:
\ 0000004C ........ _BLF AT91F_CAN_CfgPIO,AT91F_CAN_CfgPIO??rT
90 // Enable CAN Clock
91 AT91F_CAN_CfgPMC();
\ 00000050 ........ _BLF AT91F_CAN_CfgPMC,AT91F_CAN_CfgPMC??rT
92
93 // Enable CAN Transceiver
94 AT91F_PIOA_CfgPMC();
\ 00000054 ........ _BLF AT91F_PIOA_CfgPMC,AT91F_PIOA_CfgPMC??rT
95 AT91F_PIO_CfgOutput(AT91C_BASE_PIOA,AT91B_CAN_TRANSCEIVER_RS) ;
\ 00000058 0421 MOV R1,#+0x4
\ 0000005A 1448 LDR R0,??main_0+0x18 ;; 0xfffff400
\ 0000005C ........ _BLF AT91F_PIO_CfgOutput,AT91F_PIO_CfgOutput??rT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -