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)