33 #if (NUM_ECAN_MODS >= 1)
46 #ifndef ECAN_1TIME_CODE_DEFS
57 p_ecanmsg->w0.IDE = 0;
58 p_ecanmsg->w0.SRR = 0;
59 p_ecanmsg->w0.SID = u16_id;
60 p_ecanmsg->w1.EID17_6 = 0;
61 p_ecanmsg->w2.EID5_0 = 0;
62 p_ecanmsg->w2.RTR = 0;
63 p_ecanmsg->w2.RB1 = 0;
64 p_ecanmsg->w2.RB0 = 0;
65 p_ecanmsg->w2.DLC = u8_len;
78 p_ecanmsg->w0.IDE = 1;
79 p_ecanmsg->w0.SRR = 0;
80 p_ecanmsg->w0.SID = (u32_id >> 18) & 0x7FF;
81 p_ecanmsg->w1.EID17_6 = (u32_id >> 6) & 0xFFF;
82 p_ecanmsg->w2.EID5_0 = u32_id & 0x3F;
83 p_ecanmsg->w2.RTR = 0;
84 p_ecanmsg->w2.RB1 = 0;
85 p_ecanmsg->w2.RB0 = 0;
86 p_ecanmsg->w2.DLC = u8_len;
97 u32_tmp = p_ecanmsg->w0.SID;
98 u32_id = u32_tmp << 18;
99 u32_tmp = p_ecanmsg->w1.EID17_6;
100 u32_id = u32_id | (u32_tmp << 6) | p_ecanmsg->w2.EID5_0;
104 #define ECAN_1TIME_CODE_DEFS
116 if (u8_bufNum > 15) {
117 u8_bufNum = u8_bufNum - 16;
118 C1RXFUL2 = C1RXFUL2 & ~(1<<u8_bufNum);
120 C1RXFUL1 = C1RXFUL1 & ~(1<<u8_bufNum);
131 if (u8_bufNum > 15) {
132 u8_bufNum = u8_bufNum - 16;
133 return(C1RXFUL2 & (1<<u8_bufNum));
135 return(C1RXFUL1 & (1<<u8_bufNum));
159 C1TR01CONbits.TXEN0 = u8_type;
160 C1TR01CONbits.TX0PRI = u8_priority;
163 C1TR01CONbits.TXEN1 = u8_type;
164 C1TR01CONbits.TX1PRI = u8_priority;
167 C1TR23CONbits.TXEN2 = u8_type;
168 C1TR23CONbits.TX2PRI = u8_priority;
171 C1TR23CONbits.TXEN3 = u8_type;
172 C1TR23CONbits.TX3PRI = u8_priority;
175 C1TR45CONbits.TXEN4 = u8_type;
176 C1TR45CONbits.TX4PRI = u8_priority;
179 C1TR45CONbits.TXEN5 = u8_type;
180 C1TR45CONbits.TX5PRI = u8_priority;
183 C1TR67CONbits.TXEN6 = u8_type;
184 C1TR67CONbits.TX6PRI = u8_priority;
187 C1TR67CONbits.TXEN7 = u8_type;
188 C1TR67CONbits.TX7PRI = u8_priority;
201 C1TR01CONbits.TXREQ0 = 1;
204 C1TR01CONbits.TXREQ1 = 1;
207 C1TR23CONbits.TXREQ2 = 1;
210 C1TR23CONbits.TXREQ3 = 1;
213 C1TR45CONbits.TXREQ4 = 1;;
216 C1TR45CONbits.TXREQ5 = 1;
219 C1TR67CONbits.TXREQ6 = 1;
222 C1TR67CONbits.TXREQ7 = 1;
235 return(C1TR01CONbits.TXREQ0);
237 return(C1TR01CONbits.TXREQ1);
239 return(C1TR23CONbits.TXREQ2);
241 return(C1TR23CONbits.TXREQ3);
243 return(C1TR45CONbits.TXREQ4);
245 return(C1TR45CONbits.TXREQ5);
247 return(C1TR67CONbits.TXREQ6);
249 return(C1TR67CONbits.TXREQ7);
265 uint16_t *pu16_CxRXFySID,*pu16_CxRXFyEID, *pu16_CxFMSKSEL1, *pu16_CxBUFPNT1;
276 pu16_CxRXFySID = (
uint16_t*) &C1RXF0SID + (u8_filtNum << 1);
277 pu16_CxRXFyEID = pu16_CxRXFySID + 1;
278 pu16_CxFMSKSEL1 = (
uint16_t*) &C1FMSKSEL1 + (u8_filtNum >> 3);
279 pu16_CxBUFPNT1 = (
uint16_t*) &C1BUFPNT1 + (u8_filtNum >> 2);
285 u16_sid = (u32_id >> 18) & 0x7FF;
286 u16_eid17_16 = (u32_id >>16) & 0x3;
287 u16_eid15_0 = u32_id & 0xFFFF;
288 *pu16_CxRXFySID =(u16_sid <<5) | ECAN_MATCH_EID | u16_eid17_16;
289 *pu16_CxRXFyEID = u16_eid15_0;
291 u16_sid = u32_id & 0x7FF;
292 *pu16_CxRXFySID = u16_sid <<5;
297 u8_startPos = 4 * (u8_filtNum & 0x3);
298 u16_mask = ~ ( 0xF << u8_startPos);
299 *pu16_CxBUFPNT1 = (*pu16_CxBUFPNT1 & u16_mask) | (u8_bufnum << u8_startPos);
302 u8_startPos = 2 * (u8_filtNum & 0x7);
303 u16_mask = ~ ( 0x3 << u8_startPos);
304 *pu16_CxFMSKSEL1 = (*pu16_CxFMSKSEL1 & u16_mask) | (u8_maskReg << u8_startPos);
306 C1FEN1 = C1FEN1 | (1 << u8_filtNum) ;
323 uint16_t *pu16_CxRXMySID,*pu16_CxRXMyEID;
328 pu16_CxRXMySID =(
uint16_t*) &C1RXM0SID + (u8_maskNum << 1);
329 pu16_CxRXMyEID = pu16_CxRXMySID + 1;
335 u16_msid = (u32_idMask >> 18) & 0x7FF;
336 u16_meid17_16 = (u32_idMask >>16) & 0x3;
337 u16_meid15_0 = u32_idMask & 0xFFFF;
338 if (u8_matchType) *pu16_CxRXMySID =(u16_msid <<5) | ECAN_MATCH_EID | u16_meid17_16;
339 else *pu16_CxRXMySID =(u16_msid <<5) | u16_meid17_16;
340 *pu16_CxRXMyEID = u16_meid15_0;
342 u16_msid = u32_idMask & 0x7FF;
343 if (u8_matchType) *pu16_CxRXMySID = (u16_msid <<5) | ECAN_MATCH_EID ;
344 else *pu16_CxRXMySID = (u16_msid <<5);
350 #endif // #if (NUM_ECAN_MODS >= ${x})
396 #if (NUM_ECAN_MODS >= 2)
409 #ifndef ECAN_1TIME_CODE_DEFS
420 p_ecanmsg->w0.IDE = 0;
421 p_ecanmsg->w0.SRR = 0;
422 p_ecanmsg->w0.SID = u16_id;
423 p_ecanmsg->w1.EID17_6 = 0;
424 p_ecanmsg->w2.EID5_0 = 0;
425 p_ecanmsg->w2.RTR = 0;
426 p_ecanmsg->w2.RB1 = 0;
427 p_ecanmsg->w2.RB0 = 0;
428 p_ecanmsg->w2.DLC = u8_len;
441 p_ecanmsg->w0.IDE = 1;
442 p_ecanmsg->w0.SRR = 0;
443 p_ecanmsg->w0.SID = (u32_id >> 18) & 0x7FF;
444 p_ecanmsg->w1.EID17_6 = (u32_id >> 6) & 0xFFF;
445 p_ecanmsg->w2.EID5_0 = u32_id & 0x3F;
446 p_ecanmsg->w2.RTR = 0;
447 p_ecanmsg->w2.RB1 = 0;
448 p_ecanmsg->w2.RB0 = 0;
449 p_ecanmsg->w2.DLC = u8_len;
460 u32_tmp = p_ecanmsg->w0.SID;
461 u32_id = u32_tmp << 18;
462 u32_tmp = p_ecanmsg->w1.EID17_6;
463 u32_id = u32_id | (u32_tmp << 6) | p_ecanmsg->w2.EID5_0;
467 #define ECAN_1TIME_CODE_DEFS
477 void clrRxFullFlagECAN2(
uint8_t u8_bufNum) {
479 if (u8_bufNum > 15) {
480 u8_bufNum = u8_bufNum - 16;
481 C2RXFUL2 = C2RXFUL2 & ~(1<<u8_bufNum);
483 C2RXFUL1 = C2RXFUL1 & ~(1<<u8_bufNum);
494 if (u8_bufNum > 15) {
495 u8_bufNum = u8_bufNum - 16;
496 return(C2RXFUL2 & (1<<u8_bufNum));
498 return(C2RXFUL1 & (1<<u8_bufNum));
505 void clrRxFullOvfFlagsECAN2(
void) {
522 C2TR01CONbits.TXEN0 = u8_type;
523 C2TR01CONbits.TX0PRI = u8_priority;
526 C2TR01CONbits.TXEN1 = u8_type;
527 C2TR01CONbits.TX1PRI = u8_priority;
530 C2TR23CONbits.TXEN2 = u8_type;
531 C2TR23CONbits.TX2PRI = u8_priority;
534 C2TR23CONbits.TXEN3 = u8_type;
535 C2TR23CONbits.TX3PRI = u8_priority;
538 C2TR45CONbits.TXEN4 = u8_type;
539 C2TR45CONbits.TX4PRI = u8_priority;
542 C2TR45CONbits.TXEN5 = u8_type;
543 C2TR45CONbits.TX5PRI = u8_priority;
546 C2TR67CONbits.TXEN6 = u8_type;
547 C2TR67CONbits.TX6PRI = u8_priority;
550 C2TR67CONbits.TXEN7 = u8_type;
551 C2TR67CONbits.TX7PRI = u8_priority;
560 void startTxECAN2(
uint8_t u8_bufNum) {
564 C2TR01CONbits.TXREQ0 = 1;
567 C2TR01CONbits.TXREQ1 = 1;
570 C2TR23CONbits.TXREQ2 = 1;
573 C2TR23CONbits.TXREQ3 = 1;
576 C2TR45CONbits.TXREQ4 = 1;;
579 C2TR45CONbits.TXREQ5 = 1;
582 C2TR67CONbits.TXREQ6 = 1;
585 C2TR67CONbits.TXREQ7 = 1;
598 return(C2TR01CONbits.TXREQ0);
600 return(C2TR01CONbits.TXREQ1);
602 return(C2TR23CONbits.TXREQ2);
604 return(C2TR23CONbits.TXREQ3);
606 return(C2TR45CONbits.TXREQ4);
608 return(C2TR45CONbits.TXREQ5);
610 return(C2TR67CONbits.TXREQ6);
612 return(C2TR67CONbits.TXREQ7);
628 uint16_t *pu16_CxRXFySID,*pu16_CxRXFyEID, *pu16_CxFMSKSEL1, *pu16_CxBUFPNT1;
639 pu16_CxRXFySID = (
uint16_t*) &C2RXF0SID + (u8_filtNum << 1);
640 pu16_CxRXFyEID = pu16_CxRXFySID + 1;
641 pu16_CxFMSKSEL1 = (
uint16_t*) &C2FMSKSEL1 + (u8_filtNum >> 3);
642 pu16_CxBUFPNT1 = (
uint16_t*) &C2BUFPNT1 + (u8_filtNum >> 2);
648 u16_sid = (u32_id >> 18) & 0x7FF;
649 u16_eid17_16 = (u32_id >>16) & 0x3;
650 u16_eid15_0 = u32_id & 0xFFFF;
651 *pu16_CxRXFySID =(u16_sid <<5) | ECAN_MATCH_EID | u16_eid17_16;
652 *pu16_CxRXFyEID = u16_eid15_0;
654 u16_sid = u32_id & 0x7FF;
655 *pu16_CxRXFySID = u16_sid <<5;
660 u8_startPos = 4 * (u8_filtNum & 0x3);
661 u16_mask = ~ ( 0xF << u8_startPos);
662 *pu16_CxBUFPNT1 = (*pu16_CxBUFPNT1 & u16_mask) | (u8_bufnum << u8_startPos);
665 u8_startPos = 2 * (u8_filtNum & 0x7);
666 u16_mask = ~ ( 0x3 << u8_startPos);
667 *pu16_CxFMSKSEL1 = (*pu16_CxFMSKSEL1 & u16_mask) | (u8_maskReg << u8_startPos);
669 C2FEN1 = C2FEN1 | (1 << u8_filtNum) ;
686 uint16_t *pu16_CxRXMySID,*pu16_CxRXMyEID;
691 pu16_CxRXMySID =(
uint16_t*) &C2RXM0SID + (u8_maskNum << 1);
692 pu16_CxRXMyEID = pu16_CxRXMySID + 1;
698 u16_msid = (u32_idMask >> 18) & 0x7FF;
699 u16_meid17_16 = (u32_idMask >>16) & 0x3;
700 u16_meid15_0 = u32_idMask & 0xFFFF;
701 if (u8_matchType) *pu16_CxRXMySID =(u16_msid <<5) | ECAN_MATCH_EID | u16_meid17_16;
702 else *pu16_CxRXMySID =(u16_msid <<5) | u16_meid17_16;
703 *pu16_CxRXMyEID = u16_meid15_0;
705 u16_msid = u32_idMask & 0x7FF;
706 if (u8_matchType) *pu16_CxRXMySID = (u16_msid <<5) | ECAN_MATCH_EID ;
707 else *pu16_CxRXMySID = (u16_msid <<5);
713 #endif // #if (NUM_ECAN_MODS >= ${x})