⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 can.lst

📁 Tried to make CAN logger on AT91sam7X-ek, but have no idea how to implement FATFs... -( I m just a
💻 LST
📖 第 1 页 / 共 5 页
字号:
    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 + -