File: F:\sja1000\各芯片资料\bcan_test\SJA_BCANCONF.h 2011/12/27, 22:08:42
1 /************************************************************************
2 * 广州周立功单片机发展有限公司 http://www.zlgmcu.com *
3 ***********************************************************************/
4 /************************************************************************
5 * *
6 * CAN 控制器SJA1000基本的硬件定义(BasicCAN 工作方式) *
7 * *
8 ***********************************************************************/
9 /************************************************************************
10 * *
11 * 目的: SJA1000基本寄存器\功能位定义,便于用户使用SJA1000时 *
12 * 只需作与其硬件系统相适合的简单的修改,便能实现SJA1000的 *
13 * BasicCAN工作方式的功能 *
14 * *
15 * 文件名: SJA_BCANCONF.H *
16 * *
17 * 模块名: -- *
18 * *
19 * 目标系统: 任何基于任何兼容8051指令的微处理器同SJA1000组成的CAN *
20 * 系统 *
21 * *
22 * 应用语言: Keil C51 *
23 * *
24 ************************************************************************
25 * 版本 :V1.0 *
26 * *
27 ************************************************************************
28 * 广州周立功单片机发展有限公司 保留所有的版权 *
29 ************************************************************************/
30 #ifndef BasicCAN
31 #define BasicCAN
32
33 /************************************************************************
34 *SJA1000与微处理器的接口是以外部存储器的方式,所以以下的基址定义,用户 *
35 *应根据自己的实际电路来进行调整 *
36 ************************************************************************/
37 #define SJA_BaseAdr 0xfa00 //定义sja1000的片选基址
38
39 //计算SJA1000在电路中的实际地址:基址+内部寄存器地址
40
41 /************************************************************************
42 * 以下的定义为SJA1000的内部寄存器的地址,不可修改 *
43 * 各寄存器的具体功能清参阅sja1000的数据手册 *
44 ************************************************************************/
45 #define REG_CONTROL SJA_BaseAdr+0x00 //内部控制寄存器
46 #define REG_COMMAND SJA_BaseAdr+0x01 //命令寄存器
47 #define REG_STATUS SJA_BaseAdr+0x02 //状态寄存器
48 #define REG_INTERRUPT SJA_BaseAdr+0x03 //中断寄存器
49 #define REG_ACR SJA_BaseAdr+0x04 //验收代码寄存器
50 #define REG_AMR SJA_BaseAdr+0x05 //验收屏蔽寄存器
51 #define REG_BTR0 SJA_BaseAdr+0x06 //总线定时寄存器0
52 #define REG_BTR1 SJA_BaseAdr+0x07 //总线定时寄存器1
53 #define REG_OCR SJA_BaseAdr+0x08 //输出控制寄存器
54 #define REG_TEST SJA_BaseAdr+0x09 //测试寄存器
55
56 //以下为发送缓冲区寄存器定义
57
58 #define REG_TxBuffer1 SJA_BaseAdr+0x0A //发送缓冲区1
59 #define REG_TxBuffer2 SJA_BaseAdr+0x0B //发送缓冲区2
60 #define REG_TxBuffer3 SJA_BaseAdr+0x0C //发送缓冲区3
61 #define REG_TxBuffer4 SJA_BaseAdr+0x0D //发送缓冲区4
62 #define REG_TxBuffer5 SJA_BaseAdr+0x0E //发送缓冲区5
63 #define REG_TxBuffer6 SJA_BaseAdr+0x0F //发送缓冲区6
64 #define REG_TxBuffer7 SJA_BaseAdr+0x10 //发送缓冲区7
65 #define REG_TxBuffer8 SJA_BaseAdr+0x11 //发送缓冲区8
66 #define REG_TxBuffer9 SJA_BaseAdr+0x12 //发送缓冲区9
67 #define REG_TxBuffer10 SJA_BaseAdr+0x13 //发送缓冲区10
68
69 //以下为接收缓冲区寄存器定义
Page: 1
File: F:\sja1000\各芯片资料\bcan_test\SJA_BCANCONF.h 2011/12/27, 22:08:42
70 #define REG_RxBuffer1 SJA_BaseAdr+0x14 //接收缓冲区1
71 #define REG_RxBuffer2 SJA_BaseAdr+0x15 //接收缓冲区2
72 #define REG_RxBuffer3 SJA_BaseAdr+0x16 //接收缓冲区3
73 #define REG_RxBuffer4 SJA_BaseAdr+0x17 //接收缓冲区4
74 #define REG_RxBuffer5 SJA_BaseAdr+0x18 //接收缓冲区5
75 #define REG_RxBuffer6 SJA_BaseAdr+0x19 //接收缓冲区6
76 #define REG_RxBuffer7 SJA_BaseAdr+0x1A //接收缓冲区7
77 #define REG_RxBuffer8 SJA_BaseAdr+0x1B //接收缓冲区8
78 #define REG_RxBuffer9 SJA_BaseAdr+0x1C //接收缓冲区9
79 #define REG_RxBuffer10 SJA_BaseAdr+0x1D //接收缓冲区10
80
81 /************************************************************************
82 *内部地址 01EH 备用 *
83 ************************************************************************/
84
85 /************************************************************************
86 *时钟分频寄存器(内部地址01FH) *
87 ************************************************************************/
88 #define REG_CDR SJA_BaseAdr+0x1F //时钟分频寄存器
89
90 /************************************************************************
91 *定义指针 *
92 ************************************************************************/
93 unsigned char xdata *SJA_BCANAdr;
94
95 /************************************************************************
96 *定义命令字 *
97 ************************************************************************/
98 #define TR_CMD 0x01 //发送请求命令
99 #define AT_CMD 0x02 //夭折发送命令
100 #define RRB_CMD 0x04 //释放接收缓冲区
101 #define COS_CMD 0x08 //清除超载状态
102 #define GTS_CMD 0x10 //进入睡眠状态命令
103
104 /************************************************************************
105 *定义12M的晶体下,CAN总线波特率 *
106 ************************************************************************/
107 #define ByteRate_20k 0x00 //波特率20kbps
108 #define ByteRate_40k 0x01 //波特率40kbps
109 #define ByteRate_50k 0x02 //波特率50kbps
110 #define ByteRate_80k 0x03 //波特率80kbps
111 #define ByteRate_100k 0x04 //波特率100kbps
112 #define ByteRate_125k 0x05 //波特率125kbps
113 #define ByteRate_200k 0x06 //波特率200kbps
114 #define ByteRate_250k 0x07 //波特率250kbps
115 #define ByteRate_400k 0x08 //波特率400kbps
116 #define ByteRate_500k 0x09 //波特率500kbps
117 #define ByteRate_666k 0x0a //波特率666kbps
118 #define ByteRate_800k 0x0b //波特率800kbps
119 #define ByteRate_1000k 0x0c //波特率1000kbps
120
121 /*----------------------------------------------------------------------
122 * 以下为BASICCAN SJA1000的错误字 *
123 -----------------------------------------------------------------------*/
124 #define CAN_INTERFACE_0K 0 /*SJA1000接口正常 */
125 #define CAN_BUS_0K 0 /*CAN总线工作正常 */
126 #define CAN_INTERFACE_ERR 0XFF /*SJA1000接口错误? */
127 #define CAN_ENTRESET_ERR 0XFE /*SJA1000不能进入复位模式 */
128 #define CAN_QUITRESET_ERR 0XFD /*SJA1000不能退出复位模式 */
129 #define CAN_INITOBJECT_ERR 0XFC /*初始化报文验收滤波器错 */
130 #define CAN_INITBTR_ERR 0XFB /*初始化总线定时器器错 */
131 #define CAN_INITOUTCTL_ERR 0XFA /*初始化输出控制错误 */
132 #define CAN_INTCLKDIV_ERR 0XF9 /*初始化时钟分频控制器错 */
133 #define CAN_BUS_ERR 0XF8 /*SJA1000发送数据错 */
134
135 #define NO_BANDRATE_SIZE 0xe7
136
137 /************************************************************************
138 *以下为基本的函数
说明
关于失联党员情况说明岗位说明总经理岗位说明书会计岗位说明书行政主管岗位说明书
(BasicCAN) *
Page: 2
File: F:\sja1000\各芯片资料\bcan_test\SJA_BCANCONF.h 2011/12/27, 22:08:42
139 ************************************************************************/
140
141 /************************************************************************
142 *函数原型: bit BCAN_CREATE_COMMUNATION(void) *
143 *参数说明: 无 *
144 *返回值: *
145 * 0 ;
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示SJA1000接口正常 *
146 * 1 ; 表示SJA1000与处理器接口不正常 *
147 * *
148 *说明:该函数用于检测CAN控制器的接口是否正常 *
149 ************************************************************************/
150 bit BCAN_CREATE_COMMUNATION(void);
151
152 /************************************************************************
153 *函数原型: bit BCAN_ENTER_RETMODEL(void) *
154 *参数说明: 无 *
155 *返回值: *
156 * 0 ; 表示成功进入复位工作模式 *
157 * 1 ; 表示不能进入复位工作模式 *
158 * *
159 *说明: CAN控制器进入复位工作模式 *
160 ************************************************************************/
161 bit BCAN_ENTER_RETMODEL(void);
162
163 /************************************************************************
164 *函数原型: bit BCAN_QUIT_RETMODEL(void) *
165 *参数说明: 无 *
166 *返回值: *
167 * 0 ; 表示成功退出复位工作模式 *
168 * 1 ; 表示不能退出复位工作模式 *
169 * *
170 *说明: CAN控制器退出复位工作模式 *
171 ************************************************************************/
172 bit BCAN_QUIT_RETMODEL(void);
173
174 /************************************************************************
175 ;*函数原型: bit BCAN_SET_BANDRATE(unsigned char CAN_ByteRate) *
176 ;*参数说明: CAN_ByteRate 波特率(Kbit/s) BTR0 BTR1 *
177 ;* 0 5 0EFH 0FFH *
178 ;* 1 10 0D7H 0FFH *
179 ;* 2 20 0CBH 0FFH *
180 ;* 3 40 0C5H 0FFH *
181 ;* 4 50 0C9H 0A7H *
182 ;* 5 80 0C2H 0FFH *
183 ;* 6 100 04H 0A7H *
184 ;* 7 200 02H 025H *
185 ;* 8 250 01H 045H *
186 ;* 9 300 01H 025H *
187 ;* 10 500 01H 012H *
188 ;* 11 600 00H 025H *
189 ;* 12 1000 00H 012H *
190 ;*返回值: *
191 ;* 0 ;波特率设置成功 *
192 ;* 1 ;波特率设置失败 *
193 ;* *
194 ;*说明:设置CAN控制器SJA1000通讯波特率.SJA1000的晶振为必须为12MHZ, *
195 ;* 其它晶体的频率的值的波特率,需自己计算 。该子程序只能用于 *
196 ;* 复位模式 *
197 ;************************************************************************/
198 bit BCAN_SET_BANDRATE(unsigned char CAN_ByteRate);
199
200 /************************************************************************
201 ;*函数原型: bit BCAN_SET_OBJECT(unsigned char BCAN_ACR, *
202 unsigned char BCAN_AMR) *
203 *参数说明: *
204 * BCAN_ACR:存放验收代码寄存器(ACR)的参数设置 *
205 * BCAN_AMR:存放接收屏蔽寄存器(AMR)的参数设置 *
206 ;*返回值: *
207 ;* 0 ;通信对象设置成功 *
Page: 3
File: F:\sja1000\各芯片资料\bcan_test\SJA_BCANCONF.h 2011/12/27, 22:08:42
208 ;* 1 ;通信对象设置失败 *
209 ;* *
210 ;*说明:设置CAN节点的通讯对象,允许接收的报文ID号的高8位(D10--D3) 。 *
211 ;* 允许接收的报文,是由AMR和ACR共同决定的. *
212 ;* 满足以下条件的ID号的报文才可以被接收 *
213 ;*[(ID.10-ID.3)≡(AC.7-AC.0)]||(AM.7-AM.0)≡11111111 *
214 ;* 该子程序只能用于复位模式 *
*
215 ;************************************************************************/
216 bit BCAN_SET_OBJECT(unsigned char BCAN_ACR,unsigned char BCAN_AMR);
217
218 /************************************************************************
219 ;*函数原型: bit BCAN_SET_OUTCLK (unsigned char Out_Control, *
220 unsigned char Clock_Out); *
221 ;*参数说明: *
222 * Out_Control:存放输出控制寄存器 (OC) 的参数设置 *
223 * Clock_Out:存放时钟分频寄存器 (CDR) 的参数设置 *
224 * *
225 ;*返回值: *
226 ;* 0 ;设置成功 *
227 ;* 1 ;设置失败 *
228 ;* *
229 ;*说明:设置SJA1000的输出模式和时钟分频 。该子程序只能用于复位模式 *
*
230 ;************************************************************************/
231 bit BCAN_SET_OUTCLK (unsigned char Out_Control,
232 unsigned char Clock_Out);
233
234 /************************************************************************
235 *函数原型: bit BCAN_HW_INIT(unsigned char BCAN_ACR, *
236 * unsigned char BCAN_AMR, *
237 * unsigned char Bus_Timing0, *
238 * unsigned char Bus_Timing1, *
239 * unsigned char Out_Control, *
240 * unsigned char Clock_Out *
241 * ) *
242 *参数说明: *
243 * BCAN_ACR:存放验收代码寄存器(ACR)的参数设置 *
244 * BCAN_AMR:存放接收屏蔽寄存器(AMR)的参数设置 *
245 * Bus_Timing0:存放总线定时0寄存器(BTR0)的参数设置 *
246 * Bus_Timing1:存放总线定时1寄存器(BTR1)的参数设置 *
247 * Out_Control:存放输出控制寄存器 (OC) 的参数设置 *
248 * Clock_Out:存放时钟分频寄存器 (CDR) 的参数设置 *
249 * *
250 *返回值: *
251 * 0 ; 表示初始化成功 *
252 * 1 ; 表示初始化失败 *
253 * *
254 *说明:CAN控制器的初始化只能在复位模式下才能完成。初始化操作之前请先进入*
255 * 到复位操作模式,并将要初始化的各参数的值按数据手册中的计算方法,正 *
256 * 确的按实际需要计算好参数后,将参数写入对应的寄存器 。 *
257 *注: 为了CAN控制器的正确运行,请务必仔细的阅读SJA1000的数据手册 *
258 * *
259 *示例:设应用系统中晶体频率16MHZ,节点只接收ID(标志符)高八位为 *
260 * '10101010'的消息,系统波特率为50Kbit/s,关闭CLKOUT输出。 *
261 * 则根据数据手册中的计算方法的各参数如下: *
262 * ACR==0AAH,AMR==00H,BTR0==0C9H,BTR1==0C9H,OC==0FFH,CDR=48H *
263 * 则调用本函数为: *
264 * BCAN_HW_INIT(0xaa,0x00,0xc9,0xc9,0xff,0x48) *
265 ************************************************************************/
266 bit BCAN_HW_INIT(unsigned char BCAN_ACR,
267 unsigned char BCAN_AMR,
268 unsigned char Bus_Timing0,
269 unsigned char Bus_Timing1,
270 unsigned char Out_Control,
271 unsigned char Clock_Out
272 ) ;
273
274 /************************************************************************
Page: 4
File: F:\sja1000\各芯片资料\bcan_test\SJA_BCANCONF.h 2011/12/27, 22:08:42
275 *函数原型: bit BCAN_DATA_WRITE(unsigned char *SendDataBuf) *
276 *参数说明: 特定帧各式的数据? *
277 *返回值: *
278 * 0 ; 表示将数据成功的送至发送缓冲区 *
279 * 1 ; 表示上一次的数据正在发送, *
280 * ; 表示发送缓冲区被锁定,不能写入数据 *
281 * ;表示写入数据错误 *
282 *说明: 将待发送特定帧各式的数据,送入SJA1000发送缓存区中,然后启动 *
283 * SJA1000发送。 *
284 * 特定帧格式为:开始的两个字节存放 '描述符' ,以后的为数据 *
285 * 描述符包括11位长的ID(标志符)\1位RTR\4位描述数据长度的DLC共16位 *
286 * *
287 *注:本函数的返回值仅指示,将数据正确写入SJA1000发送缓存区中与否。 *
288 * 不指示SJA1000将该数据正确发送到CAN总线上完毕与否 *
289 ************************************************************************/
290 bit BCAN_DATA_WRITE(unsigned char *SendDataBuf);
291
292 /************************************************************************
293 *函数原型: bit BCAN_DATA_RECEIVE(unsigned char *RcvDataBuf); *
294 *参数说明: RcvDataBuf,存放微处理器保存数据缓冲区 *
295 *返回值: 0;接收成功 *
296 * 1;接收失败 *
297 *说明:CAN控制器接收数据,仅限于接收数据 *
298 ************************************************************************/
299 bit BCAN_DATA_RECEIVE(unsigned char *RcvDataBuf);
300
301 /************************************************************************
302 *函数原型: unsigned char BCAN_CMD_PRG(unsigned char cmd) *
303 *参数说明: cmd:sja1000运行的命令字 *
304 * 01:发送请求 *
305 * 02:中止发送 *
306