📄 can.lst
字号:
225 //CAN_MB_MDLx
226 pCAN1Transfer->data_low_reg =
227 (*(unsigned int*)((unsigned int)CAN_Mailbox+(unsigned int)(0x14+(0x20*numMailbox))));
228 //CAN_MB_MDHx
229 pCAN1Transfer->data_high_reg =
230 (*(unsigned int*)((unsigned int)CAN_Mailbox+(unsigned int)(0x18+(0x20*numMailbox))));
231 pCAN1Transfer->size = (can_msr>>16)&0xF;
232 pCAN1Transfer->mailbox_number = numMailbox;
233 state1 = CAN_IDLE;
234 }
235 #endif
236 // Message Data has been received
237 pCan_mcr = (unsigned int*)((unsigned int)CAN_Mailbox+0x1C+(0x20*numMailbox));
238 *pCan_mcr = AT91C_CAN_MTCR;
\ ??CAN_Handler_8:
\ 000000FC 8008A0E3 MOV R0,#+8388608
\ 00000100 1C0087E5 STR R0,[R7, #+28]
\ 00000104 010000EA B ??CAN_Handler_4
239
240 }
241 else {
242 TRACE_DEBUG("Mailbox is in TRANSMIT\n\r");
243 TRACE_DEBUG("Length 0x%X\n\r", (can_msr>>16)&0xF);
244 TRACE_DEBUG("can_number %d\n\r", can_number);
245 if( can_number == 0 ) {
\ ??CAN_Handler_7:
\ 00000108 000055E3 CMP R5,#+0
246 state0 = CAN_IDLE;
\ 0000010C 0260A003 MOVEQ R6,#+2
247 }
248 else {
249 state1 = CAN_IDLE;
250 }
251 }
252 }
253 }
\ ??CAN_Handler_4:
\ 00000110 018088E2 ADD R8,R8,#+1
\ 00000114 207087E2 ADD R7,R7,#+32
\ 00000118 FF0008E2 AND R0,R8,#0xFF
\ 0000011C 100050E3 CMP R0,#+16
\ 00000120 D4FFFF3A BCC ??CAN_Handler_3
254 if( can_number == 0 ) {
\ 00000124 000055E3 CMP R5,#+0
255 pCAN0Transfer->state = state0;
\ 00000128 ........ LDREQ R0,??DataTable26 ;; pCAN0Transfer
\ 0000012C 00009005 LDREQ R0,[R0, #+0]
\ 00000130 0060C005 STRBEQ R6,[R0, #+0]
256 }
257 #ifdef AT91C_BASE_CAN1
258 else {
259 pCAN1Transfer->state = state1;
260 }
261 #endif
262 }
263 if ((status&0xFFCF0000) != 0) {
\ ??CAN_Handler_2:
\ 00000134 FF04A0E3 MOV R0,#-16777216
\ 00000138 CF0880E3 ORR R0,R0,#0xCF0000
\ 0000013C 040010E1 TST R0,R4
264 CAN_ErrorHandling(status, 0);
\ 00000140 0010A013 MOVNE R1,#+0
\ 00000144 0400A011 MOVNE R0,R4
\ 00000148 ........ BLNE CAN_ErrorHandling
265 }
266 }
\ 0000014C F041BDE8 POP {R4-R8,LR}
\ 00000150 1EFF2FE1 BX LR ;; return
\ ??CAN_Handler_6:
\ 00000154 ........ DC32 `?<Constant "-E- Error in MOT\\n\\r">`
267
268 //------------------------------------------------------------------------------
269 /// CAN 0 Interrupt handler
270 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
271 static void CAN0_Handler(void)
272 {
273 CAN_Handler( 0 );
\ CAN0_Handler:
\ 00000000 0000A0E3 MOV R0,#+0
\ 00000004 ........ B CAN_Handler ;; tailcall
274 }
275
276 //------------------------------------------------------------------------------
277 /// CAN 1 Interrupt handler
278 //------------------------------------------------------------------------------
279 #if defined AT91C_BASE_CAN1
280 static void CAN1_Handler(void)
281 {
282 CAN_Handler( 1 );
283 }
284 #endif
285
286 //------------------------------------------------------------------------------
287 // Global functions
288 //------------------------------------------------------------------------------
289
290 //------------------------------------------------------------------------------
291 /// Configure the corresponding mailbox
292 /// \param pTransfer can transfer structure
293 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
294 void CAN_InitMailboxRegisters( CanTransfer *pTransfer )
295 {
296 AT91PS_CAN base_can;
^
Warning[Pe550]: variable "base_can" was set but never used
status = (base_can->CAN_SR) & (base_can->CAN_IMR);
^
"F:\Diplomovka\IARprojects\Diplomovka\25.4.2009\getting-started-project-at91sam7x-ek-iar\getting-started-project-at91sam7x-ek\at91lib\peripherals\can\can.c",171 Warning[Pa082]:
undefined behavior: the order of volatile accesses is undefined in
this statement
297 AT91PS_CAN_MB CAN_Mailbox;
298
299 if( pTransfer->can_number == 0 ) {
\ CAN_InitMailboxRegisters:
\ 00000000 0120D0E5 LDRB R2,[R0, #+1]
\ 00000004 000052E3 CMP R2,#+0
300 base_can = AT91C_BASE_CAN0;
301 CAN_Mailbox = AT91C_BASE_CAN0_MB0;
\ 00000008 70109F05 LDREQ R1,??CAN_InitMailboxRegisters_0 ;; 0xfffd0200
302 }
303 #ifdef AT91C_BASE_CAN1
304 else {
305 base_can = AT91C_BASE_CAN1;
306 CAN_Mailbox = AT91C_BASE_CAN1_MB0;
307 }
308 #endif
309 CAN_Mailbox = (AT91PS_CAN_MB)((unsigned int)CAN_Mailbox+(unsigned int)(0x20*pTransfer->mailbox_number));
\ 0000000C 0220D0E5 LDRB R2,[R0, #+2]
\ 00000010 821281E0 ADD R1,R1,R2, LSL #+5
310
311 pTransfer->mailbox_in_use |= 1<<(pTransfer->mailbox_number);
^
Warning[Pa082]: undefined behavior: the order of volatile accesses is
undefined in this statement
\ 00000014 1C2090E5 LDR R2,[R0, #+28]
\ 00000018 0130A0E3 MOV R3,#+1
\ 0000001C D2C0D0E1 LDRSB R12,[R0, #+2]
\ 00000020 132C82E1 ORR R2,R2,R3, LSL R12
\ 00000024 1C2080E5 STR R2,[R0, #+28]
312 // MailBox Control Register
313 CAN_Mailbox->CAN_MB_MCR = 0x0;
\ 00000028 0020A0E3 MOV R2,#+0
\ 0000002C 1C2081E5 STR R2,[R1, #+28]
314 // MailBox Mode Register
315 CAN_Mailbox->CAN_MB_MMR = 0x00;
\ 00000030 002081E5 STR R2,[R1, #+0]
316 // CAN Message Acceptance Mask Register
317 CAN_Mailbox->CAN_MB_MAM = pTransfer->acceptance_mask_reg;
\ 00000034 082090E5 LDR R2,[R0, #+8]
\ 00000038 042081E5 STR R2,[R1, #+4]
318 // MailBox ID Register
319 // Disable the mailbox before writing to CAN_MIDx registers
320 if( (pTransfer->identifier & AT91C_CAN_MIDE) == AT91C_CAN_MIDE ) {
\ 0000003C 0C2090E5 LDR R2,[R0, #+12]
\ 00000040 800512E3 TST R2,#0x20000000
\ 00000044 042091E5 LDR R2,[R1, #+4]
321 // Extended
322 CAN_Mailbox->CAN_MB_MAM |= AT91C_CAN_MIDE;
\ 00000048 80258213 ORRNE R2,R2,#0x20000000
323 }
324 else {
325 CAN_Mailbox->CAN_MB_MAM &= ~AT91C_CAN_MIDE;
\ 0000004C 8025C203 BICEQ R2,R2,#0x20000000
\ 00000050 042081E5 STR R2,[R1, #+4]
326 }
327 CAN_Mailbox->CAN_MB_MID = pTransfer->identifier;
\ 00000054 0C2090E5 LDR R2,[R0, #+12]
\ 00000058 082081E5 STR R2,[R1, #+8]
328
329 // MailBox Mode Register
330 CAN_Mailbox->CAN_MB_MMR = pTransfer->mode_reg;
\ 0000005C 042090E5 LDR R2,[R0, #+4]
\ 00000060 002081E5 STR R2,[R1, #+0]
331 // MailBox Data Low Register
332 CAN_Mailbox->CAN_MB_MDL = pTransfer->data_low_reg;
\ 00000064 102090E5 LDR R2,[R0, #+16]
\ 00000068 142081E5 STR R2,[R1, #+20]
333 // MailBox Data High Register
334 CAN_Mailbox->CAN_MB_MDH = pTransfer->data_high_reg;
\ 0000006C 142090E5 LDR R2,[R0, #+20]
\ 00000070 182081E5 STR R2,[R1, #+24]
335 // MailBox Control Register
336 CAN_Mailbox->CAN_MB_MCR = pTransfer->control_reg;
\ 00000074 180090E5 LDR R0,[R0, #+24]
\ 00000078 1C0081E5 STR R0,[R1, #+28]
337 }
\ 0000007C 1EFF2FE1 BX LR ;; return
\ ??CAN_InitMailboxRegisters_0:
\ 00000080 0002FDFF DC32 0xfffd0200
338
339 //------------------------------------------------------------------------------
340 /// Reset the MBx
341 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
342 void CAN_ResetAllMailbox( void )
343 {
\ CAN_ResetAllMailbox:
\ 00000000 10402DE9 PUSH {R4,LR}
344 unsigned char i;
345
346 #if defined (AT91C_BASE_CAN0_MB0)
347 CAN_ResetTransfer( pCAN0Transfer );
\ 00000004 ........ LDR R0,??DataTable26 ;; pCAN0Transfer
\ 00000008 000090E5 LDR R0,[R0, #+0]
\ 0000000C ........ BL CAN_ResetTransfer
348 for( i=0; i<8; i++ ) {
\ 00000010 0040A0E3 MOV R4,#+0
349 pCAN0Transfer->can_number = 0;
\ ??CAN_ResetAllMailbox_0:
\ 00000014 ........ LDR R0,??DataTable26 ;; pCAN0Transfer
\ 00000018 000090E5 LDR R0,[R0, #+0]
\ 0000001C 0010A0E3 MOV R1,#+0
\ 00000020 0110C0E5 STRB R1,[R0, #+1]
350 pCAN0Transfer->mailbox_number = i;
\ 00000024 ........ LDR R0,??DataTable26 ;; pCAN0Transfer
\ 00000028 000090E5 LDR R0,[R0, #+0]
\ 0000002C 0240C0E5 STRB R4,[R0, #+2]
351 pCAN0Transfer->mode_reg = AT91C_CAN_MOT_DIS;
\ 00000030 ........ LDR R0,??DataTable26 ;; pCAN0Transfer
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -