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

📄 mcp2515.lst

📁 IAR5.2下 AT91SAM9260 ARM 对 MCP2515 控制源化码
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \                     McpReset:
   \   00000000   00502DE9           PUSH     {R12,LR}
     94              unsigned char command[4];
     95          	
     96              command[0] = RESET;
   \   00000004   C010A0E3           MOV      R1,#+192
   \   00000008   0010CDE5           STRB     R1,[SP, #+0]
     97          	
     98              SPI_CfgPCS(AT91C_BASE_SPI0,MCP2515_Cs);
   \   0000000C   0E10A0E3           MOV      R1,#+14
   \   00000010   ........           LDR      R0,??DataTable14  ;; 0xfffc8000
   \   00000014   ........           BL       SPI_CfgPCS
     99          	
    100              MCP_Spi0Write ( command,1,0,0 );
   \   00000018   0030A0E3           MOV      R3,#+0
   \   0000001C   0020A0E3           MOV      R2,#+0
   \   00000020   0110A0E3           MOV      R1,#+1
   \   00000024   0D00B0E1           MOVS     R0,SP
   \   00000028   ........           BL       MCP_Spi0Write
    101              
    102              r_flag = 1;
   \   0000002C   ........           LDR      R0,??DataTable12  ;; r_flag
   \   00000030   0110A0E3           MOV      R1,#+1
   \   00000034   0010C0E5           STRB     R1,[R0, #+0]
    103          }
   \   00000038   0180BDE8           POP      {R0,PC}          ;; return
    104          
    105          
    106          //*****************************************************************************
    107          //* 函数名称:MCP2515_Write                                    
    108          //* 函数功能: 写 1 字节数据到 MCP2515          
    109          //* 入口参数: 1.Addr : 发送寄存器地址                          
    110          //*           2.data : 待发送的数据                           
    111          //*           MCP2515 有三个发送寄存器 地址分别是: 0x30,0x40,0x50   
    112          //* 返回值  : 无                                                  
    113          //*****************************************************************************

   \                                 In section .text, align 4, keep-with-next
    114          void MCP2515_Write(unsigned char Addr, unsigned char data)
    115          {
   \                     MCP2515_Write:
   \   00000000   13402DE9           PUSH     {R0,R1,R4,LR}
   \   00000004   0040B0E1           MOVS     R4,R0
    116              unsigned char command[4];
    117          	
    118              command[0] = WRITE;
   \   00000008   0210A0E3           MOV      R1,#+2
   \   0000000C   0010CDE5           STRB     R1,[SP, #+0]
    119              command[1] = Addr;
   \   00000010   0140CDE5           STRB     R4,[SP, #+1]
    120          
    121              SPI_CfgPCS(AT91C_BASE_SPI0,MCP2515_Cs);	// 片选 MCP2515
   \   00000014   0E10A0E3           MOV      R1,#+14
   \   00000018   ........           LDR      R0,??DataTable14  ;; 0xfffc8000
   \   0000001C   ........           BL       SPI_CfgPCS
    122          	
    123              MCP_Spi0Write (command,2,&data,1);
   \   00000020   0130A0E3           MOV      R3,#+1
   \   00000024   04208DE2           ADD      R2,SP,#+4
   \   00000028   0210A0E3           MOV      R1,#+2
   \   0000002C   0D00B0E1           MOVS     R0,SP
   \   00000030   ........           BL       MCP_Spi0Write
    124          
    125              DelayF(DelayTime);
   \   00000034   0800A0E3           MOV      R0,#+8
   \   00000038   ........           BL       DelayF
    126          }
   \   0000003C   1380BDE8           POP      {R0,R1,R4,PC}    ;; return
    127          
    128          
    129          //*****************************************************************************
    130          //* 函数名称:WriteData
    131          //* 函数功能:写n字节数据到 MCP2515
    132          //* 入口参数:Addr	: 写到 MCP2515 寄存器地址
    133          //*	      *data	: 写数据的存放地址
    134          //*	      data_size	: 写数据的长度
    135          //* 返回值 :无
    136          //*****************************************************************************

   \                                 In section .text, align 4, keep-with-next
    137          void WriteData(unsigned char Addr,unsigned char* data,unsigned int data_size)
    138          {
   \                     WriteData:
   \   00000000   70402DE9           PUSH     {R4-R6,LR}
   \   00000004   08D04DE2           SUB      SP,SP,#+8
   \   00000008   0050B0E1           MOVS     R5,R0
   \   0000000C   0160B0E1           MOVS     R6,R1
   \   00000010   0240B0E1           MOVS     R4,R2
    139              unsigned char command[4];
    140          	
    141              command[0] = WRITE;
   \   00000014   0210A0E3           MOV      R1,#+2
   \   00000018   0010CDE5           STRB     R1,[SP, #+0]
    142              command[1] = Addr;
   \   0000001C   0150CDE5           STRB     R5,[SP, #+1]
    143          
    144              SPI_CfgPCS(AT91C_BASE_SPI0,MCP2515_Cs);	// 片选 MCP2515
   \   00000020   0E10A0E3           MOV      R1,#+14
   \   00000024   ........           LDR      R0,??DataTable14  ;; 0xfffc8000
   \   00000028   ........           BL       SPI_CfgPCS
    145              MCP_Spi0Write(command,2,data,data_size );
   \   0000002C   0430B0E1           MOVS     R3,R4
   \   00000030   0620B0E1           MOVS     R2,R6
   \   00000034   0210A0E3           MOV      R1,#+2
   \   00000038   0D00B0E1           MOVS     R0,SP
   \   0000003C   ........           BL       MCP_Spi0Write
    146              
    147              DelayF(DelayTime);
   \   00000040   0800A0E3           MOV      R0,#+8
   \   00000044   ........           BL       DelayF
    148          }
   \   00000048   7380BDE8           POP      {R0,R1,R4-R6,PC}  ;; return
    149          
    150          
    151          //*****************************************************************************
    152          //* 函数名称:ReadData
    153          //* 函数功能:从 MCP2515 读取n字节数据 
    154          //* 入口参数:Addr	: MCP2515 寄存器地址
    155          //*	      *data	: 读取数据后的存放地址
    156          //*	      data_size	: 读取数据的长度
    157          //* 返回值 :无
    158          //*****************************************************************************

   \                                 In section .text, align 4, keep-with-next
    159          void MCP2515_Read(unsigned char Addr,unsigned char databuff)
    160          {
   \                     MCP2515_Read:
   \   00000000   13402DE9           PUSH     {R0,R1,R4,LR}
   \   00000004   0040B0E1           MOVS     R4,R0
    161              unsigned char command[4];
    162          	
    163              command[0] = READ;
   \   00000008   0310A0E3           MOV      R1,#+3
   \   0000000C   0010CDE5           STRB     R1,[SP, #+0]
    164              command[1] = Addr;	
   \   00000010   0140CDE5           STRB     R4,[SP, #+1]
    165              
    166              while(r_flag);
   \                     ??MCP2515_Read_0:
   \   00000014   ........           LDR      R0,??DataTable12  ;; r_flag
   \   00000018   0000D0E5           LDRB     R0,[R0, #+0]
   \   0000001C   000050E3           CMP      R0,#+0
   \   00000020   FBFFFF1A           BNE      ??MCP2515_Read_0
    167              r_flag = 1;
   \   00000024   ........           LDR      R0,??DataTable12  ;; r_flag
   \   00000028   0110A0E3           MOV      R1,#+1
   \   0000002C   0010C0E5           STRB     R1,[R0, #+0]
    168              
    169              SPI_CfgPCS(AT91C_BASE_SPI0,MCP2515_Cs);	// 片选 MCP2515
   \   00000030   0E10A0E3           MOV      R1,#+14
   \   00000034   ........           LDR      R0,??DataTable14  ;; 0xfffc8000
   \   00000038   ........           BL       SPI_CfgPCS
    170          	
    171              MCP_Spi0Write ( command,2,&databuff,1);
   \   0000003C   0130A0E3           MOV      R3,#+1
   \   00000040   04208DE2           ADD      R2,SP,#+4
   \   00000044   0210A0E3           MOV      R1,#+2
   \   00000048   0D00B0E1           MOVS     R0,SP
   \   0000004C   ........           BL       MCP_Spi0Write
    172              DelayF(DelayTime);
   \   00000050   0800A0E3           MOV      R0,#+8
   \   00000054   ........           BL       DelayF
    173          }
   \   00000058   1380BDE8           POP      {R0,R1,R4,PC}    ;; return
    174          
    175          
    176          //*****************************************************************************
    177          //* 函数名称:ReadData
    178          //* 函数功能:从 MCP2515 读取n字节数据 
    179          //* 入口参数:Addr	: MCP2515 寄存器地址
    180          //*	      *data	: 读取数据后的存放地址
    181          //*	      data_size	: 读取数据的长度
    182          //* 返回值 :无
    183          //*****************************************************************************

   \                                 In section .text, align 4, keep-with-next
    184          void ReadData(unsigned char Addr,unsigned char* databuff,unsigned int data_size)
    185          {
   \                     ReadData:
   \   00000000   70402DE9           PUSH     {R4-R6,LR}
   \   00000004   08D04DE2           SUB      SP,SP,#+8
   \   00000008   0050B0E1           MOVS     R5,R0
   \   0000000C   0160B0E1           MOVS     R6,R1
   \   00000010   0240B0E1           MOVS     R4,R2
    186              unsigned char command[4];
    187          	
    188              command[0] = READ;
   \   00000014   0310A0E3           MOV      R1,#+3
   \   00000018   0010CDE5           STRB     R1,[SP, #+0]
    189              command[1] = Addr;
   \   0000001C   0150CDE5           STRB     R5,[SP, #+1]
    190              
    191              while(r_flag);
   \                     ??ReadData_0:
   \   00000020   ........           LDR      R0,??DataTable12  ;; r_flag
   \   00000024   0000D0E5           LDRB     R0,[R0, #+0]
   \   00000028   000050E3           CMP      R0,#+0
   \   0000002C   FBFFFF1A           BNE      ??ReadData_0
    192              r_flag = 1;
   \   00000030   ........           LDR      R0,??DataTable12  ;; r_flag
   \   00000034   0110A0E3           MOV      R1,#+1
   \   00000038   0010C0E5           STRB     R1,[R0, #+0]
    193              
    194              SPI_CfgPCS(AT91C_BASE_SPI0,MCP2515_Cs);	// 片选 MCP2515
   \   0000003C   0E10A0E3           MOV      R1,#+14
   \   00000040   ........           LDR      R0,??DataTable14  ;; 0xfffc8000
   \   00000044   ........           BL       SPI_CfgPCS
    195          	
    196              MCP_Spi0Write ( command,2,databuff,data_size );
   \   00000048   0430B0E1           MOVS     R3,R4
   \   0000004C   0620B0E1           MOVS     R2,R6
   \   00000050   0210A0E3           MOV      R1,#+2
   \   00000054   0D00B0E1           MOVS     R0,SP
   \   00000058   ........           BL       MCP_Spi0Write
    197              
    198              DelayF(DelayTime);
   \   0000005C   0800A0E3           MOV      R0,#+8
   \   00000060   ........           BL       DelayF
    199          }
   \   00000064   7380BDE8           POP      {R0,R1,R4-R6,PC}  ;; return
    200          
    201          
    202          //*****************************************************************************
    203          //* 函数名称:WriteBits
    204          //* 函数功能:MCP2515 位修改
    205          //* 入口参数:Addr	: MCP2515 寄存器地址
    206          //*	      data	: 修改的数据
    207          //*	      mask	: 屏蔽位
    208          //* 返回值 :无
    209          //*****************************************************************************

   \                                 In section .text, align 4, keep-with-next
    210          void WriteBits( unsigned char Addr, unsigned char data, unsigned char mask)

⌨️ 快捷键说明

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