33 #if (NUM_ECAN_MODS >= 1) 46 #ifndef ECAN_1TIME_CODE_DEFS 65 #if defined(__dsPIC33EP512GP806__) 68 p_ecanmsg->w0.IDE = 0;
69 p_ecanmsg->w0.SRR = 0;
70 p_ecanmsg->w0.SID = u16_id;
71 p_ecanmsg->w1.EID17_6 = 0;
72 p_ecanmsg->w2.EID5_0 = 0;
73 p_ecanmsg->w2.RTR = 0;
74 p_ecanmsg->w2.RB1 = 0;
75 p_ecanmsg->w2.RB0 = 0;
76 p_ecanmsg->w2.DLC = u8_len;
82 p_ecanmsg->w0.IDE = 0;
83 p_ecanmsg->w0.SRR = 0;
84 p_ecanmsg->w0.SID = u16_id;
85 p_ecanmsg->w1.EID17_6 = 0;
86 p_ecanmsg->w2.EID5_0 = 0;
87 p_ecanmsg->w2.RTR = 0;
88 p_ecanmsg->w2.RB1 = 0;
89 p_ecanmsg->w2.RB0 = 0;
90 p_ecanmsg->w2.DLC = u8_len;
104 #if defined(__dsPIC33EP512GP806__) 108 p_ecanmsg->w0.IDE = 1;
109 p_ecanmsg->w0.SRR = 0;
110 p_ecanmsg->w0.SID = (u32_id >> 18) & 0x7FF;
111 p_ecanmsg->w1.EID17_6 = (u32_id >> 6) & 0xFFF;
112 p_ecanmsg->w2.EID5_0 = u32_id & 0x3F;
113 p_ecanmsg->w2.RTR = 0;
114 p_ecanmsg->w2.RB1 = 0;
115 p_ecanmsg->w2.RB0 = 0;
116 p_ecanmsg->w2.DLC = u8_len;
123 p_ecanmsg->w0.IDE = 1;
124 p_ecanmsg->w0.SRR = 0;
125 p_ecanmsg->w0.SID = (u32_id >> 18) & 0x7FF;
126 p_ecanmsg->w1.EID17_6 = (u32_id >> 6) & 0xFFF;
127 p_ecanmsg->w2.EID5_0 = u32_id & 0x3F;
128 p_ecanmsg->w2.RTR = 0;
129 p_ecanmsg->w2.RB1 = 0;
130 p_ecanmsg->w2.RB0 = 0;
131 p_ecanmsg->w2.DLC = u8_len;
144 #if defined(__dsPIC33EP512GP806__) 147 uint32_t u32_id, u32_tmp;
148 u32_tmp = p_ecanmsg->w0.SID;
149 u32_id = u32_tmp << 18;
150 u32_tmp = p_ecanmsg->w1.EID17_6;
151 u32_id = u32_id | (u32_tmp << 6) | p_ecanmsg->w2.EID5_0;
158 uint32_t u32_id, u32_tmp;
159 u32_tmp = p_ecanmsg->w0.SID;
160 u32_id = u32_tmp << 18;
161 u32_tmp = p_ecanmsg->w1.EID17_6;
162 u32_id = u32_id | (u32_tmp << 6) | p_ecanmsg->w2.EID5_0;
168 #define ECAN_1TIME_CODE_DEFS 183 C1CTRL1bits.CANCKS = ECAN_FCAN_IS_FP;
187 #if (FCY == GET_FCY(FRCPLL_FCY40MHz)) || \ 188 (FCY == GET_FCY(PRIPLL_7372KHzCrystal_40MHzFCY)) || \ 189 (FCY == GET_FCY(PRIPLL_8MHzCrystal_40MHzFCY)) 197 C1CFG2 = ECAN_NO_WAKEUP |
200 ECAN_SEG2_PROGRAMMABLE |
204 C1CFG1 = ECAN_SYNC_JUMP_4 |
207 #elif FCY == GET_FCY(FRCPLL_FCY60MHz) 223 C1CFG2 = ECAN_NO_WAKEUP |
226 ECAN_SEG2_PROGRAMMABLE |
230 C1CFG1 = ECAN_SYNC_JUMP_4 |
233 #warning "ECAN module not configured for current processor frequency! Edit function configECAN1()." 245 if (u8_bufNum > 15) {
246 u8_bufNum = u8_bufNum - 16;
247 C1RXFUL2 = C1RXFUL2 & ~(1<<u8_bufNum);
249 C1RXFUL1 = C1RXFUL1 & ~(1<<u8_bufNum);
260 if (u8_bufNum > 15) {
261 u8_bufNum = u8_bufNum - 16;
262 return(C1RXFUL2 & (1<<u8_bufNum));
264 return(C1RXFUL1 & (1<<u8_bufNum));
288 C1TR01CONbits.TXEN0 = u8_type;
289 C1TR01CONbits.TX0PRI = u8_priority;
292 C1TR01CONbits.TXEN1 = u8_type;
293 C1TR01CONbits.TX1PRI = u8_priority;
296 C1TR23CONbits.TXEN2 = u8_type;
297 C1TR23CONbits.TX2PRI = u8_priority;
300 C1TR23CONbits.TXEN3 = u8_type;
301 C1TR23CONbits.TX3PRI = u8_priority;
304 C1TR45CONbits.TXEN4 = u8_type;
305 C1TR45CONbits.TX4PRI = u8_priority;
308 C1TR45CONbits.TXEN5 = u8_type;
309 C1TR45CONbits.TX5PRI = u8_priority;
312 C1TR67CONbits.TXEN6 = u8_type;
313 C1TR67CONbits.TX6PRI = u8_priority;
316 C1TR67CONbits.TXEN7 = u8_type;
317 C1TR67CONbits.TX7PRI = u8_priority;
330 C1TR01CONbits.TXREQ0 = 1;
333 C1TR01CONbits.TXREQ1 = 1;
336 C1TR23CONbits.TXREQ2 = 1;
339 C1TR23CONbits.TXREQ3 = 1;
342 C1TR45CONbits.TXREQ4 = 1;;
345 C1TR45CONbits.TXREQ5 = 1;
348 C1TR67CONbits.TXREQ6 = 1;
351 C1TR67CONbits.TXREQ7 = 1;
364 return(C1TR01CONbits.TXREQ0);
366 return(C1TR01CONbits.TXREQ1);
368 return(C1TR23CONbits.TXREQ2);
370 return(C1TR23CONbits.TXREQ3);
372 return(C1TR45CONbits.TXREQ4);
374 return(C1TR45CONbits.TXREQ5);
376 return(C1TR67CONbits.TXREQ6);
378 return(C1TR67CONbits.TXREQ7);
394 uint16_t *pu16_CxRXFySID,*pu16_CxRXFyEID, *pu16_CxFMSKSEL1, *pu16_CxBUFPNT1;
396 uint16_t u16_eid15_0;
397 uint16_t u16_eid17_16;
405 pu16_CxRXFySID = (uint16_t*) &C1RXF0SID + (u8_filtNum << 1);
406 pu16_CxRXFyEID = pu16_CxRXFySID + 1;
407 pu16_CxFMSKSEL1 = (uint16_t*) &C1FMSKSEL1 + (u8_filtNum >> 3);
408 pu16_CxBUFPNT1 = (uint16_t*) &C1BUFPNT1 + (u8_filtNum >> 2);
414 u16_sid = (u32_id >> 18) & 0x7FF;
415 u16_eid17_16 = (u32_id >>16) & 0x3;
416 u16_eid15_0 = u32_id & 0xFFFF;
417 *pu16_CxRXFySID =(u16_sid <<5) | ECAN_MATCH_EID | u16_eid17_16;
418 *pu16_CxRXFyEID = u16_eid15_0;
420 u16_sid = u32_id & 0x7FF;
421 *pu16_CxRXFySID = u16_sid <<5;
426 u8_startPos = 4 * (u8_filtNum & 0x3);
427 u16_mask = ~ ( 0xF << u8_startPos);
428 *pu16_CxBUFPNT1 = (*pu16_CxBUFPNT1 & u16_mask) | (u8_bufnum << u8_startPos);
431 u8_startPos = 2 * (u8_filtNum & 0x7);
432 u16_mask = ~ ( 0x3 << u8_startPos);
433 *pu16_CxFMSKSEL1 = (*pu16_CxFMSKSEL1 & u16_mask) | (u8_maskReg << u8_startPos);
435 C1FEN1 = C1FEN1 | (1 << u8_filtNum) ;
452 uint16_t *pu16_CxRXMySID,*pu16_CxRXMyEID;
454 uint16_t u16_meid15_0;
455 uint16_t u16_meid17_16;
457 pu16_CxRXMySID =(uint16_t*) &C1RXM0SID + (u8_maskNum << 1);
458 pu16_CxRXMyEID = pu16_CxRXMySID + 1;
464 u16_msid = (u32_idMask >> 18) & 0x7FF;
465 u16_meid17_16 = (u32_idMask >>16) & 0x3;
466 u16_meid15_0 = u32_idMask & 0xFFFF;
467 if (u8_matchType) *pu16_CxRXMySID =(u16_msid <<5) | ECAN_MATCH_EID | u16_meid17_16;
468 else *pu16_CxRXMySID =(u16_msid <<5) | u16_meid17_16;
469 *pu16_CxRXMyEID = u16_meid15_0;
471 u16_msid = u32_idMask & 0x7FF;
472 if (u8_matchType) *pu16_CxRXMySID = (u16_msid <<5) | ECAN_MATCH_EID ;
473 else *pu16_CxRXMySID = (u16_msid <<5);
479 #endif // #if (NUM_ECAN_MODS >= ${x}) 517 #if (NUM_ECAN_MODS >= 2) 530 #ifndef ECAN_1TIME_CODE_DEFS 549 #if defined(__dsPIC33EP512GP806__) 552 p_ecanmsg->w0.IDE = 0;
553 p_ecanmsg->w0.SRR = 0;
554 p_ecanmsg->w0.SID = u16_id;
555 p_ecanmsg->w1.EID17_6 = 0;
556 p_ecanmsg->w2.EID5_0 = 0;
557 p_ecanmsg->w2.RTR = 0;
558 p_ecanmsg->w2.RB1 = 0;
559 p_ecanmsg->w2.RB0 = 0;
560 p_ecanmsg->w2.DLC = u8_len;
566 p_ecanmsg->w0.IDE = 0;
567 p_ecanmsg->w0.SRR = 0;
568 p_ecanmsg->w0.SID = u16_id;
569 p_ecanmsg->w1.EID17_6 = 0;
570 p_ecanmsg->w2.EID5_0 = 0;
571 p_ecanmsg->w2.RTR = 0;
572 p_ecanmsg->w2.RB1 = 0;
573 p_ecanmsg->w2.RB0 = 0;
574 p_ecanmsg->w2.DLC = u8_len;
588 #if defined(__dsPIC33EP512GP806__) 592 p_ecanmsg->w0.IDE = 1;
593 p_ecanmsg->w0.SRR = 0;
594 p_ecanmsg->w0.SID = (u32_id >> 18) & 0x7FF;
595 p_ecanmsg->w1.EID17_6 = (u32_id >> 6) & 0xFFF;
596 p_ecanmsg->w2.EID5_0 = u32_id & 0x3F;
597 p_ecanmsg->w2.RTR = 0;
598 p_ecanmsg->w2.RB1 = 0;
599 p_ecanmsg->w2.RB0 = 0;
600 p_ecanmsg->w2.DLC = u8_len;
607 p_ecanmsg->w0.IDE = 1;
608 p_ecanmsg->w0.SRR = 0;
609 p_ecanmsg->w0.SID = (u32_id >> 18) & 0x7FF;
610 p_ecanmsg->w1.EID17_6 = (u32_id >> 6) & 0xFFF;
611 p_ecanmsg->w2.EID5_0 = u32_id & 0x3F;
612 p_ecanmsg->w2.RTR = 0;
613 p_ecanmsg->w2.RB1 = 0;
614 p_ecanmsg->w2.RB0 = 0;
615 p_ecanmsg->w2.DLC = u8_len;
628 #if defined(__dsPIC33EP512GP806__) 631 uint32_t u32_id, u32_tmp;
632 u32_tmp = p_ecanmsg->w0.SID;
633 u32_id = u32_tmp << 18;
634 u32_tmp = p_ecanmsg->w1.EID17_6;
635 u32_id = u32_id | (u32_tmp << 6) | p_ecanmsg->w2.EID5_0;
642 uint32_t u32_id, u32_tmp;
643 u32_tmp = p_ecanmsg->w0.SID;
644 u32_id = u32_tmp << 18;
645 u32_tmp = p_ecanmsg->w1.EID17_6;
646 u32_id = u32_id | (u32_tmp << 6) | p_ecanmsg->w2.EID5_0;
652 #define ECAN_1TIME_CODE_DEFS 660 void configBaudECAN2(
void) {
667 C2CTRL1bits.CANCKS = ECAN_FCAN_IS_FP;
671 #if (FCY == GET_FCY(FRCPLL_FCY40MHz)) || \ 672 (FCY == GET_FCY(PRIPLL_7372KHzCrystal_40MHzFCY)) || \ 673 (FCY == GET_FCY(PRIPLL_8MHzCrystal_40MHzFCY)) 681 C2CFG2 = ECAN_NO_WAKEUP |
684 ECAN_SEG2_PROGRAMMABLE |
688 C2CFG1 = ECAN_SYNC_JUMP_4 |
691 #elif FCY == GET_FCY(FRCPLL_FCY60MHz) 707 C2CFG2 = ECAN_NO_WAKEUP |
710 ECAN_SEG2_PROGRAMMABLE |
714 C2CFG1 = ECAN_SYNC_JUMP_4 |
717 #warning "ECAN module not configured for current processor frequency! Edit function configECAN1()." 727 void clrRxFullFlagECAN2(
uint8_t u8_bufNum) {
729 if (u8_bufNum > 15) {
730 u8_bufNum = u8_bufNum - 16;
731 C2RXFUL2 = C2RXFUL2 & ~(1<<u8_bufNum);
733 C2RXFUL1 = C2RXFUL1 & ~(1<<u8_bufNum);
744 if (u8_bufNum > 15) {
745 u8_bufNum = u8_bufNum - 16;
746 return(C2RXFUL2 & (1<<u8_bufNum));
748 return(C2RXFUL1 & (1<<u8_bufNum));
755 void clrRxFullOvfFlagsECAN2(
void) {
772 C2TR01CONbits.TXEN0 = u8_type;
773 C2TR01CONbits.TX0PRI = u8_priority;
776 C2TR01CONbits.TXEN1 = u8_type;
777 C2TR01CONbits.TX1PRI = u8_priority;
780 C2TR23CONbits.TXEN2 = u8_type;
781 C2TR23CONbits.TX2PRI = u8_priority;
784 C2TR23CONbits.TXEN3 = u8_type;
785 C2TR23CONbits.TX3PRI = u8_priority;
788 C2TR45CONbits.TXEN4 = u8_type;
789 C2TR45CONbits.TX4PRI = u8_priority;
792 C2TR45CONbits.TXEN5 = u8_type;
793 C2TR45CONbits.TX5PRI = u8_priority;
796 C2TR67CONbits.TXEN6 = u8_type;
797 C2TR67CONbits.TX6PRI = u8_priority;
800 C2TR67CONbits.TXEN7 = u8_type;
801 C2TR67CONbits.TX7PRI = u8_priority;
810 void startTxECAN2(
uint8_t u8_bufNum) {
814 C2TR01CONbits.TXREQ0 = 1;
817 C2TR01CONbits.TXREQ1 = 1;
820 C2TR23CONbits.TXREQ2 = 1;
823 C2TR23CONbits.TXREQ3 = 1;
826 C2TR45CONbits.TXREQ4 = 1;;
829 C2TR45CONbits.TXREQ5 = 1;
832 C2TR67CONbits.TXREQ6 = 1;
835 C2TR67CONbits.TXREQ7 = 1;
848 return(C2TR01CONbits.TXREQ0);
850 return(C2TR01CONbits.TXREQ1);
852 return(C2TR23CONbits.TXREQ2);
854 return(C2TR23CONbits.TXREQ3);
856 return(C2TR45CONbits.TXREQ4);
858 return(C2TR45CONbits.TXREQ5);
860 return(C2TR67CONbits.TXREQ6);
862 return(C2TR67CONbits.TXREQ7);
878 uint16_t *pu16_CxRXFySID,*pu16_CxRXFyEID, *pu16_CxFMSKSEL1, *pu16_CxBUFPNT1;
880 uint16_t u16_eid15_0;
881 uint16_t u16_eid17_16;
889 pu16_CxRXFySID = (uint16_t*) &C2RXF0SID + (u8_filtNum << 1);
890 pu16_CxRXFyEID = pu16_CxRXFySID + 1;
891 pu16_CxFMSKSEL1 = (uint16_t*) &C2FMSKSEL1 + (u8_filtNum >> 3);
892 pu16_CxBUFPNT1 = (uint16_t*) &C2BUFPNT1 + (u8_filtNum >> 2);
898 u16_sid = (u32_id >> 18) & 0x7FF;
899 u16_eid17_16 = (u32_id >>16) & 0x3;
900 u16_eid15_0 = u32_id & 0xFFFF;
901 *pu16_CxRXFySID =(u16_sid <<5) | ECAN_MATCH_EID | u16_eid17_16;
902 *pu16_CxRXFyEID = u16_eid15_0;
904 u16_sid = u32_id & 0x7FF;
905 *pu16_CxRXFySID = u16_sid <<5;
910 u8_startPos = 4 * (u8_filtNum & 0x3);
911 u16_mask = ~ ( 0xF << u8_startPos);
912 *pu16_CxBUFPNT1 = (*pu16_CxBUFPNT1 & u16_mask) | (u8_bufnum << u8_startPos);
915 u8_startPos = 2 * (u8_filtNum & 0x7);
916 u16_mask = ~ ( 0x3 << u8_startPos);
917 *pu16_CxFMSKSEL1 = (*pu16_CxFMSKSEL1 & u16_mask) | (u8_maskReg << u8_startPos);
919 C2FEN1 = C2FEN1 | (1 << u8_filtNum) ;
935 void configRxMaskECAN2(
uint8_t u8_maskNum, uint32_t u32_idMask,
uint8_t u8_idType,
uint8_t u8_matchType) {
936 uint16_t *pu16_CxRXMySID,*pu16_CxRXMyEID;
938 uint16_t u16_meid15_0;
939 uint16_t u16_meid17_16;
941 pu16_CxRXMySID =(uint16_t*) &C2RXM0SID + (u8_maskNum << 1);
942 pu16_CxRXMyEID = pu16_CxRXMySID + 1;
948 u16_msid = (u32_idMask >> 18) & 0x7FF;
949 u16_meid17_16 = (u32_idMask >>16) & 0x3;
950 u16_meid15_0 = u32_idMask & 0xFFFF;
951 if (u8_matchType) *pu16_CxRXMySID =(u16_msid <<5) | ECAN_MATCH_EID | u16_meid17_16;
952 else *pu16_CxRXMySID =(u16_msid <<5) | u16_meid17_16;
953 *pu16_CxRXMyEID = u16_meid15_0;
955 u16_msid = u32_idMask & 0x7FF;
956 if (u8_matchType) *pu16_CxRXMySID = (u16_msid <<5) | ECAN_MATCH_EID ;
957 else *pu16_CxRXMySID = (u16_msid <<5);
963 #endif // #if (NUM_ECAN_MODS >= ${x}) uint8_t getRxFullFlagECAN1(uint8_t u8_bufNum)
void clrRxFullOvfFlagsECAN1(void)
uint8_t getTxInProgressECAN1(uint8_t u8_bufNum)
void clrRxFullFlagECAN1(uint8_t u8_bufNum)
uint32_t getIdExtendedDataFrameECAN(ECANMSG *p_ecanmsg)
void formatStandardDataFrameECAN(ECANMSG *p_ecanmsg, uint16_t u16_id, uint8_t u8_len)
void configRxFilterECAN1(uint8_t u8_filtNum, uint32_t u32_id, uint8_t u8_idType, uint8_t u8_bufnum, uint8_t u8_maskReg)
void configTxRxBufferECAN1(uint8_t u8_bufNum, uint8_t u8_type, uint8_t u8_priority)
void formatExtendedDataFrameECAN(ECANMSG *p_ecanmsg, uint32_t u32_id, uint8_t u8_len)
void startTxECAN1(uint8_t u8_bufNum)
unsigned char uint8_t
An abbreviation for an 8-bit unsigned integer.
void configBaudECAN1(void)
void configRxMaskECAN1(uint8_t u8_maskNum, uint32_t u32_idMask, uint8_t u8_idType, uint8_t u8_matchType)