📄 sja.lst
字号:
C51 COMPILER V3.20, SN-0 SJA 07/11/02 14:13:21 PAGE 1
DOS C51 COMPILER V3.20, COMPILATION OF MODULE SJA
OBJECT MODULE PLACED IN SJA.OBJ
COMPILER INVOKED BY: D:\QTH8052F\BIN\C51.EXE SJA.C OBJECTEXTEND DB SB
stmt level source
1 /*
* sja.c
*
* CAN总线通讯
*
*
* 原作者:刘篷,孙占辉
*
* 修改:陈真勇(SA01010010)
* w3wind@sina.com or
* zychen@ustc.edu.cn
* 中国科学技术大学自动化系
* 2002/6/12
*/
15
16 #include "type.h"
17 #include "link.h"
18 #include "delay.h"
19 #include "watchdog.h"
20
21 BYTE canmode[17]; /* 存放控制字 */
22 BYTE TXdata[11]; /* 发送缓冲区 */
23 BYTE RXdata[11]; /* 接收缓冲区 */
24
25
26 void ctransmit() reentrant;
27
28
29 /* direct access to 8051 memory areas */
30 BYTE read_sja(BYTE addr) reentrant using 0
31 {
32 1 return ((BYTE volatile*)0x30000L)[addr];
33 1 }
34
35 void write_sja(BYTE addr,BYTE val) reentrant using 0
36 {
37 1 ((BYTE volatile*)0x30000L)[addr]=val;
38 1 }
39
40
41 /*
* function below used for SJA settings,system startup display
*/
44 void set_canmode(BYTE md_addr,BYTE baud)
45 {
46 1 canmode[0]=0x00;/*normal mode,single filter*/
47 1 canmode[1]=0x09;/*enable receive and overflow interrupt*/
48 1 canmode[2]=baud;/*bustime0*/
49 1 canmode[3]=0xA3;/*bustime1*/
50 1 canmode[4]=0x1A;/*output control*/
51 1 canmode[5]=0xC7;/*clock divide pelican mode,bypass comparator*/
52 1 canmode[6]=md_addr;
53 1 canmode[7]=0xff;
54 1 canmode[8]=0x03;
55 1 canmode[9]=0xff;
C51 COMPILER V3.20, SN-0 SJA 07/11/02 14:13:21 PAGE 2
56 1 canmode[10]=0xc0;
57 1 canmode[11]=0xff;
58 1 canmode[12]=0xc0;
59 1 canmode[13]=0xff;
60 1 }
61
62 void send_reset_frame(BYTE md_addr) using 0
63 {
64 1 BYTE temp_reg,relay_time;
65 1
66 1 write_sja(1,0x08);
67 1 temp_reg=read_sja(4);
68 1 write_sja(4,0x00);
69 1 TXdata[0]=0x08;
70 1 TXdata[1]=0x40;
71 1 TXdata[2]=0x00;
72 1 TXdata[3]=0x5f;
73 1 TXdata[4]=0x05;
74 1 TXdata[5]=md_addr;
75 1 TXdata[6]=0x00;
76 1 TXdata[7]=0x00;
77 1 TXdata[8]=0x00;
78 1 TXdata[9]=0x00;
79 1 TXdata[10]=0x00;
80 1 relay_time=md_addr;
81 1 while(relay_time--){/* delay some time relate to module address in order to avoid crash */
82 2 delay(5);
83 2 clear_watchdog();
84 2 }
85 1 ctransmit();
86 1 write_sja(4,temp_reg);
87 1 }
88 /* init SJA1000 */
89 void init_sja(BYTE md_addr,BYTE baud)
90 {
91 1 set_canmode(md_addr,baud);
92 1
93 1 read_sja(3);
94 1 do{
95 2 write_sja(0,0x01);
96 2 }while(!(read_sja(0)&0x01));
97 1
98 1 write_sja(6,canmode[2]); /*bustime0 default 0xc3*/
99 1 write_sja(7,canmode[3]); /*bustime1 default 0xa3*/
100 1 write_sja(8,canmode[4]); /*output control*/
101 1 write_sja(31,canmode[5]); /*PeliCAN mode,bypass the input comparator*/
102 1
103 1 write_sja(14,0x00);
104 1 write_sja(15,0x00);
105 1
106 1 write_sja(16,canmode[6]); /*acceptcode default ffffffff*/
107 1 write_sja(17,canmode[7]);
108 1 write_sja(18,canmode[8]);
109 1 write_sja(19,canmode[9]);
110 1
111 1 write_sja(20,canmode[10]); /*acceptmask default ffffffff*/
112 1 write_sja(21,canmode[11]);
113 1 write_sja(22,canmode[12]);
114 1 write_sja(23,canmode[13]);
115 1
116 1 write_sja(4,canmode[1]);
117 1 write_sja(1,0x04);
C51 COMPILER V3.20, SN-0 SJA 07/11/02 14:13:21 PAGE 3
118 1 /*can_mode[17],0 mode,1 inter,2 bustime0,3 bustime1,4 outputcontrol,5 clockdivide,6-9 acode,10-13 amask,1
-4 errorlimit,15 RXecount,16 TXecount*/
119 1 do{
120 2 write_sja(0x00,canmode[0]); /*SJA1000 workingmode normal*/
121 2 }while(!read_sja(0)&0x08 );
122 1
123 1 send_reset_frame(md_addr);/*发出初始帧*/
124 1 }
125
126 void ctransmit() reentrant using 0
127 {
128 1 int j;
129 1 BYTE can_addr;
130 1 EA=0;
131 1
132 1 can_addr=16;
133 1
134 1 do{
135 2 }while(! (read_sja(2)&0x04) ); /* wait until reg2^2==1 */
136 1
137 1 CANLAMP=0;/* light LED */
138 1 for(j=0;j<11;j++) {/* write 11 bytes data to transmit buffer */
139 2 write_sja(can_addr++,TXdata[j]);
140 2 }
141 1 CANLAMP=1;/* disable LED */
142 1 write_sja(0x01,0x01);/* send out */
143 1
144 1 EA=1;
145 1 }
146
147 /* 读取帧
* return value: 0 successful,1 failure
*/
150 BYTE receive() reentrant using 0
151 {
152 1 int i=0;
153 1 BYTE addr=16;
154 1
155 1 if(read_sja(2)&0x01)
156 1 {
157 2 CANLAMP=0;
158 2 do{
159 3 for(i=0;i<11;i++){
160 4 RXdata[i]=read_sja(addr++);/*接收数据,读接收寄存器*/
161 4 }
162 3 write_sja(0x01,0x04); /*清空寄存器*/
163 3 }while(read_sja(2)&0x01);
164 2 read_sja(3);
165 2 CANLAMP=1;
166 2 return 0;
167 2 }
168 1 else
169 1 {
170 2 write_sja(0x01,0x0c);
171 2 read_sja(3);
172 2 return 1;
173 2 }
174 1 }
175
C51 COMPILER V3.20, SN-0 SJA 07/11/02 14:13:21 PAGE 4
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
CANLAMP. . . . . . . . . . . . . . . . ABSBIT ----- BIT 0096H 1
P1 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0090H 1
_send_reset_frame. . . . . . . . . . . PUBLIC CODE PROC ----- -----
md_addr. . . . . . . . . . . . . . . * REG * DATA U_CHAR 0006H 1
temp_reg . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
relay_time . . . . . . . . . . . . . AUTO DATA U_CHAR 0001H 1
P2 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A0H 1
P3 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B0H 1
T0 . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B4H 1
AC . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D6H 1
T1 . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B5H 1
T2 . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0090H 1
EA . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00AFH 1
_?receive. . . . . . . . . . . . . . . PUBLIC CODE PROC ----- -----
i. . . . . . . . . . . . . . . . . . AUTO U_INT INT 0000H 2
addr . . . . . . . . . . . . . . . . AUTO U_INT U_CHAR 0002H 1
DQ . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0097H 1
T2IE . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00CDH 1
RD . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B7H 1
ES . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00ACH 1
RI . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0098H 1
INT0 . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B2H 1
CY . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D7H 1
BGEN . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00CBH 1
TI . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0099H 1
INT1 . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B3H 1
T2IP . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00CEH 1
PS . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00BCH 1
T2EX . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0091H 1
OV . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D2H 1
C_T2 . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00C9H 1
WR . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B6H 1
_?delay. . . . . . . . . . . . . . . . EXTERN CODE PROC ----- -----
WDCS . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0090H 1
ADSCLK . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B1H 1
_init_sja. . . . . . . . . . . . . . . PUBLIC CODE PROC ----- -----
md_addr. . . . . . . . . . . . . . . * REG * DATA U_CHAR 0006H 1
baud . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1
WDSI . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0091H 1
ADDRDY . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B3H 1
X25045SCK. . . . . . . . . . . . . . . ABSBIT ----- BIT 0092H 1
IE0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0089H 1
IE1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 008BH 1
clear_watchdog . . . . . . . . . . . . EXTERN CODE PROC ----- -----
CP_RL2 . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00C8H 1
RXdata . . . . . . . . . . . . . . . . PUBLIC DATA ARRAY 0000H 11
TXdata . . . . . . . . . . . . . . . . PUBLIC DATA ARRAY 000BH 11
ET0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A9H 1
ET1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00ABH 1
TF0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 008DH 1
ET2. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00ADH 1
TF1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 008FH 1
TF2. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00CFH 1
RB8. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 009AH 1
EX0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A8H 1
IT0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0088H 1
TB8. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 009BH 1
C51 COMPILER V3.20, SN-0 SJA 07/11/02 14:13:21 PAGE 5
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
EX1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00AAH 1
IT1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 008AH 1
P. . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D0H 1
SM0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 009FH 1
SM1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 009EH 1
SM2. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 009DH 1
PT0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B9H 1
PT1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00BBH 1
RS0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D3H 1
PT2. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00BDH 1
TR0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 008CH 1
RS1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D4H 1
TR1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 008EH 1
TR2. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00CAH 1
PX0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B8H 1
PX1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00BAH 1
canmode. . . . . . . . . . . . . . . . PUBLIC DATA ARRAY 0016H 17
_?read_sja . . . . . . . . . . . . . . PUBLIC CODE PROC ----- -----
addr . . . . . . . . . . . . . . . . AUTO U_INT U_CHAR 0000H 1
REN. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 009CH 1
_set_canmode . . . . . . . . . . . . . PUBLIC CODE PROC ----- -----
md_addr. . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
baud . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1
CANCS. . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A7H 1
_?write_sja. . . . . . . . . . . . . . PUBLIC CODE PROC ----- -----
addr . . . . . . . . . . . . . . . . AUTO U_INT U_CHAR 0000H 1
val. . . . . . . . . . . . . . . . . AUTO U_INT U_CHAR 0001H 1
HC245G . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00A6H 1
RXD. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B0H 1
X25045CS . . . . . . . . . . . . . . . ABSBIT ----- BIT 0090H 1
TXD. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B1H 1
ADRFS. . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0095H 1
T2RSE. . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00CCH 1
ADTFS. . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B4H 1
ADSDATA. . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B0H 1
F0 . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00D5H 1
X25045SI . . . . . . . . . . . . . . . ABSBIT ----- BIT 0091H 1
ADA0 . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0094H 1
_?ctransmit. . . . . . . . . . . . . . PUBLIC CODE PROC ----- -----
j. . . . . . . . . . . . . . . . . . AUTO U_INT INT 0000H 2
can_addr . . . . . . . . . . . . . . AUTO U_INT U_CHAR 0002H 1
X25045SO . . . . . . . . . . . . . . . ABSBIT ----- BIT 0093H 1
WDSCK. . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0092H 1
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 588 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 39 2
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -