📄 mcp2515.lst
字号:
###############################################################################
# #
# 09/Mar/2009 08:20:42 #
# IAR ANSI C/C++ Compiler V5.20.2.21007/W32 EVALUATION for ARM #
# Copyright 1999-2008 IAR Systems AB. #
# #
# Cpu mode = arm #
# Endian = little #
# Source file = E:\IAR\at91sam9260-ek\basic-twi-eeprom-project\MCP2515.c #
# Command line = E:\IAR\at91sam9260-ek\basic-twi-eeprom-project\MCP2515.c #
# -D at91sam9260 -D sdram -lC #
# E:\IAR\at91sam9260-ek\basic-twi-eeprom-project\ewp\at91s #
# am9260_sdram\List\ --remarks --diag_suppress #
# Pe826,Pe1375 -o E:\IAR\at91sam9260-ek\basic-twi-eeprom-p #
# roject\ewp\at91sam9260_sdram\Obj\ --no_cse --no_unroll #
# --no_inline --no_code_motion --no_tbaa --no_clustering #
# --no_scheduling --debug --endian=little #
# --cpu=ARM926EJ-S -e --fpu=None --dlib_config #
# "C:\Program Files\IAR Systems\Embedded Workbench 5.0 #
# Evaluation\ARM\INC\DLib_Config_Full.h" -I #
# E:\IAR\at91sam9260-ek\basic-twi-eeprom-project\ewp\..\.. #
# \..\at91lib\ -I E:\IAR\at91sam9260-ek\basic-twi-eeprom-p #
# roject\ewp\..\..\..\at91lib\boards\at91sam9260-ek\ -I #
# E:\IAR\at91sam9260-ek\basic-twi-eeprom-project\ewp\..\.. #
# \..\at91lib\peripherals\ -I #
# E:\IAR\at91sam9260-ek\basic-twi-eeprom-project\ewp\..\.. #
# \..\at91lib\components\ -I E:\IAR\at91sam9260-ek\basic-t #
# wi-eeprom-project\ewp\..\..\..\at91lib\usb\ -I #
# "C:\Program Files\IAR Systems\Embedded Workbench 5.0 #
# Evaluation\ARM\INC\" --interwork --cpu_mode arm -On #
# List file = E:\IAR\at91sam9260-ek\basic-twi-eeprom-project\ewp\at91s #
# am9260_sdram\List\MCP2515.lst #
# Object file = E:\IAR\at91sam9260-ek\basic-twi-eeprom-project\ewp\at91s #
# am9260_sdram\Obj\MCP2515.o #
# #
# #
###############################################################################
E:\IAR\at91sam9260-ek\basic-twi-eeprom-project\MCP2515.c
1
2 #include "MCP2515.h"
3 #include <spi/spi.h>
4 #include <dbgu/dbgu.h>
5 #include <stdio.h>
6
\ In section .text, align 4, keep-with-next
7 void DelayX(unsigned x)
8 {
9 unsigned i;
10 while(--x)
\ DelayX:
\ ??DelayX_0:
\ 00000000 010050E2 SUBS R0,R0,#+1
\ 00000004 000050E3 CMP R0,#+0
\ 00000008 0500000A BEQ ??DelayX_1
11 {
12 for(i=0;i<1000;i++);
\ 0000000C 0020A0E3 MOV R2,#+0
\ 00000010 0210B0E1 MOVS R1,R2
\ ??DelayX_2:
\ 00000014 FA0F51E3 CMP R1,#+1000
\ 00000018 F8FFFF2A BCS ??DelayX_0
\ 0000001C 011091E2 ADDS R1,R1,#+1
\ 00000020 FBFFFFEA B ??DelayX_2
13 }
14 }
\ ??DelayX_1:
\ 00000024 1EFF2FE1 BX LR ;; return
15
16
\ In section .text, align 4, keep-with-next
17 void DelayF(unsigned x)
18 {
19 unsigned i;
20 while(--x)
\ DelayF:
\ ??DelayF_0:
\ 00000000 010050E2 SUBS R0,R0,#+1
\ 00000004 000050E3 CMP R0,#+0
\ 00000008 0500000A BEQ ??DelayF_1
21 {
22 for(i=0;i<100;i++);
\ 0000000C 0020A0E3 MOV R2,#+0
\ 00000010 0210B0E1 MOVS R1,R2
\ ??DelayF_2:
\ 00000014 640051E3 CMP R1,#+100
\ 00000018 F8FFFF2A BCS ??DelayF_0
\ 0000001C 011091E2 ADDS R1,R1,#+1
\ 00000020 FBFFFFEA B ??DelayF_2
23 }
24 }
\ ??DelayF_1:
\ 00000024 1EFF2FE1 BX LR ;; return
25
26
27 //*****************************************************************************
28 //* \fn MCP_Spi0Write
29 //* \brief write command to PDC
30 //*****************************************************************************
\ In section .text, align 4, keep-with-next
31 void MCP_Spi0Write (unsigned char* cmd_pt,unsigned int cmd_size, unsigned char* data_pt,unsigned int data_size)
32 {
\ MCP_Spi0Write:
\ 00000000 F8402DE9 PUSH {R3-R7,LR}
\ 00000004 0070B0E1 MOVS R7,R0
\ 00000008 0140B0E1 MOVS R4,R1
\ 0000000C 0250B0E1 MOVS R5,R2
\ 00000010 0360B0E1 MOVS R6,R3
33 //unsigned int i;
34 //unsigned char *data;
35
36 //for(i=0;i<data_size;i++)
37 // data[i] = data_pt[i];
38
39 // 禁止PDC接收和发送中断
40 AT91C_BASE_SPI0->SPI_PTCR = AT91C_PDC_TXTDIS + AT91C_PDC_RXTDIS;
\ 00000014 78009FE5 LDR R0,??MCP_Spi0Write_0 ;; 0xfffc8120
\ 00000018 0210A0E3 MOV R1,#+2
\ 0000001C 801F81E3 ORR R1,R1,#0x200
\ 00000020 001080E5 STR R1,[R0, #+0]
41
42 //* 初始化发送和接收指针
43 AT91C_BASE_SPI0->SPI_RPR = (unsigned int)cmd_pt ;
\ 00000024 6C009FE5 LDR R0,??MCP_Spi0Write_0+0x4 ;; 0xfffc8100
\ 00000028 007080E5 STR R7,[R0, #+0]
44 AT91C_BASE_SPI0->SPI_TPR = (unsigned int)cmd_pt ;
\ 0000002C 68009FE5 LDR R0,??MCP_Spi0Write_0+0x8 ;; 0xfffc8108
\ 00000030 007080E5 STR R7,[R0, #+0]
45
46 //* 初始化发送和接收计数
47 AT91C_BASE_SPI0->SPI_RCR = cmd_size ;
\ 00000034 64009FE5 LDR R0,??MCP_Spi0Write_0+0xC ;; 0xfffc8104
\ 00000038 004080E5 STR R4,[R0, #+0]
48 AT91C_BASE_SPI0->SPI_TCR = cmd_size ;
\ 0000003C 60009FE5 LDR R0,??MCP_Spi0Write_0+0x10 ;; 0xfffc810c
\ 00000040 004080E5 STR R4,[R0, #+0]
49
50 if ( data_size != 0 )
\ 00000044 000056E3 CMP R6,#+0
\ 00000048 0700000A BEQ ??MCP_Spi0Write_1
51 {
52 //* 初始化下一个发送和接收指针
53 AT91C_BASE_SPI0->SPI_RNPR = (unsigned int)data_pt ;
\ 0000004C 54009FE5 LDR R0,??MCP_Spi0Write_0+0x14 ;; 0xfffc8110
\ 00000050 005080E5 STR R5,[R0, #+0]
54 AT91C_BASE_SPI0->SPI_TNPR = (unsigned int)data_pt ;
\ 00000054 50009FE5 LDR R0,??MCP_Spi0Write_0+0x18 ;; 0xfffc8118
\ 00000058 005080E5 STR R5,[R0, #+0]
55 //* 初始化下一个发送和接收计数
56 AT91C_BASE_SPI0->SPI_RNCR = data_size ;
\ 0000005C 4C009FE5 LDR R0,??MCP_Spi0Write_0+0x1C ;; 0xfffc8114
\ 00000060 006080E5 STR R6,[R0, #+0]
57 AT91C_BASE_SPI0->SPI_TNCR = data_size ;
\ 00000064 48009FE5 LDR R0,??MCP_Spi0Write_0+0x20 ;; 0xfffc811c
\ 00000068 006080E5 STR R6,[R0, #+0]
58 }
59
60 //* 允许接收满中断---- RXBUF
61 AT91C_BASE_SPI0->SPI_IER = AT91C_SPI_RXBUFF;
\ ??MCP_Spi0Write_1:
\ 0000006C 44009FE5 LDR R0,??MCP_Spi0Write_0+0x24 ;; 0xfffc8014
\ 00000070 4010A0E3 MOV R1,#+64
\ 00000074 001080E5 STR R1,[R0, #+0]
62
63 //* PDC传输控制----- 允许PDC传输和接收
64 AT91C_BASE_SPI0->SPI_PTCR = AT91C_PDC_TXTEN + AT91C_PDC_RXTEN;
\ 00000078 14009FE5 LDR R0,??MCP_Spi0Write_0 ;; 0xfffc8120
\ 0000007C 0110A0E3 MOV R1,#+1
\ 00000080 401F81E3 ORR R1,R1,#0x100
\ 00000084 001080E5 STR R1,[R0, #+0]
65
66 DelayF(10);
\ 00000088 0A00A0E3 MOV R0,#+10
\ 0000008C ........ BL DelayF
67 }
\ 00000090 F180BDE8 POP {R0,R4-R7,PC} ;; return
\ ??MCP_Spi0Write_0:
\ 00000094 2081FCFF DC32 0xfffc8120
\ 00000098 0081FCFF DC32 0xfffc8100
\ 0000009C 0881FCFF DC32 0xfffc8108
\ 000000A0 0481FCFF DC32 0xfffc8104
\ 000000A4 0C81FCFF DC32 0xfffc810c
\ 000000A8 1081FCFF DC32 0xfffc8110
\ 000000AC 1881FCFF DC32 0xfffc8118
\ 000000B0 1481FCFF DC32 0xfffc8114
\ 000000B4 1C81FCFF DC32 0xfffc811c
\ 000000B8 1480FCFF DC32 0xfffc8014
68
69
70 //*****************************************************************************
71 //* 函数名称:WriteRTS
72 //* 函数功能:请求发送报文
73 //* 入口参数:TxBuf: 发送缓冲器号(TX0RTS, TX1RTS, TX20RTS)
74 //* 返回值 :无
75 //*****************************************************************************
\ In section .text, align 4, keep-with-next
76 void WriteRTS(unsigned char TxBuf)
77 {
\ WriteRTS:
\ 00000000 10402DE9 PUSH {R4,LR}
\ 00000004 08D04DE2 SUB SP,SP,#+8
\ 00000008 0040B0E1 MOVS R4,R0
78 unsigned char command[4];
79
80 command[0] = TxBuf;
\ 0000000C 0040CDE5 STRB R4,[SP, #+0]
81 MCP_Spi0Write ( command,1,0,0 );
\ 00000010 0030A0E3 MOV R3,#+0
\ 00000014 0020A0E3 MOV R2,#+0
\ 00000018 0110A0E3 MOV R1,#+1
\ 0000001C 0D00B0E1 MOVS R0,SP
\ 00000020 ........ BL MCP_Spi0Write
82 DelayF(DelayTime);
\ 00000024 0800A0E3 MOV R0,#+8
\ 00000028 ........ BL DelayF
83 }
\ 0000002C 1380BDE8 POP {R0,R1,R4,PC} ;; return
84
85
86 //*****************************************************************************
87 //* 函数名称:McpReset
88 //* 函数功能:复位 MCP2515
89 //* 入口参数:无
90 //* 返回值 :无
91 //*****************************************************************************
\ In section .text, align 4, keep-with-next
92 void McpReset(void)
93 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -