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

📄 mcp2515.lst

📁 IAR5.2下 AT91SAM9260 ARM 对 MCP2515 控制源化码
💻 LST
📖 第 1 页 / 共 5 页
字号:
    406              }
    407              WriteData(mcp_addr,tbufdata,4);
   \                     ??mcp_write_can_id_1:
   \   00000098   0420A0E3           MOV      R2,#+4
   \   0000009C   0D10B0E1           MOVS     R1,SP
   \   000000A0   0400B0E1           MOVS     R0,R4
   \   000000A4   FF0010E2           ANDS     R0,R0,#0xFF      ;; Zero extend
   \   000000A8   ........           BL       WriteData
    408          }
   \   000000AC   F180BDE8           POP      {R0,R4-R7,PC}    ;; return
    409          
    410          
    411          //*****************************************************************************
    412          //* 函数名称:write_CAN_ID
    413          //* 函数功能:写 CAN ID
    414          //*****************************************************************************

   \                                 In section .text, align 4, keep-with-next
    415          void write_CAN_ID(unsigned char TxBuffer, unsigned int can_id)
    416          {
   \                     write_CAN_ID:
   \   00000000   F8402DE9           PUSH     {R3-R7,LR}
   \   00000004   0060B0E1           MOVS     R6,R0
   \   00000008   0140B0E1           MOVS     R4,R1
    417          	unsigned char mcp_addr, ext = 1;
   \   0000000C   0100A0E3           MOV      R0,#+1
   \   00000010   0050B0E1           MOVS     R5,R0
    418          	
    419          	if(TxBuffer == 1)
   \   00000014   FF6016E2           ANDS     R6,R6,#0xFF      ;; Zero extend
   \   00000018   010056E3           CMP      R6,#+1
   \   0000001C   0200001A           BNE      ??write_CAN_ID_0
    420                      mcp_addr = 0x31;
   \   00000020   3100A0E3           MOV      R0,#+49
   \   00000024   0070B0E1           MOVS     R7,R0
   \   00000028   0A0000EA           B        ??write_CAN_ID_1
    421          	else if(TxBuffer == 2)
   \                     ??write_CAN_ID_0:
   \   0000002C   FF6016E2           ANDS     R6,R6,#0xFF      ;; Zero extend
   \   00000030   020056E3           CMP      R6,#+2
   \   00000034   0200001A           BNE      ??write_CAN_ID_2
    422                      mcp_addr = 0x41;
   \   00000038   4100A0E3           MOV      R0,#+65
   \   0000003C   0070B0E1           MOVS     R7,R0
   \   00000040   040000EA           B        ??write_CAN_ID_1
    423          	else if(TxBuffer == 3)
   \                     ??write_CAN_ID_2:
   \   00000044   FF6016E2           ANDS     R6,R6,#0xFF      ;; Zero extend
   \   00000048   030056E3           CMP      R6,#+3
   \   0000004C   0700001A           BNE      ??write_CAN_ID_3
    424          	    mcp_addr = 0x51;
   \   00000050   5100A0E3           MOV      R0,#+81
   \   00000054   0070B0E1           MOVS     R7,R0
    425          	else
    426          	{
    427                      //AT91F_DBGU_Printk("TxBuffer error.\r\n");
    428                      return;
    429          	}
    430          	mcp_write_can_id(mcp_addr, ext, can_id);
   \                     ??write_CAN_ID_1:
   \   00000058   0420B0E1           MOVS     R2,R4
   \   0000005C   0510B0E1           MOVS     R1,R5
   \   00000060   FF1011E2           ANDS     R1,R1,#0xFF      ;; Zero extend
   \   00000064   0700B0E1           MOVS     R0,R7
   \   00000068   FF0010E2           ANDS     R0,R0,#0xFF      ;; Zero extend
   \   0000006C   ........           BL       mcp_write_can_id
    431          }
   \                     ??write_CAN_ID_3:
   \   00000070   F180BDE8           POP      {R0,R4-R7,PC}    ;; return
    432          
    433          
    434          //*****************************************************************************
    435          //* 函数名称:mcp_read_can_id
    436          //* 函数功能:读 CAN ID
    437          //* 入口参数:mcp_addr	: MCP2515 寄存器地址 
    438          //*	      ext	: 帧类型(0:标准帧	1:扩展帧)
    439          //*	      *can_id	: CAN_ID 地址
    440          //* 返回值 :无
    441          //*****************************************************************************

   \                                 In section .text, align 4, keep-with-next
    442          void mcp_read_can_id( unsigned char mcp_addr, unsigned char *ext, unsigned int* can_id)
    443          {
   \                     mcp_read_can_id:
   \   00000000   70402DE9           PUSH     {R4-R6,LR}
   \   00000004   08D04DE2           SUB      SP,SP,#+8
   \   00000008   0040B0E1           MOVS     R4,R0
   \   0000000C   0150B0E1           MOVS     R5,R1
   \   00000010   0260B0E1           MOVS     R6,R2
    444              unsigned char tbufdata[4];
    445              *ext = 0;
   \   00000014   0000A0E3           MOV      R0,#+0
   \   00000018   0000C5E5           STRB     R0,[R5, #+0]
    446              *can_id = 0;
   \   0000001C   0000A0E3           MOV      R0,#+0
   \   00000020   000086E5           STR      R0,[R6, #+0]
    447          	ReadData(mcp_addr,tbufdata,4);
   \   00000024   0420A0E3           MOV      R2,#+4
   \   00000028   0D10B0E1           MOVS     R1,SP
   \   0000002C   0400B0E1           MOVS     R0,R4
   \   00000030   FF0010E2           ANDS     R0,R0,#0xFF      ;; Zero extend
   \   00000034   ........           BL       ReadData
    448              *can_id = (tbufdata[SIDH]<<3) + (tbufdata[SIDL]>>5);
   \   00000038   0000DDE5           LDRB     R0,[SP, #+0]
   \   0000003C   0110DDE5           LDRB     R1,[SP, #+1]
   \   00000040   FF1011E2           ANDS     R1,R1,#0xFF      ;; Zero extend
   \   00000044   A112B0E1           LSRS     R1,R1,#+5
   \   00000048   FF1011E2           ANDS     R1,R1,#0xFF      ;; Zero extend
   \   0000004C   800191E0           ADDS     R0,R1,R0, LSL #+3
   \   00000050   000086E5           STR      R0,[R6, #+0]
    449              
    450              if ( (tbufdata[SIDL] & TXB_EXIDE_M) ==  TXB_EXIDE_M )
   \   00000054   0100DDE5           LDRB     R0,[SP, #+1]
   \   00000058   080010E3           TST      R0,#0x8
   \   0000005C   0F00000A           BEQ      ??mcp_read_can_id_0
    451              {
    452                  *can_id = (*can_id<<2) + (tbufdata[SIDL] & 0x03);
   \   00000060   000096E5           LDR      R0,[R6, #+0]
   \   00000064   0110DDE5           LDRB     R1,[SP, #+1]
   \   00000068   031011E2           ANDS     R1,R1,#0x3
   \   0000006C   000191E0           ADDS     R0,R1,R0, LSL #+2
   \   00000070   000086E5           STR      R0,[R6, #+0]
    453                  *can_id <<= 16;
   \   00000074   000096E5           LDR      R0,[R6, #+0]
   \   00000078   0008B0E1           LSLS     R0,R0,#+16
   \   0000007C   000086E5           STR      R0,[R6, #+0]
    454                  *can_id = *can_id +(tbufdata[EID8]<<8) + tbufdata[EID0];
   \   00000080   000096E5           LDR      R0,[R6, #+0]
   \   00000084   0210DDE5           LDRB     R1,[SP, #+2]
   \   00000088   0320DDE5           LDRB     R2,[SP, #+3]
   \   0000008C   011492E0           ADDS     R1,R2,R1, LSL #+8
   \   00000090   000091E0           ADDS     R0,R1,R0
   \   00000094   000086E5           STR      R0,[R6, #+0]
    455                  *ext = 1;
   \   00000098   0100A0E3           MOV      R0,#+1
   \   0000009C   0000C5E5           STRB     R0,[R5, #+0]
    456              }
    457          }
   \                     ??mcp_read_can_id_0:
   \   000000A0   7380BDE8           POP      {R0,R1,R4-R6,PC}  ;; return
    458          
    459          
    460          //*****************************************************************************
    461          //* 函数名称:read_CAN_ID
    462          //* 函数功能:读 CAN ID
    463          //*****************************************************************************

   \                                 In section .text, align 4, keep-with-next
    464          unsigned int read_CAN_ID(unsigned char RxBuffer)
    465          {
   \                     read_CAN_ID:
   \   00000000   30402DE9           PUSH     {R4,R5,LR}
   \   00000004   0CD04DE2           SUB      SP,SP,#+12
   \   00000008   0040B0E1           MOVS     R4,R0
    466              unsigned char mcp_addr, ext;
    467              unsigned int can_id = 0;
   \   0000000C   0010A0E3           MOV      R1,#+0
   \   00000010   00108DE5           STR      R1,[SP, #+0]
    468          	
    469              if(RxBuffer == 4)
   \   00000014   FF4014E2           ANDS     R4,R4,#0xFF      ;; Zero extend
   \   00000018   040054E3           CMP      R4,#+4
   \   0000001C   0200001A           BNE      ??read_CAN_ID_0
    470                  mcp_addr = 0x61;
   \   00000020   6100A0E3           MOV      R0,#+97
   \   00000024   0050B0E1           MOVS     R5,R0
   \   00000028   070000EA           B        ??read_CAN_ID_1
    471              else if(RxBuffer == 5)
   \                     ??read_CAN_ID_0:
   \   0000002C   FF4014E2           ANDS     R4,R4,#0xFF      ;; Zero extend
   \   00000030   050054E3           CMP      R4,#+5
   \   00000034   0200001A           BNE      ??read_CAN_ID_2
    472                  mcp_addr = 0x71;
   \   00000038   7100A0E3           MOV      R0,#+113
   \   0000003C   0050B0E1           MOVS     R5,R0
   \   00000040   010000EA           B        ??read_CAN_ID_1
    473              else
    474              {
    475                  //AT91F_DBGU_Printk("RxBuffer error.\r\n");
    476                  return 0;
   \                     ??read_CAN_ID_2:
   \   00000044   0000A0E3           MOV      R0,#+0
   \   00000048   050000EA           B        ??read_CAN_ID_3
    477              }
    478          	
    479              mcp_read_can_id(mcp_addr, &ext, &can_id);
   \                     ??read_CAN_ID_1:
   \   0000004C   0D20B0E1           MOVS     R2,SP
   \   00000050   04108DE2           ADD      R1,SP,#+4
   \   00000054   0500B0E1           MOVS     R0,R5
   \   00000058   FF0010E2           ANDS     R0,R0,#0xFF      ;; Zero extend
   \   0000005C   ........           BL       mcp_read_can_id
    480          	
    481              return can_id;
   \   00000060   00009DE5           LDR      R0,[SP, #+0]
   \                     ??read_CAN_ID_3:
   \   00000064   3E80BDE8           POP      {R1-R5,PC}       ;; return
    482          }
    483          
    484          
    485          //*****************************************************************************
    486          //* 函数名称:MCP2515_Init
    487          //* 函数功能:MCP2515 初始化
    488          //* 入口参数:bandrate  : 波特率
    489          //*           mode      : 1: 标准模式     0: 回环模式
    490          //* 返回值 :无
    491          //*****************************************************************************

   \                                 In section .text, align 4, keep-with-next
    492          unsigned char MCP2515_Init(CanBandRate bandrate, unsigned char mode)
    493          {
   \                     MCP2515_Init:
   \   00000000   F0412DE9           PUSH     {R4-R8,LR}
   \   00000004   08D04DE2           SUB      SP,SP,#+8
   \   00000008   0040B0E1           MOVS     R4,R0
   \   0000000C   0150B0E1           MOVS     R5,R1
    494              unsigned char data;
    495              unsigned char i, j, a;
    496          
    497              //0、初始化 SPI0
    498              // DBGU_Printk("Configure SPI0 NCS0...\r\n");
    499              init_SPI0();
   \   00000010   ........           BL       init_SPI0
    500          	
    501              //1、复位MCP2515
    502              // DBGU_Printk("MCP2515 Reset ...\r\n");
    503              McpReset();
   \   00000014   ........           BL       McpReset
    504              DBGU_Printk("MCP2515 Reset OK(^_^).\r\n");
   \   00000018   28029FE5           LDR      R0,??MCP2515_Init_0  ;; `?<Constant "MCP2515 Reset OK(^_^).\\r\\n">`
   \   0000001C   ........           BL       DBGU_Prin

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -