📄 can.lst
字号:
\ 00000034 000090E5 LDR R0,[R0, #+0]
\ 00000038 041080E5 STR R1,[R0, #+4]
352 pCAN0Transfer->acceptance_mask_reg = 0;
\ 0000003C ........ LDR R0,??DataTable26 ;; pCAN0Transfer
\ 00000040 000090E5 LDR R0,[R0, #+0]
\ 00000044 081080E5 STR R1,[R0, #+8]
353 pCAN0Transfer->identifier = 0;
\ 00000048 ........ LDR R0,??DataTable26 ;; pCAN0Transfer
\ 0000004C 000090E5 LDR R0,[R0, #+0]
\ 00000050 0C1080E5 STR R1,[R0, #+12]
354 pCAN0Transfer->data_low_reg = 0x00000000;
\ 00000054 ........ LDR R0,??DataTable26 ;; pCAN0Transfer
\ 00000058 000090E5 LDR R0,[R0, #+0]
\ 0000005C 101080E5 STR R1,[R0, #+16]
355 pCAN0Transfer->data_high_reg = 0x00000000;
\ 00000060 ........ LDR R0,??DataTable26 ;; pCAN0Transfer
\ 00000064 000090E5 LDR R0,[R0, #+0]
\ 00000068 141080E5 STR R1,[R0, #+20]
356 pCAN0Transfer->control_reg = 0x00000000;
\ 0000006C ........ LDR R0,??DataTable26 ;; pCAN0Transfer
\ 00000070 000090E5 LDR R0,[R0, #+0]
\ 00000074 181080E5 STR R1,[R0, #+24]
357 CAN_InitMailboxRegisters( pCAN0Transfer );
\ 00000078 ........ LDR R0,??DataTable26 ;; pCAN0Transfer
\ 0000007C 000090E5 LDR R0,[R0, #+0]
\ 00000080 ........ BL CAN_InitMailboxRegisters
358 }
\ 00000084 014084E2 ADD R4,R4,#+1
\ 00000088 FF0004E2 AND R0,R4,#0xFF
\ 0000008C 080050E3 CMP R0,#+8
\ 00000090 DFFFFF3A BCC ??CAN_ResetAllMailbox_0
359 #endif
360 #if defined (AT91C_BASE_CAN0_MB8)
361 for( i=0; i<8; i++ ) {
362 pCAN0Transfer->can_number = 0;
363 pCAN0Transfer->mailbox_number = i+8;
364 pCAN0Transfer->mode_reg = AT91C_CAN_MOT_DIS;
365 pCAN0Transfer->acceptance_mask_reg = 0;
366 pCAN0Transfer->identifier = 0;
367 pCAN0Transfer->data_low_reg = 0x00000000;
368 pCAN0Transfer->data_high_reg = 0x00000000;
369 pCAN0Transfer->control_reg = 0x00000000;
370 CAN_InitMailboxRegisters( pCAN0Transfer );
371 }
372 #endif
373
374 #if defined (AT91C_BASE_CAN1_MB0)
375 if( pCAN1Transfer != NULL ) {
376 CAN_ResetTransfer( pCAN1Transfer );
377 for( i=0; i<8; i++ ) {
378 pCAN1Transfer->can_number = 1;
379 pCAN1Transfer->mailbox_number = i;
380 pCAN1Transfer->mode_reg = AT91C_CAN_MOT_DIS;
381 pCAN1Transfer->acceptance_mask_reg = 0;
382 pCAN1Transfer->identifier = 0;
383 pCAN1Transfer->data_low_reg = 0x00000000;
384 pCAN1Transfer->data_high_reg = 0x00000000;
385 pCAN1Transfer->control_reg = 0x00000000;
386 CAN_InitMailboxRegisters( pCAN1Transfer );
387 }
388 }
389 #endif
390 #if defined (AT91C_BASE_CAN1_MB8)
391 if( pCAN1Transfer != NULL ) {
392 for( i=0; i<8; i++ ) {
393 pCAN1Transfer->can_number = 1;
394 pCAN1Transfer->mailbox_number = i+8;
395 pCAN1Transfer->mode_reg = AT91C_CAN_MOT_DIS;
396 pCAN1Transfer->acceptance_mask_reg = 0;
397 pCAN1Transfer->identifier = 0;
398 pCAN1Transfer->data_low_reg = 0x00000000;
399 pCAN1Transfer->data_high_reg = 0x00000000;
400 pCAN1Transfer->control_reg = 0x00000000;
401 CAN_InitMailboxRegisters( pCAN1Transfer );
402 }
403 }
404 #endif
405
406 }
\ 00000094 1040BDE8 POP {R4,LR}
\ 00000098 1EFF2FE1 BX LR ;; return
407
408 //------------------------------------------------------------------------------
409 /// CAN reset Transfer descriptor
410 /// \param pTransfer can transfer structure
411 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
412 void CAN_ResetTransfer( CanTransfer *pTransfer )
413 {
414 pTransfer->state = CAN_IDLE;
\ CAN_ResetTransfer:
\ 00000000 0210A0E3 MOV R1,#+2
\ 00000004 0010C0E5 STRB R1,[R0, #+0]
415 pTransfer->can_number = 0;
\ 00000008 0010A0E3 MOV R1,#+0
\ 0000000C 0110C0E5 STRB R1,[R0, #+1]
416 pTransfer->mailbox_number = 0;
\ 00000010 0210C0E5 STRB R1,[R0, #+2]
417 pTransfer->test_can = 0;
\ 00000014 0310C0E5 STRB R1,[R0, #+3]
418 pTransfer->mode_reg = 0;
\ 00000018 041080E5 STR R1,[R0, #+4]
419 pTransfer->acceptance_mask_reg = 0;
\ 0000001C 081080E5 STR R1,[R0, #+8]
420 pTransfer->identifier = 0;
\ 00000020 0C1080E5 STR R1,[R0, #+12]
421 pTransfer->data_low_reg = 0;
\ 00000024 101080E5 STR R1,[R0, #+16]
422 pTransfer->data_high_reg = 0;
\ 00000028 141080E5 STR R1,[R0, #+20]
423 pTransfer->control_reg = 0;
\ 0000002C 181080E5 STR R1,[R0, #+24]
424 pTransfer->mailbox_in_use = 0;
\ 00000030 1C1080E5 STR R1,[R0, #+28]
425 pTransfer->size = 0;
\ 00000034 201080E5 STR R1,[R0, #+32]
426 }
\ 00000038 1EFF2FE1 BX LR ;; return
427
428 //------------------------------------------------------------------------------
429 /// Wait for CAN synchronisation
430 /// \return return 1 for good initialisation, otherwise return 0
431 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
432 static unsigned char CAN_Synchronisation( void )
433 {
\ CAN_Synchronisation:
\ 00000000 10402DE9 PUSH {R4,LR}
434 unsigned int tick=0;
\ 00000004 0040A0E3 MOV R4,#+0
435
436 TRACE_INFO("CAN_Synchronisation\n\r");
\ 00000008 88009FE5 LDR R0,??CAN_Synchronisation_0 ;; `?<Constant "-I- CAN_Synchronisati...">`
\ 0000000C ........ BL printf
437
438 pCAN0Transfer->test_can = AT91C_TEST_NOK;
\ 00000010 ........ LDR R0,??DataTable26 ;; pCAN0Transfer
\ 00000014 000090E5 LDR R0,[R0, #+0]
\ 00000018 0010A0E3 MOV R1,#+0
\ 0000001C 0310C0E5 STRB R1,[R0, #+3]
439 #ifdef AT91C_BASE_CAN1
440 if( pCAN1Transfer != NULL ) {
441 pCAN1Transfer->test_can = AT91C_TEST_NOK;
442 }
443 #endif
444 // Enable CAN and Wait for WakeUp Interrupt
445 AT91C_BASE_CAN0->CAN_IER = AT91C_CAN_WAKEUP;
\ 00000020 ........ LDR R0,??DataTable27 ;; 0xfffd0004
\ 00000024 8019A0E3 MOV R1,#+2097152
\ 00000028 001080E5 STR R1,[R0, #+0]
446 // CAN Controller Enable
447 AT91C_BASE_CAN0->CAN_MR = AT91C_CAN_CANEN;
\ 0000002C 0400C0E3 BIC R0,R0,#0x4
\ 00000030 0110A0E3 MOV R1,#+1
\ 00000034 001080E5 STR R1,[R0, #+0]
\ 00000038 000000EA B ??CAN_Synchronisation_1
448 // Enable Autobaud/Listen mode
449 // dangerous, CAN not answer in this mode
450
451 while( (pCAN0Transfer->test_can != AT91C_TEST_OK)
452 && (tick < AT91C_CAN_TIMEOUT) ) {
453 tick++;
\ ??CAN_Synchronisation_2:
\ 0000003C 014084E2 ADD R4,R4,#+1
454 }
\ ??CAN_Synchronisation_1:
\ 00000040 ........ LDR R0,??DataTable26 ;; pCAN0Transfer
\ 00000044 000090E5 LDR R0,[R0, #+0]
\ 00000048 0300D0E5 LDRB R0,[R0, #+3]
\ 0000004C 010050E3 CMP R0,#+1
\ 00000050 0300000A BEQ ??CAN_Synchronisation_3
\ 00000054 600BA0E3 MOV R0,#+98304
\ 00000058 6A0E80E3 ORR R0,R0,#0x6A0
\ 0000005C 000054E1 CMP R4,R0
\ 00000060 F5FFFF3A BCC ??CAN_Synchronisation_2
455 if (tick == AT91C_CAN_TIMEOUT) {
\ ??CAN_Synchronisation_3:
\ 00000064 600BA0E3 MOV R0,#+98304
\ 00000068 6A0E80E3 ORR R0,R0,#0x6A0
\ 0000006C 000054E1 CMP R4,R0
\ 00000070 0300001A BNE ??CAN_Synchronisation_4
456 TRACE_ERROR("CAN0 Initialisations FAILED\n\r");
\ 00000074 20009FE5 LDR R0,??CAN_Synchronisation_0+0x4 ;; `?<Constant "-E- CAN0 Initialisati...">`
\ 00000078 ........ BL printf
457 return 0;
\ 0000007C 0000A0E3 MOV R0,#+0
\ 00000080 020000EA B ??CAN_Synchronisation_5
458 } else {
459 TRACE_INFO("CAN0 Initialisations Completed\n\r");
\ ??CAN_Synchronisation_4:
\ 00000084 14009FE5 LDR R0,??CAN_Synchronisation_0+0x8 ;; `?<Constant "-I- CAN0 Initialisati...">`
\ 00000088 ........ BL printf
460 }
461
462 #if defined AT91C_BASE_CAN1
463 if( pCAN1Transfer != NULL ) {
464 AT91C_BASE_CAN1->CAN_IER = AT91C_CAN_WAKEUP;
465 // CAN Controller Enable
466 AT91C_BASE_CAN1->CAN_MR = AT91C_CAN_CANEN;
467
468 tick = 0;
469 // Wait for WAKEUP flag raising <=> 11-recessive-bit were scanned by the transceiver
470 while( ((pCAN1Transfer->test_can != AT91C_TEST_OK))
471 && (tick < AT91C_CAN_TIMEOUT) ) {
472 tick++;
473 }
474
475 if (tick == AT91C_CAN_TIMEOUT) {
476 TRACE_ERROR("CAN1 Initialisations FAILED\n\r");
477 return 0;
478 } else {
479 TRACE_INFO("CAN1 Initialisations Completed\n\r");
480 }
481 }
482 #endif
483 return 1;
\ 0000008C 0100A0E3 MOV R0,#+1
\ ??CAN_Synchronisation_5:
\ 00000090 1040BDE8 POP {R4,LR}
\ 00000094 1EFF2FE1 BX LR ;; return
\ ??CAN_Synchronisation_0:
\ 00000098 ........ DC32 `?<Constant "-I- CAN_Synchronisati...">`
\ 0000009C ........ DC32 `?<Constant "-E- CAN0 Initialisati...">`
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -