60 CAN1_TX_LINE_TRIS = 0x00;
61 CAN1_RX_LINE_TRIS = 0x01;
75 BRGCON2 |= propSeg -1;
76 phaseSeg1 = (phaseSeg1 -1) <<3;
84 BRGCON2bits.SEG2PHTS = 1;
86 BRGCON3 |= phaseSeg2 -1;
89 BRGCON3bits.WAKFIL = 1;
95 RXB0CONbits.RXB0DBEN = 1;
104 switch( (flags & CAN_CONFIG_MSG_BITS) | ~CAN_CONFIG_MSG_BITS ) {
150 unsigned long identifier_math;
152 if (TXB0CONbits.TXREQ == 0) {
155 TXB0DLC = dataLength;
158 if (0b01000000 & flags)
159 TXB0DLCbits.TXRTR = 0x01;
161 TXB0DLCbits.TXRTR = 0x00;
166 identifier_math = identifier & 0x000000FF;
167 TXB0EIDL = (
unsigned char) identifier_math;
170 identifier_math = identifier & 0x0000FF00;
171 identifier_math = identifier_math >> 8;
172 TXB0EIDH = (
unsigned char) identifier_math;
175 TXB0SIDLbits.EXIDE = 0x01;
177 if (identifier & 0x00010000)
178 TXB0SIDLbits.EID16 = 0x01;
179 if (identifier & 0x00020000)
180 TXB0SIDLbits.EID17 = 0x01;
181 if (identifier & 0x00040000)
182 TXB0SIDLbits.SID0 = 0x01;
183 if (identifier & 0x00080000)
184 TXB0SIDLbits.SID1 = 0x01;
185 if (identifier & 0x00100000)
186 TXB0SIDLbits.SID2 = 0x01;
188 identifier_math = (identifier >> 21);
189 identifier_math = identifier_math & 0x000000FF;
190 TXB0SIDH = (
unsigned char) identifier_math;
196 TXB0SIDLbits.EXIDE = 0x00;
198 identifier_math = (identifier >> 3);
199 identifier_math = identifier_math & 0x000000FF;
200 TXB0SIDH = (
unsigned char) identifier_math;
202 identifier_math = identifier & 0x00000007;
203 identifier_math = identifier_math << 5;
204 TXB0SIDL = TXB0SIDL & 0b00011111;
205 TXB0SIDL = (
unsigned char) identifier_math;
209 if (0b00000001 & flags)
210 TXB0CONbits.TXPRI0 = 0x01;
212 TXB0CONbits.TXPRI0 = 0x00;
213 if (0b00000010 & flags)
214 TXB0CONbits.TXPRI1 = 0x01;
216 TXB0CONbits.TXPRI1 = 0x00;
228 TXB0CONbits.TXREQ = 0x01;
234 if (TXB1CONbits.TXREQ == 0) {
237 TXB1DLC = dataLength;
240 if (0b01000000 & flags)
241 TXB1DLCbits.TXRTR = 0x01;
243 TXB1DLCbits.TXRTR = 0x00;
248 identifier_math = identifier & 0x000000FF;
249 TXB1EIDL = (
unsigned char) identifier_math;
252 identifier_math = identifier & 0x0000FF00;
253 identifier_math = identifier_math >> 8;
254 TXB1EIDH = (
unsigned char) identifier_math;
257 TXB1SIDLbits.EXIDE = 0x01;
259 if (identifier & 0x00010000)
260 TXB1SIDLbits.EID16 = 0x01;
261 if (identifier & 0x00020000)
262 TXB1SIDLbits.EID17 = 0x01;
263 if (identifier & 0x00040000)
264 TXB1SIDLbits.SID0 = 0x01;
265 if (identifier & 0x00080000)
266 TXB1SIDLbits.SID1 = 0x01;
267 if (identifier & 0x00100000)
268 TXB1SIDLbits.SID2 = 0x01;
270 identifier_math = (identifier >> 21);
271 identifier_math = identifier_math & 0x000000FF;
272 TXB1SIDH = (
unsigned char) identifier_math;
277 TXB1SIDLbits.EXIDE = 0x00;
279 identifier_math = (identifier >> 3);
280 identifier_math = identifier_math & 0x000000FF;
281 TXB1SIDH = (
unsigned char) identifier_math;
283 identifier_math = identifier & 0x00000007;
284 identifier_math = identifier_math << 5;
285 TXB1SIDL = TXB1SIDL & 0b00011111;
286 TXB1SIDL = (
unsigned char) identifier_math;
290 if (0b00000001 & flags)
291 TXB1CONbits.TXPRI0 = 0x01;
293 TXB1CONbits.TXPRI0 = 0x00;
294 if (0b00000010 & flags)
295 TXB1CONbits.TXPRI1 = 0x01;
297 TXB1CONbits.TXPRI1 = 0x00;
309 TXB1CONbits.TXREQ = 0x01;
316 if (TXB2CONbits.TXREQ == 0) {
319 TXB2DLC = dataLength;
322 if (0b01000000 & flags)
323 TXB2DLCbits.TXRTR = 0x01;
325 TXB2DLCbits.TXRTR = 0x00;
330 identifier_math = identifier & 0x000000FF;
331 TXB2EIDL = (
unsigned char) identifier_math;
334 identifier_math = identifier & 0x0000FF00;
335 identifier_math = identifier_math >> 8;
336 TXB2EIDH = (
unsigned char) identifier_math;
339 TXB2SIDLbits.EXIDE = 0x01;
341 if (identifier & 0x00010000)
342 TXB2SIDLbits.EID16 = 0x01;
343 if (identifier & 0x00020000)
344 TXB2SIDLbits.EID17 = 0x01;
345 if (identifier & 0x00040000)
346 TXB2SIDLbits.SID0 = 0x01;
347 if (identifier & 0x00080000)
348 TXB2SIDLbits.SID1 = 0x01;
349 if (identifier & 0x00100000)
350 TXB2SIDLbits.SID2 = 0x01;
352 identifier_math = (identifier >> 21);
353 identifier_math = identifier_math & 0x000000FF;
354 TXB2SIDH = (
unsigned char) identifier_math;
360 TXB2SIDLbits.EXIDE = 0x00;
362 identifier_math = (identifier >> 3);
363 identifier_math = identifier_math & 0x000000FF;
364 TXB2SIDH = (
unsigned char) identifier_math;
366 identifier_math = identifier & 0x00000007;
367 identifier_math = identifier_math << 5;
368 TXB2SIDL = TXB2SIDL & 0b00011111;
369 TXB2SIDL = (
unsigned char) identifier_math;
373 if (0b00000001 & flags)
374 TXB2CONbits.TXPRI0 = 0x01;
376 TXB2CONbits.TXPRI0 = 0x00;
377 if (0b00000010 & flags)
378 TXB2CONbits.TXPRI1 = 0x01;
380 TXB2CONbits.TXPRI1 = 0x00;
392 TXB2CONbits.TXREQ = 0x01;
405 unsigned char error = 0;
408 if (COMSTATbits.RXB0OVFL == 0x01)
411 if (COMSTATbits.RXB1OVFL == 0x01)
415 if (RXB1CONbits.RXFUL ==0x01) {
421 msg->
data[0] =RXB1D0;
422 msg->
data[1] =RXB1D1;
423 msg->
data[2] =RXB1D2;
424 msg->
data[3] =RXB1D3;
425 msg->
data[4] =RXB1D4;
426 msg->
data[5] =RXB1D5;
427 msg->
data[6] =RXB1D6;
428 msg->
data[7] =RXB1D7;
431 msg->
RTR = RXB1DLCbits.RXRTR;
434 msg->
length = RXB1DLC & 0x0F;
437 msg->
type = RXB1SIDLbits.EXID;
440 if (RXB1SIDLbits.EXID == 0) {
441 msg->
identifier = ((
unsigned long)RXB1SIDH)<< 3;
442 tamp = (RXB1SIDL >> 5 ) & 0x07;
452 msg->
identifier += ((
unsigned long) RXB1EIDH) << 8;
454 if (RXB1SIDLbits.EID16)
456 if (RXB1SIDLbits.EID17)
458 if (RXB1SIDLbits.SID0)
460 if (RXB1SIDLbits.SID1)
462 if (RXB1SIDLbits.SID2)
465 msg->
identifier |= ((
unsigned long) RXB1SIDH) << 21;
469 RXB1CONbits.RXFUL = 0x00;
474 if (RXB0CONbits.RXFUL ==0x01) {
479 msg->
data[0] =RXB0D0;
480 msg->
data[1] =RXB0D1;
481 msg->
data[2] =RXB0D2;
482 msg->
data[3] =RXB0D3;
483 msg->
data[4] =RXB0D4;
484 msg->
data[5] =RXB0D5;
485 msg->
data[6] =RXB0D6;
486 msg->
data[7] =RXB0D7;
489 msg->
RTR = RXB0DLCbits.RXRTR;
492 msg->
length = RXB0DLC & 0x0F;
495 msg->
type = RXB0SIDLbits.EXID;
498 if (RXB0SIDLbits.EXID == 0)
500 msg->
identifier = ((
unsigned long)RXB0SIDH)<< 3;
501 tamp = (RXB0SIDL >> 5 ) & 0x07;
510 msg->
identifier += ((
unsigned long) RXB0EIDH) << 8;
512 if (RXB0SIDLbits.EID16)
514 if (RXB0SIDLbits.EID17)
516 if (RXB0SIDLbits.SID0)
518 if (RXB0SIDLbits.SID1)
520 if (RXB0SIDLbits.SID2)
523 msg->
identifier |= ((
unsigned long) RXB0SIDH) << 21;
528 RXB0CONbits.RXFUL = 0x00;
542 unsigned long identifier_math;
546 identifier_math = (mask >> 3);
547 identifier_math = identifier_math & 0x000000FF;
548 RXM0SIDH = (
unsigned char) identifier_math;
550 identifier_math = mask & 0x00000007;
551 identifier_math = identifier_math << 5;
552 RXM0SIDL = (
unsigned char) identifier_math;
557 identifier_math = (mask >> 3);
558 identifier_math = identifier_math & 0x000000FF;
559 RXM1SIDH = (
unsigned char) identifier_math;
561 identifier_math = mask & 0x00000007;
562 identifier_math = identifier_math << 5;
563 RXM1SIDL = (
unsigned char) identifier_math;
569 identifier_math = mask & 0x000000FF;
570 RXM0EIDL = (
unsigned char) identifier_math;
573 identifier_math = mask & 0x0000FF00;
574 identifier_math = identifier_math >> 8;
575 RXM0EIDH = (
unsigned char) identifier_math;
577 if (mask & 0x00010000)
578 RXM0SIDLbits.EID16 = 0x01;
580 RXM0SIDLbits.EID16 = 0x00;
582 if (mask & 0x00020000)
583 RXM0SIDLbits.EID17 = 0x01;
585 RXM0SIDLbits.EID17 = 0x00;
587 if (mask & 0x00040000)
588 RXM0SIDLbits.SID0 = 0x01;
590 RXM0SIDLbits.SID0 = 0x00;
592 if (mask & 0x00080000)
593 RXM0SIDLbits.SID1 = 0x01;
595 RXM0SIDLbits.SID1 = 0x00;
597 if (mask & 0x00100000)
598 RXM0SIDLbits.SID2 = 0x01 ;
600 RXM0SIDLbits.SID2 = 0x00 ;
602 identifier_math = (mask >> 21);
603 identifier_math = identifier_math & 0x000000FF;
604 RXM0SIDH = (
unsigned char) identifier_math;
610 identifier_math = mask & 0x000000FF;
611 RXM1EIDL = (
unsigned char) identifier_math;
614 identifier_math = mask & 0x0000FF00;
615 identifier_math = identifier_math >> 8;
616 RXM1EIDH = (
unsigned char) identifier_math;
618 if (mask & 0x00010000)
619 RXM1SIDLbits.EID16 = 0x01;
621 RXM1SIDLbits.EID16 = 0x00;
623 if (mask & 0x00020000)
624 RXM1SIDLbits.EID17 = 0x01;
626 RXM1SIDLbits.EID17 = 0x00;
628 if (mask & 0x00040000)
629 RXM1SIDLbits.SID0 = 0x01;
631 RXM1SIDLbits.SID0 = 0x00;
633 if (mask & 0x00080000)
634 RXM1SIDLbits.SID1 = 0x01;
636 RXM1SIDLbits.SID1 = 0x00;
638 if (mask & 0x00100000)
639 RXM1SIDLbits.SID2 = 0x01 ;
641 RXM1SIDLbits.SID2 = 0x00 ;
643 identifier_math = (mask >> 21);
644 identifier_math = identifier_math & 0x000000FF;
645 RXM1SIDH = (
unsigned char) identifier_math;
661 RXF0SIDLbits.EXIDEN = 0x00;
663 tamp = (filter >> 3);
664 tamp = tamp & 0x000000FF;
665 RXF0SIDH = (
unsigned char) tamp;
667 tamp = filter & 0x00000007;
669 RXF0SIDL = (
unsigned char) tamp;
676 RXF1SIDLbits.EXIDEN = 0x00;
678 tamp = (filter >> 3);
679 tamp = tamp & 0x000000FF;
680 RXF1SIDH = (
unsigned char) tamp;
682 tamp = filter & 0x00000007;
684 RXF1SIDL = (
unsigned char) tamp;
691 RXF2SIDLbits.EXIDEN = 0x00;
693 tamp = (filter >> 3);
694 tamp = tamp & 0x000000FF;
695 RXF2SIDH = (
unsigned char) tamp;
697 tamp = filter & 0x00000007;
699 RXF2SIDL = (
unsigned char) tamp;
706 RXF3SIDLbits.EXIDEN = 0x00;
708 tamp = (filter >> 3);
709 tamp = tamp & 0x000000FF;
710 RXF3SIDH = (
unsigned char) tamp;
712 tamp = filter & 0x00000007;
714 RXF3SIDL = (
unsigned char) tamp;
721 RXF4SIDLbits.EXIDEN = 0x00;
723 tamp = (filter >> 3);
724 tamp = tamp & 0x000000FF;
725 RXF4SIDH = (
unsigned char) tamp;
727 tamp = filter & 0x00000007;
729 RXF4SIDL = (
unsigned char) tamp;
736 RXF5SIDLbits.EXIDEN = 0x00;
738 tamp = (filter >> 3);
739 tamp = tamp & 0x000000FF;
740 RXF5SIDH = (
unsigned char) tamp;
742 tamp = filter & 0x00000007;
744 RXF5SIDL = (
unsigned char) tamp;
751 RXF0SIDLbits.EXIDEN = 0x01;
754 tamp = filter & 0x000000FF;
755 RXF0EIDL = (
unsigned char) tamp;
758 tamp = filter & 0x0000FF00;
760 RXF0EIDH = (
unsigned char) tamp;
762 if (filter & 0x00010000)
763 RXF0SIDLbits.EID16 = 0x01;
765 RXF0SIDLbits.EID16 = 0x00;
767 if (filter & 0x00020000)
768 RXF0SIDLbits.EID17 = 0x01;
770 RXF0SIDLbits.EID17 = 0x00;
772 if (filter & 0x00040000)
773 RXF0SIDLbits.SID0 = 0x01;
775 RXF0SIDLbits.SID0 = 0x00;
777 if (filter & 0x00080000)
778 RXF0SIDLbits.SID1 = 0x01;
780 RXF0SIDLbits.SID1 = 0x00;
782 if (filter & 0x00100000)
783 RXF0SIDLbits.SID2 = 0x01 ;
785 RXF0SIDLbits.SID2 = 0x00 ;
787 tamp = (filter >> 21);
788 tamp = tamp & 0x000000FF;
789 RXF0SIDH = (
unsigned char) tamp;
796 RXF1SIDLbits.EXIDEN = 0x01;
799 tamp = filter & 0x000000FF;
800 RXF1EIDL = (
unsigned char) tamp;
803 tamp = filter & 0x0000FF00;
805 RXF1EIDH = (
unsigned char) tamp;
807 if (filter & 0x00010000)
808 RXF1SIDLbits.EID16 = 0x01;
810 RXF1SIDLbits.EID16 = 0x00;
812 if (filter & 0x00020000)
813 RXF1SIDLbits.EID17 = 0x01;
815 RXF1SIDLbits.EID17 = 0x00;
817 if (filter & 0x00040000)
818 RXF1SIDLbits.SID0 = 0x01;
820 RXF1SIDLbits.SID0 = 0x00;
822 if (filter & 0x00080000)
823 RXF1SIDLbits.SID1 = 0x01;
825 RXF1SIDLbits.SID1 = 0x00;
827 if (filter & 0x00100000)
828 RXF1SIDLbits.SID2 = 0x01 ;
830 RXF1SIDLbits.SID2 = 0x00 ;
832 tamp = (filter >> 21);
833 tamp = tamp & 0x000000FF;
834 RXF1SIDH = (
unsigned char) tamp;
842 RXF2SIDLbits.EXIDEN = 0x01;
845 tamp = filter & 0x000000FF;
846 RXF2EIDL = (
unsigned char) tamp;
849 tamp = filter & 0x0000FF00;
851 RXF2EIDH = (
unsigned char) tamp;
853 if (filter & 0x00010000)
854 RXF2SIDLbits.EID16 = 0x01;
856 RXF2SIDLbits.EID16 = 0x00;
858 if (filter & 0x00020000)
859 RXF2SIDLbits.EID17 = 0x01;
861 RXF2SIDLbits.EID17 = 0x00;
863 if (filter & 0x00040000)
864 RXF2SIDLbits.SID0 = 0x01;
866 RXF2SIDLbits.SID0 = 0x00;
868 if (filter & 0x00080000)
869 RXF2SIDLbits.SID1 = 0x01;
871 RXF2SIDLbits.SID1 = 0x00;
873 if (filter & 0x00100000)
874 RXF2SIDLbits.SID2 = 0x01 ;
876 RXF2SIDLbits.SID2 = 0x00 ;
878 tamp = (filter >> 21);
879 tamp = tamp & 0x000000FF;
880 RXF2SIDH = (
unsigned char) tamp;
887 RXF3SIDLbits.EXIDEN = 0x01;
890 tamp = filter & 0x000000FF;
891 RXF3EIDL = (
unsigned char) tamp;
894 tamp = filter & 0x0000FF00;
896 RXF3EIDH = (
unsigned char) tamp;
898 if (filter & 0x00010000)
899 RXF3SIDLbits.EID16 = 0x01;
901 RXF3SIDLbits.EID16 = 0x00;
903 if (filter & 0x00020000)
904 RXF3SIDLbits.EID17 = 0x01;
906 RXF3SIDLbits.EID17 = 0x00;
908 if (filter & 0x00040000)
909 RXF3SIDLbits.SID0 = 0x01;
911 RXF3SIDLbits.SID0 = 0x00;
913 if (filter & 0x00080000)
914 RXF3SIDLbits.SID1 = 0x01;
916 RXF3SIDLbits.SID1 = 0x00;
918 if (filter & 0x00100000)
919 RXF3SIDLbits.SID2 = 0x01 ;
921 RXF3SIDLbits.SID2 = 0x00 ;
923 tamp = (filter >> 21);
924 tamp = tamp & 0x000000FF;
925 RXF3SIDH = (
unsigned char) tamp;
932 RXF4SIDLbits.EXIDEN = 0x01;
935 tamp = filter & 0x000000FF;
936 RXF4EIDL = (
unsigned char) tamp;
939 tamp = filter & 0x0000FF00;
941 RXF4EIDH = (
unsigned char) tamp;
943 if (filter & 0x00010000)
944 RXF4SIDLbits.EID16 = 0x01;
946 RXF4SIDLbits.EID16 = 0x00;
948 if (filter & 0x00020000)
949 RXF4SIDLbits.EID17 = 0x01;
951 RXF4SIDLbits.EID17 = 0x00;
953 if (filter & 0x00040000)
954 RXF4SIDLbits.SID0 = 0x01;
956 RXF4SIDLbits.SID0 = 0x00;
958 if (filter & 0x00080000)
959 RXF4SIDLbits.SID1 = 0x01;
961 RXF4SIDLbits.SID1 = 0x00;
963 if (filter & 0x00100000)
964 RXF4SIDLbits.SID2 = 0x01 ;
966 RXF4SIDLbits.SID2 = 0x00 ;
968 tamp = (filter >> 21);
969 tamp = tamp & 0x000000FF;
970 RXF4SIDH = (
unsigned char) tamp;
977 RXF5SIDLbits.EXIDEN = 0x01;
980 tamp = filter & 0x000000FF;
981 RXF5EIDL = (
unsigned char) tamp;
984 tamp = filter & 0x0000FF00;
986 RXF5EIDH = (
unsigned char) tamp;
988 if (filter & 0x00010000)
989 RXF5SIDLbits.EID16 = 0x01;
991 RXF5SIDLbits.EID16 = 0x00;
993 if (filter & 0x00020000)
994 RXF5SIDLbits.EID17 = 0x01;
996 RXF5SIDLbits.EID17 = 0x00;
998 if (filter & 0x00040000)
999 RXF5SIDLbits.SID0 = 0x01;
1001 RXF5SIDLbits.SID0 = 0x00;
1003 if (filter & 0x00080000)
1004 RXF5SIDLbits.SID1 = 0x01;
1006 RXF5SIDLbits.SID1 = 0x00;
1008 if (filter & 0x00100000)
1009 RXF5SIDLbits.SID2 = 0x01 ;
1011 RXF5SIDLbits.SID2 = 0x00 ;
1013 tamp = (filter >> 21);
1014 tamp = tamp & 0x000000FF;
1015 RXF5SIDH = (
unsigned char) tamp;
1026 while((CANSTAT & 0b11100000) != mode );
1035 CANCONbits.ABAT = 1;
1043 return (COMSTATbits.TXBO);
1050 return (COMSTATbits.TXBP);
1058 return (COMSTATbits.RXBP);
1065 return (COMSTATbits.TXWARN);
1072 return (COMSTATbits.RXWARN);
1097 return (!TXB0CONbits.TXREQ || !TXB1CONbits.TXREQ || !TXB2CONbits.TXREQ);
1105 return (RXB0CONbits.RXFUL || RXB1CONbits.RXFUL);