📄 can.lst
字号:
103 }
104 #ifdef AT91C_BASE_CAN1
105 else if (can_number == 1) {
106 AT91C_BASE_CAN1->CAN_MR &= ~AT91C_CAN_CANEN;
107 // CAN Controller Enable
108 AT91C_BASE_CAN1->CAN_MR |= AT91C_CAN_CANEN;
109 }
110 #endif
111 }
112
113 // Error for Frame dataframe
114 // CRC error
115 if( (status&AT91C_CAN_CERR) == AT91C_CAN_CERR) {
\ ??CAN_ErrorHandling_3:
\ 00000078 400714E3 TST R4,#0x1000000
116 TRACE_ERROR("(CAN) CRC Error\n\r");
\ 0000007C 4C009F15 LDRNE R0,??CAN_ErrorHandling_1+0x10 ;; `?<Constant "-E- (CAN) CRC Error\\n\\r">`
\ 00000080 0B00001A BNE ??CAN_ErrorHandling_4
117 }
118 // Bit-stuffing error
119 else if( (status&AT91C_CAN_SERR) == AT91C_CAN_SERR) {
\ 00000084 800714E3 TST R4,#0x2000000
120 TRACE_ERROR("(CAN) Stuffing Error\n\r");
\ 00000088 44009F15 LDRNE R0,??CAN_ErrorHandling_1+0x14 ;; `?<Constant "-E- (CAN) Stuffing Er...">`
\ 0000008C 0800001A BNE ??CAN_ErrorHandling_4
121 }
122 // Bit error
123 else if( (status&AT91C_CAN_BERR) == AT91C_CAN_BERR) {
\ 00000090 400514E3 TST R4,#0x10000000
124 TRACE_ERROR("(CAN) Bit Error\n\r");
\ 00000094 3C009F15 LDRNE R0,??CAN_ErrorHandling_1+0x18 ;; `?<Constant "-E- (CAN) Bit Error\\n\\r">`
\ 00000098 0500001A BNE ??CAN_ErrorHandling_4
125 }
126 // Form error
127 else if( (status&AT91C_CAN_FERR) == AT91C_CAN_FERR) {
\ 0000009C 800614E3 TST R4,#0x8000000
128 TRACE_ERROR("(CAN) Form Error\n\r");
\ 000000A0 34009F15 LDRNE R0,??CAN_ErrorHandling_1+0x1C ;; `?<Constant "-E- (CAN) Form Error\\n\\r">`
\ 000000A4 0200001A BNE ??CAN_ErrorHandling_4
129 }
130 // Acknowledgment error
131 else if( (status&AT91C_CAN_AERR) == AT91C_CAN_AERR) {
\ 000000A8 400614E3 TST R4,#0x4000000
\ 000000AC 0100000A BEQ ??CAN_ErrorHandling_5
132 TRACE_ERROR("(CAN) Acknowledgment Error\n\r");
\ 000000B0 28009FE5 LDR R0,??CAN_ErrorHandling_1+0x20 ;; `?<Constant "-E- (CAN) Acknowledgm...">`
\ ??CAN_ErrorHandling_4:
\ 000000B4 ........ BL printf
133 }
134
135 // Error interrupt handler
136 // Represent the current status of the CAN bus and are not latched.
137 // See CAN, par. Error Interrupt Handler
138 // AT91C_CAN_WARN
139 // AT91C_CAN_ERRA
140 }
\ ??CAN_ErrorHandling_5:
\ 000000B8 3140BDE8 POP {R0,R4,R5,LR}
\ 000000BC 1EFF2FE1 BX LR ;; return
\ ??CAN_ErrorHandling_1:
\ 000000C0 ........ DC32 `?<Constant "-E- (CAN) CAN is in a...">`
\ 000000C4 ........ DC32 `?<Constant "-E- (CAN) CAN is in E...">`
\ 000000C8 ........ DC32 `?<Constant "-E- (CAN) CAN is in B...">`
\ 000000CC ........ DC32 `?<Constant "-E- (CAN) CAN%d reset\\n\\r">`
\ 000000D0 ........ DC32 `?<Constant "-E- (CAN) CRC Error\\n\\r">`
\ 000000D4 ........ DC32 `?<Constant "-E- (CAN) Stuffing Er...">`
\ 000000D8 ........ DC32 `?<Constant "-E- (CAN) Bit Error\\n\\r">`
\ 000000DC ........ DC32 `?<Constant "-E- (CAN) Form Error\\n\\r">`
\ 000000E0 ........ DC32 `?<Constant "-E- (CAN) Acknowledgm...">`
141
142 //------------------------------------------------------------------------------
143 // Generic CAN Interrupt handler
144 /// \param can_number can nulber
145 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
146 static void CAN_Handler( unsigned char can_number )
147 {
\ CAN_Handler:
\ 00000000 F0412DE9 PUSH {R4-R8,LR}
\ 00000004 0050B0E1 MOVS R5,R0
148 AT91PS_CAN base_can;
149 AT91PS_CAN_MB CAN_Mailbox;
150
151 unsigned int status;
152 unsigned int can_msr;
153 unsigned int* pCan_mcr;
154 unsigned int message_mode;
155 unsigned char numMailbox;
156 unsigned char state0=CAN_DISABLED;
\ 00000008 0060A0E3 MOV R6,#+0
157 unsigned char state1=CAN_DISABLED;
^
Warning[Pe550]: variable "state1" was set but never used
158
159 if( can_number == 0 ) {
\ 0000000C 0500001A BNE ??CAN_Handler_0
160 base_can = AT91C_BASE_CAN0;
\ 00000010 FF04A0E3 MOV R0,#-16777216
\ 00000014 FD0880E3 ORR R0,R0,#0xFD0000
161 CAN_Mailbox = AT91C_BASE_CAN0_MB0;
\ 00000018 807F80E3 ORR R7,R0,#0x200
162 state0 = pCAN0Transfer->state;
\ 0000001C ........ LDR R1,??DataTable26 ;; pCAN0Transfer
\ 00000020 001091E5 LDR R1,[R1, #+0]
\ 00000024 0060D1E5 LDRB R6,[R1, #+0]
163 }
164 #ifdef AT91C_BASE_CAN1
165 else {
166 base_can = AT91C_BASE_CAN1;
167 CAN_Mailbox = AT91C_BASE_CAN1_MB0;
168 state1 = pCAN1Transfer->state;
169 }
170 #endif
171 status = (base_can->CAN_SR) & (base_can->CAN_IMR);
\ ??CAN_Handler_0:
\ 00000028 101090E5 LDR R1,[R0, #+16]
\ 0000002C 0C2090E5 LDR R2,[R0, #+12]
\ 00000030 014002E0 AND R4,R2,R1
172 base_can->CAN_IDR = status;
\ 00000034 084080E5 STR R4,[R0, #+8]
173
174 TRACE_DEBUG("CAN0 status=0x%X\n\r", status);
175 if(status & AT91C_CAN_WAKEUP) {
\ 00000038 800914E3 TST R4,#0x200000
\ 0000003C 0A00000A BEQ ??CAN_Handler_1
176 if( can_number == 0 ) {
\ 00000040 000055E3 CMP R5,#+0
\ 00000044 3A00001A BNE ??CAN_Handler_2
177 pCAN0Transfer->test_can = AT91C_TEST_OK;
\ 00000048 ........ LDR R0,??DataTable26 ;; pCAN0Transfer
\ 0000004C 000090E5 LDR R0,[R0, #+0]
\ 00000050 0110A0E3 MOV R1,#+1
\ 00000054 0310C0E5 STRB R1,[R0, #+3]
178 pCAN0Transfer->state = CAN_IDLE;
\ 00000058 ........ LDR R0,??DataTable26 ;; pCAN0Transfer
\ 0000005C 000090E5 LDR R0,[R0, #+0]
\ 00000060 0210A0E3 MOV R1,#+2
\ 00000064 0010C0E5 STRB R1,[R0, #+0]
\ 00000068 310000EA B ??CAN_Handler_2
179 }
180 #ifdef AT91C_BASE_CAN1
181 else {
182 pCAN1Transfer->test_can = AT91C_TEST_OK;
183 pCAN1Transfer->state = CAN_IDLE;
184 }
185 #endif
186 }
187 // Mailbox event ?
188 else if ((status&0x0000FFFF) != 0) {
\ ??CAN_Handler_1:
\ 0000006C 0408B0E1 LSLS R0,R4,#+16
\ 00000070 2F00000A BEQ ??CAN_Handler_2
189 TRACE_DEBUG("Mailbox event\n\r");
190
191 // Handle Mailbox interrupts
192 for (numMailbox = 0; numMailbox < NUM_MAILBOX_MAX; numMailbox++) {
\ 00000074 0080A0E3 MOV R8,#+0
193
194 can_msr = *(unsigned int*)((unsigned int)CAN_Mailbox+(unsigned int)(0x10+(0x20*numMailbox)));
\ ??CAN_Handler_3:
\ 00000078 100097E5 LDR R0,[R7, #+16]
195 if ((AT91C_CAN_MRDY & can_msr) == AT91C_CAN_MRDY) {
\ 0000007C 800810E3 TST R0,#0x800000
\ 00000080 2200000A BEQ ??CAN_Handler_4
196 // Mailbox object type
197 message_mode = ((*(unsigned int*)((unsigned int)CAN_Mailbox+(unsigned int)(0x00+(0x20*numMailbox))))>>24)&0x7;
\ 00000084 001097E5 LDR R1,[R7, #+0]
\ 00000088 0720A0E3 MOV R2,#+7
\ 0000008C 211C12E0 ANDS R1,R2,R1, LSR #+24
198 TRACE_DEBUG("message_mode 0x%X\n\r", message_mode);
199 TRACE_DEBUG("numMailbox 0x%X\n\r", numMailbox);
200
201 if( message_mode == 0 ) {
\ 00000090 0200001A BNE ??CAN_Handler_5
202 TRACE_ERROR("Error in MOT\n\r");
\ 00000094 B8009FE5 LDR R0,??CAN_Handler_6 ;; `?<Constant "-E- Error in MOT\\n\\r">`
\ 00000098 ........ BL printf
\ 0000009C 1B0000EA B ??CAN_Handler_4
203 }
204 else if( ( message_mode == CAN_MOT_RECEPT )
205 || ( message_mode == CAN_MOT_RECEPT_OW )
206 || ( message_mode == CAN_MOT_PRODUCER ) ) {
\ ??CAN_Handler_5:
\ 000000A0 010051E3 CMP R1,#+1
\ 000000A4 02005113 CMPNE R1,#+2
\ 000000A8 05005113 CMPNE R1,#+5
\ 000000AC 1500001A BNE ??CAN_Handler_7
207 TRACE_DEBUG("Mailbox is in RECEPTION\n\r");
208 TRACE_DEBUG("Length 0x%X\n\r", (can_msr>>16)&0xF);
209 TRACE_DEBUG("CAN_MB_MID 0x%X\n\r", ((*(unsigned int*)((unsigned int)CAN_Mailbox+(unsigned int)(0x08+(0x20*numMailbox)))&AT91C_CAN_MIDvA)>>18));
210
211 TRACE_DEBUG("can_number %d\n\r", can_number);
212 if( can_number == 0 ) {
\ 000000B0 000055E3 CMP R5,#+0
\ 000000B4 1000001A BNE ??CAN_Handler_8
213 //CAN_MB_MDLx
214 pCAN0Transfer->data_low_reg =
215 (*(unsigned int*)((unsigned int)CAN_Mailbox+(unsigned int)(0x14+(0x20*numMailbox))));
\ 000000B8 ........ LDR R1,??DataTable26 ;; pCAN0Transfer
\ 000000BC 001091E5 LDR R1,[R1, #+0]
\ 000000C0 142097E5 LDR R2,[R7, #+20]
\ 000000C4 102081E5 STR R2,[R1, #+16]
216 //CAN_MB_MDHx
217 pCAN0Transfer->data_high_reg =
218 (*(unsigned int*)((unsigned int)CAN_Mailbox+(unsigned int)(0x18+(0x20*numMailbox))));
\ 000000C8 ........ LDR R1,??DataTable26 ;; pCAN0Transfer
\ 000000CC 001091E5 LDR R1,[R1, #+0]
\ 000000D0 182097E5 LDR R2,[R7, #+24]
\ 000000D4 142081E5 STR R2,[R1, #+20]
219 pCAN0Transfer->size = (can_msr>>16)&0xF;
\ 000000D8 0F10A0E3 MOV R1,#+15
\ 000000DC 200801E0 AND R0,R1,R0, LSR #+16
\ 000000E0 ........ LDR R1,??DataTable26 ;; pCAN0Transfer
\ 000000E4 001091E5 LDR R1,[R1, #+0]
\ 000000E8 200081E5 STR R0,[R1, #+32]
220 pCAN0Transfer->mailbox_number = numMailbox;
\ 000000EC ........ LDR R0,??DataTable26 ;; pCAN0Transfer
\ 000000F0 000090E5 LDR R0,[R0, #+0]
\ 000000F4 0280C0E5 STRB R8,[R0, #+2]
221 state0 = CAN_IDLE;
\ 000000F8 0260A0E3 MOV R6,#+2
222 }
223 #ifdef AT91C_BASE_CAN1
224 else {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -