📄 main.lst
字号:
50 void AT91F_CAN1_Handler(void) //接收CAN0 ->MB0 发送的数据
51 {
\ AT91F_CAN1_Handler:
\ 00000000 71B5 PUSH {R0,R4-R6,LR}
52 volatile unsigned int status;
53 int RxData ;
54
55 status = AT91F_CAN_GetStatus(AT91C_BASE_CAN1) & AT91F_CAN_GetInterruptMaskStatus(AT91C_BASE_CAN1);
\ 00000002 .... LDR R0,??Subroutine3_0 ;; 0xfff84010
\ 00000004 0068 LDR R0,[R0, #+0]
\ 00000006 .... LDR R1,??Subroutine3_0+0x4 ;; 0xfff8400c
\ 00000008 0968 LDR R1,[R1, #+0]
\ 0000000A 0140 AND R1,R0
\ 0000000C 0091 STR R1,[SP, #+0]
56 AT91F_CAN_DisableIt(AT91C_BASE_CAN1,status);
\ 0000000E 0098 LDR R0,[SP, #+0]
\ 00000010 .... LDR R1,??Subroutine3_0+0x8 ;; 0xfff84008
\ 00000012 0860 STR R0,[R1, #+0]
57
58 RxData=AT91F_CAN_GetMessageDataLow(&AT91C_BASE_CAN1->CAN_MB0) ; //接收低四位
\ 00000014 .... LDR R0,??Subroutine3_0+0xC ;; 0xfff84214
\ 00000016 0668 LDR R6,[R0, #+0]
59 TRACE_INFO("\r\n______Interrupt received data,Low is:") ;
\ 00000018 .... LDR R4,??DataTable6 ;; _Stdout
\ 0000001A .... LDR R5,??DataTable3 ;; `?<Constant "%d">`
\ 0000001C 291C MOV R1,R5
\ 0000001E 3C31 ADD R1,#+0x3C
\ 00000020 201C MOV R0,R4
\ 00000022 ........ _BLF fprintf,fprintf??rT
60 TRACE_INFO("%d",RxData );
\ 00000026 321C MOV R2,R6
\ 00000028 291C MOV R1,R5
\ 0000002A 201C MOV R0,R4
\ 0000002C ........ _BLF fprintf,fprintf??rT
61 RxData=AT91F_CAN_GetMessageDataHigh(&AT91C_BASE_CAN1->CAN_MB0) ; //接收高四位
\ 00000030 .... LDR R0,??Subroutine3_0+0x10 ;; 0xfff84218
\ 00000032 0668 LDR R6,[R0, #+0]
62 TRACE_INFO("\r\n_______Interrupt received data,High is:") ;
\ 00000034 291C MOV R1,R5
\ 00000036 6831 ADD R1,#+0x68
\ 00000038 201C MOV R0,R4
\ 0000003A ........ _BLF fprintf,fprintf??rT
63
64 /**如果如下指令不执行的话,所有读出的数据都将是第一次接收到的数据**/
65 AT91C_BASE_CAN1_MB0->CAN_MB_MCR=AT91C_CAN_MTCR; //允许接收下一条消息
\ 0000003E .... LDR R0,??Subroutine3_0+0x14 ;; 0xfff8421c
\ 00000040 8021 MOV R1,#+0x80
\ 00000042 0904 LSL R1,R1,#+0x10 ;; #+0x800000
\ 00000044 0160 STR R1,[R0, #+0]
66 /*******************************************************************/
67 TRACE_INFO("%d",RxData );
\ 00000046 321C MOV R2,R6
\ 00000048 291C MOV R1,R5
\ 0000004A 201C MOV R0,R4
\ 0000004C ........ _BLF fprintf,fprintf??rT
68 if((status & AT91C_CAN_WAKEUP) == AT91C_CAN_WAKEUP) {
\ 00000050 0098 LDR R0,[SP, #+0]
\ 00000052 8002 LSL R0,R0,#+0xA
\ 00000054 02D5 BPL ??AT91F_CAN1_Handler_0
69 testCAN1 = AT91C_TEST_OK;
\ 00000056 .... LDR R0,??Subroutine3_0+0x18 ;; testCAN1
\ 00000058 0121 MOV R1,#+0x1
\ 0000005A 0170 STRB R1,[R0, #+0]
70 TRACE_DEBUG_H("=> CAN1 WAKEUP ");
71 }
72
73 }
\ ??AT91F_CAN1_Handler_0:
\ 0000005C REQUIRE ?Subroutine3
\ 0000005C ;; // Fall through to label ?Subroutine3
74
75 //*--------------------------------------------------------------------------------------
76 //* Function Name : Main
77 //* Object : Software entry point
78 //*--------------------------------------------------------------------------------------
\ In segment CODE, align 4, keep-with-next
79 void main()
80 {
\ main:
\ 00000000 F0B5 PUSH {R4-R7,LR}
81 ////////////////////////////////////////////////////////////////////////////////////////////////////
82 // 设置MCK ,can的时钟为 MCK ,如今MCK=48mHz ,为了降到5K的波特率,需要降低主时钟,现如今将MCK时钟
83 // 降为原来的 8 分之一 ,现 MCK=6M ,
84 //***************** #define AT91B_MAIN_OSC 18432000 // Main Oscillator MAINCK ???
85 ////////////////////////////////////////////////////////////////////////////////////////////////////
86 AT91C_BASE_PMC->PMC_SCDR |=1 ;
\ 00000002 3F48 LDR R0,??main_0 ;; 0xfffffc04
\ 00000004 0168 LDR R1,[R0, #+0]
\ 00000006 0122 MOV R2,#+0x1
\ 00000008 0A43 ORR R2,R1
\ 0000000A 0260 STR R2,[R0, #+0]
87 AT91C_BASE_PMC->PMC_MCKR =AT91C_PMC_CSS_MAIN_CLK ; //选择主时钟
\ 0000000C 3D48 LDR R0,??main_0+0x4 ;; 0xfffffc30
\ 0000000E 0121 MOV R1,#+0x1
\ 00000010 0160 STR R1,[R0, #+0]
88 AT91C_BASE_PMC->PMC_MCKR |=AT91C_PMC_PRES_CLK ; //分频 8 倍
\ 00000012 0168 LDR R1,[R0, #+0]
\ 00000014 0160 STR R1,[R0, #+0]
89 AT91C_BASE_PMC->PMC_SCER |=1 ;
\ 00000016 3C48 LDR R0,??main_0+0x8 ;; 0xfffffc00
\ 00000018 0168 LDR R1,[R0, #+0]
\ 0000001A 0122 MOV R2,#+0x1
\ 0000001C 0A43 ORR R2,R1
\ 0000001E 0260 STR R2,[R0, #+0]
90
91 for (int n=0;n<65535;)
92 n++ ;
93 // DBGU Init
94 /////////////////////////////////////////////////////////////////////////////////////////////////////
95 // Enable DBGU Clock
96 AT91F_DBGU_CfgPMC(); // DBGU is always clocked
\ 00000020 3A4C LDR R4,??main_0+0xC ;; 0xfffffc10
\ 00000022 0220 MOV R0,#+0x2
\ 00000024 2060 STR R0,[R4, #+0]
\ 00000026 C020 MOV R0,#+0xC0
\ 00000028 0006 LSL R0,R0,#+0x18 ;; #-1073741824
\ 0000002A 3949 LDR R1,??main_0+0x10 ;; 0xfffff470
\ 0000002C 0860 STR R0,[R1, #+0]
97 // Open PIO for DBGU
98 AT91F_DBGU_CfgPIO();
\ 0000002E 394D LDR R5,??main_0+0x14 ;; 0xfffff474
\ 00000030 0021 MOV R1,#+0
\ 00000032 2960 STR R1,[R5, #+0]
\ 00000034 384E LDR R6,??main_0+0x18 ;; 0xfffff404
\ 00000036 3060 STR R0,[R6, #+0]
99 AT91F_US_Configure ((AT91PS_USART) AT91C_BASE_DBGU,
100 AT91C_MASTER_CLOCK,
101 AT91C_US_SYNC_MODE, // mode Register to be programmed
102 115200, // baudrate to be programmedAT91C_BAUDRATE_115200
103 0); // timeguard to be programmed
\ 00000038 3848 LDR R0,??main_0+0x1C ;; 0xfffff20c
\ 0000003A C943 MVN R1,R1 ;; #-1
\ 0000003C 0160 STR R1,[R0, #+0]
\ 0000003E 384F LDR R7,??main_0+0x20 ;; 0xfffff200
\ 00000040 AC20 MOV R0,#+0xAC
\ 00000042 3860 STR R0,[R7, #+0]
\ 00000044 3748 LDR R0,??main_0+0x24 ;; 0xfffff220
\ 00000046 1A21 MOV R1,#+0x1A
\ 00000048 0160 STR R1,[R0, #+0]
\ 0000004A 3748 LDR R0,??main_0+0x28 ;; 0xfffff228
\ 0000004C 0021 MOV R1,#+0
\ 0000004E 0160 STR R1,[R0, #+0]
\ 00000050 3648 LDR R0,??main_0+0x2C ;; 0xfffff300
\ 00000052 ........ _BLF AT91F_PDC_Open,AT91F_PDC_Open??rT
\ 00000056 3648 LDR R0,??main_0+0x30 ;; 0xfffff204
\ 00000058 9C21 MOV R1,#+0x9C
\ 0000005A 0901 LSL R1,R1,#+0x4 ;; #+0x9C0
\ 0000005C 0160 STR R1,[R0, #+0]
104 // Enable Transmitter
105 AT91F_US_EnableTx((AT91PS_USART) AT91C_BASE_DBGU);
\ 0000005E 4020 MOV R0,#+0x40
\ 00000060 3860 STR R0,[R7, #+0]
\ 00000062 344F LDR R7,??main_0+0x34 ;; `?<Constant "\\n\\n\\r==================...">`
\ 00000064 391C MOV R1,R7
\ 00000066 .... LDR R0,??DataTable6 ;; _Stdout
106
107 TRACE_INFO("\n\n\r======================================\n\r");
\ 00000068 ........ _BLF fprintf,fprintf??rT
108 TRACE_INFO("AT91SAM7A3 Basic CAN\n\r");
\ 0000006C 391C MOV R1,R7
\ 0000006E 2C31 ADD R1,#+0x2C
\ 00000070 .... LDR R0,??DataTable6 ;; _Stdout
\ 00000072 ........ _BLF fprintf,fprintf??rT
109 TRACE_INFO("======================================\n\r");
\ 00000076 4437 ADD R7,#+0x44
\ 00000078 391C MOV R1,R7
\ 0000007A .... LDR R0,??DataTable6 ;; _Stdout
\ 0000007C ........ _BLF fprintf,fprintf??rT
110
111 ///////////////////////////////////////////////////////////////////////////////////////////
112 // Init CAN0 and CAN1
113 ///////////////////////////////////////////////////////////////////////////////////////////
114
115 // Enable CAN0 and CAN1 PIOs
116 AT91F_CAN0_CfgPIO();
\ 00000080 C020 MOV R0,#+0xC0
\ 00000082 0005 LSL R0,R0,#+0x14 ;; #+0xC000000
\ 00000084 2249 LDR R1,??main_0+0x10 ;; 0xfffff470
\ 00000086 0860 STR R0,[R1, #+0]
\ 00000088 0021 MOV R1,#+0
\ 0000008A 2960 STR R1,[R5, #+0]
\ 0000008C 3060 STR R0,[R6, #+0]
117 AT91F_CAN1_CfgPIO();
\ 0000008E ........ _BLF AT91F_CAN1_CfgPIO,AT91F_CAN1_CfgPIO??rT
118 // Enable CAN0 and CAN1 Clocks
119 AT91F_CAN0_CfgPMC();
\ 00000092 1025 MOV R5,#+0x10
\ 00000094 2560 STR R5,[R4, #+0]
120 AT91F_CAN1_CfgPMC();
\ 00000096 2026 MOV R6,#+0x20
\ 00000098 2660 STR R6,[R4, #+0]
121
122 // Enable CANs Transceivers
123 AT91F_PIOA_CfgPMC();
\ 0000009A 0420 MOV R0,#+0x4
\ 0000009C 2060 STR R0,[R4, #+0]
124 AT91F_PIO_CfgOutput(AT91C_BASE_PIOA,AT91B_CAN_TRANSCEIVER_RS) ;
\ 0000009E 4005 LSL R0,R0,#+0x15
\ 000000A0 2549 LDR R1,??main_0+0x38 ;; 0xfffff400
\ 000000A2 0860 STR R0,[R1, #+0]
\ 000000A4 2549 LDR R1,??main_0+0x3C ;; 0xfffff410
\ 000000A6 0860 STR R0,[R1, #+0]
125 // Clear PA23 <=> Enable Transceiver Normal Mode (versus Standby mode)
126 AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,AT91B_CAN_TRANSCEIVER_RS) ;
\ 000000A8 2549 LDR R1,??main_0+0x40 ;; 0xfffff434
\ 000000AA 0860 STR R0,[R1, #+0]
127
128 // Init CAN0 Interrupt Source Level
129 AT91F_AIC_ConfigureIt(AT91C_BASE_AIC, // CAN0 base address
130 AT91C_ID_CAN0, // CAN0 ID
131 AT91C_AIC_PRIOR_HIGHEST, // Max priority
132 AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, // Level sensitive
133 AT91F_CAN0_Handler); // C Handler
\ 000000AC 254C LDR R4,??main_0+0x44 ;; 0xfffff000
\ 000000AE 2648 LDR R0,??main_0+0x48 ;; AT91F_CAN0_Handler
\ 000000B0 01B4 PUSH {R0}
\ 000000B2 0023 MOV R3,#+0
\ 000000B4 0722 MOV R2,#+0x7
\ 000000B6 0421 MOV R1,#+0x4
\ 000000B8 201C MOV R0,R4
\ 000000BA ........ _BLF AT91F_AIC_ConfigureIt,AT91F_AIC_ConfigureIt??rT
134
135 AT91F_AIC_EnableIt(AT91C_BASE_AIC,AT91C_ID_CAN0);
\ 000000BE 234F LDR R7,??main_0+0x4C ;; 0xfffff120
\ 000000C0 3D60 STR R5,[R7, #+0]
136
137 // Init CAN1 Interrupt Source Level
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -