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