📄 can591_pelifunc.lst
字号:
-**************
205 **函数原型: char SJASetAccPrio(unsigned char accprio)
206 **参数说明: accprio 代码验收滤波器优先级
207 **返回值:
208 ** 0 ; 设置代码验收滤波器优先级寄存器成功
209 ** SJA_SETACRPRIO_ERR ; 设置代码验收滤波器优先级寄存器错
210 **
211 **说明: 该函数用于设置591代码验收滤波器优先级
212 **********************************************************************************************************
-**************
213 */
214 char SJASetAccPrio(unsigned char accprio)
215 {
216 1 char SjaFlag;
217 1 if(WriteSJAReg(REG_CAN_ACFPRIO,accprio)==0)
218 1 SjaFlag = 0;
219 1 else{
C51 COMPILER V7.01 CAN591_PELIFUNC 04/10/2003 14:04:02 PAGE 5
220 2 SjaFlag = SJA_SETACFPRIO_ERR ;
221 2 }
222 1 return (SjaFlag);
223 1 }
224
225 /*
226 **********************************************************************************************************
-**************
227 **函数原型: char SJASetAccEN(unsigned char accEN)
228 **参数说明: accEN 代码验收滤波器使能
229 **返回值:
230 ** 0 ; 设置代码验收滤波器使能寄存器成功
231 ** SJA_SETACREN_ERR ; 设置代码验收滤波器使能寄存器错
232 **
233 **说明: 该函数用于设置591代码验收滤波器使能
234 **********************************************************************************************************
-**************
235 */
236 char SJASetAccEN(unsigned char accEN)
237 {
238 1 char SjaFlag;
239 1 if(WriteSJAReg(REG_CAN_ACFEN,accEN)==0)
240 1 SjaFlag = 0;
241 1 else{
242 2 SjaFlag = SJA_SETACFEN_ERR ;
243 2 }
244 1 return (SjaFlag);
245 1 }
246
247 /*
248 **********************************************************************************************************
-**************
249 **函数原型: char SJASetAccCode(unsigned char ACF_NUM ,unsigned char acr0,unsigned char acr1,
250 ** unsigned char acr2,unsigned char acr3
251 ** )
252 **参数说明: ACF_NUM 代码验收报文滤波寄存器的组号
253 ** acr0 0的设定值
254 ** acr1 代码验收寄存器1的设定值
255 ** acr2 代码验收寄存器2的设定值
256 ** acr3 代码验收寄存器3的设定值
257 **返回值:
258 ** 0 ; 设置代码验收寄存器成功
259 ** SJA_SETACR_ERR ; 设置代码验收寄存器错
260 ** SJA_NOTRSTMODE ; 591不在复位模式
261 **
262 **说明: 该函数用于设定报文滤波的代码验收滤波器
263 **********************************************************************************************************
-**************
264 */
265 char SJASetAccCode(unsigned char ACF_NUM , unsigned char acr0,unsigned char acr1,
266 unsigned char acr2,unsigned char acr3
267 )
268 {
269 1 char status=0;
270 1 bit ErrorFlag=1;
271 1 unsigned char ErrorCount =0x20,tmp; //32次,报错
272 1 if(SJATestRstMode()){ //处于工作模式
273 2 status = SJA_NOTRSTMODE;
274 2 }
275 1 else{
276 2 while(--ErrorCount){
277 3 tmp=ACF_NUM;
C51 COMPILER V7.01 CAN591_PELIFUNC 04/10/2003 14:04:02 PAGE 6
278 3 //tmp=0x1f;
279 3 WriteSJAReg(tmp,acr0);
280 3 //tmp=ReadSJAReg(0x20);
281 3 tmp++;
282 3 WriteSJAReg(tmp,acr1);
283 3 tmp++;
284 3 WriteSJAReg(tmp,acr2);
285 3 tmp++;
286 3 WriteSJAReg(tmp,acr3);
287 3 tmp=ACF_NUM;
288 3 status=ReadSJAReg(tmp);
289 3 if(status != acr0)continue;
290 3 tmp++;
291 3 status=ReadSJAReg(tmp);
292 3 if(status != acr1)continue;
293 3 tmp++;
294 3 status=ReadSJAReg(tmp);
295 3 if(status != acr2)continue;
296 3 tmp++;
297 3 status=ReadSJAReg(tmp);
298 3 if(status != acr3)continue;
299 3 ErrorFlag=0;
300 3 status=0;
301 3 break;
302 3 }
303 2 if(ErrorFlag){
304 3 status =SJA_SETACR_ERR;
305 3 }
306 2 return status;
307 2 }
308 1 }
309
310 /*
311 **********************************************************************************************************
-**************
312 **函数原型: char SJASetAccMask(unsigned char ACF_NUM , unsigned char amr0,unsigned char amr1,
313 ** unsigned char amr2,unsigned char amr3
314 ** )
315 **参数说明: ACF_NUM 代码验收屏蔽寄存器的组号
316 ** amr0 验收屏蔽寄存器0的设定值
317 ** amr1 验收屏蔽寄存器1的设定值
318 ** amr2 验收屏蔽寄存器2的设定值
319 ** amr3 验收屏蔽寄存器3的设定值
320 **返回值:
321 ** 0 ; 设置验收屏蔽寄存器成功
322 ** SJA_SETAMR_ERR ; 设置验收屏蔽寄存器错
323 ** SJA_NOTRSTMODE ; 591不在复位模式
324 **
325 **说明: 该函数用于设定报文滤波的验收屏蔽寄存器
326 **********************************************************************************************************
-**************
327 */
328 char SJASetAccMask(unsigned char ACF_NUM , unsigned char amr0,unsigned char amr1,
329 unsigned char amr2,unsigned char amr3
330 )
331 {
332 1 char status=0;
333 1 bit ErrorFlag=1;
334 1 unsigned char ErrorCount =0x20,TMP; //32次,报错
335 1 if(SJATestRstMode()){ //处于工作模式
336 2 status = SJA_NOTRSTMODE;
337 2 }
C51 COMPILER V7.01 CAN591_PELIFUNC 04/10/2003 14:04:02 PAGE 7
338 1 else{
339 2 while(--ErrorCount){
340 3 TMP=ACF_NUM;
341 3 WriteSJAReg(TMP,amr0);
342 3 TMP++;
343 3 WriteSJAReg(TMP,amr1);
344 3 TMP++;
345 3 WriteSJAReg(TMP,amr2);
346 3 TMP++;
347 3 WriteSJAReg(TMP,amr3);
348 3 TMP=ACF_NUM;
349 3 status=ReadSJAReg(TMP);
350 3 if(status != amr0)continue;
351 3 TMP++;
352 3 status=ReadSJAReg(TMP);
353 3 if(status != amr1)continue;
354 3 TMP++;
355 3 status=ReadSJAReg(TMP);
356 3 if(status != amr2)continue;
357 3 TMP++;
358 3 status=ReadSJAReg(TMP);
359 3 if(status != amr3)continue;
360 3 ErrorFlag=0;
361 3 status=0;
362 3 break;
363 3 }
364 2 if(ErrorFlag){
365 3 status =SJA_SETAMR_ERR;
366 3 }
367 2 return status;
368 2 }
369 1 }
370 /*
371 **********************************************************************************************************
-**************
372 **函数原型: char SJASetBandRateStandard(unsigned char BandRateSize)
373 **参数说明: BandRateSize 标准常用波特率(Kbps)
374 ** 0 5
375 ** 1 10
376 ** 2 20
377 ** 3 40
378 ** 4 50
379 ** 5 80
380 ** 6 100
381 ** 7 125
382 ** 8 200
383 ** 9 250
384 ** 10 400
385 ** 11 500
386 ** 12 666
387 ** 13 800
388 ** 14 1000
389 **返回值:
390 ** 0 ; 设置总线定时器成功
391 ** SJA_SETBTR_ERR ; 设置总线定时器错
392 ** SJA_NOBTRSIZE ;波特率不能设为此值
393 **
394 **说明: 该函数用于设定在系统晶体为12MHZ时,常用的标准波特率的值。
395 ** 参数BandRateSize只能为0~14,其它的值会返回SJA_NOBTRSIZE错误
396 ** 本函数只能用于复位模式
397 **********************************************************************************************************
-**************
C51 COMPILER V7.01 CAN591_PELIFUNC 04/10/2003 14:04:02 PAGE 8
398 */
399 unsigned char code SJA_BTR_CODETAB[]={
400 0xbf,0xff, //;5KBPS的预设值
401 0xef,0xff, //;10KBPS的预设值1
402 0xd7,0xff, //;20KBPS的预设值1
403 0xcb,0xFF, //;40KBPS的预设值1
404 0x47,0x2F, //;50KBPS的预设值
405 0xc5,0xFF, //;80KBPS的预设值1
406 0xc9,0xa7, //;100KBPS的预设值1
407 0x45,0x2B, //;125KBPS的预设值1
408 0x04,0xa7, //;200KBPS的预设值1
409 0x01,0x1c, //;250KBPS的预设值
410 0x02,0x25, //;400KBPS的预设值1
411 0x01,0x45, //;500KBPS的预设值1
412 0x80,0xb6, //;666KBPS的预设值
413 0x00,0x16, //;800KBPS的预设值
414 0x01,0x12 //;1000KBPS的预设值1
415 };
416
417 char SJASetBandRateStandard(unsigned char BandRateSize)
418 {
419 1 char status=0;
420 1 bit ErrorFlag =1;
421 1 unsigned char ErrorCount = 0x20; //32次报错
422 1 if(BandRateSize>14){
423 2 status = SJA_NOBTRSIZE;
424 2 }
425 1 else{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -