38 #if (NUM_ECAN_MODS >= 1)    48 #ifndef ECAN_1TIME_HEADER_DEFS    50 #define ECAN_MODE_NORMAL 0    51 #define ECAN_MODE_DISABLED 1    52 #define ECAN_MODE_LOOPBACK 2    53 #define ECAN_MODE_LISTEN_ONLY 3    54 #define ECAN_MODE_CONFIGURE 4    55 #define ECAN_LISTEN_ALL_MESSAGES 7    81 #if defined(__dsPIC33EP512GP806__)    83 #define ECAN_FCAN_IS_2FP 0          // FCAN is equal to 2 * FP    84 #define ECAN_FCAN_IS_FP 1          // FCAN is equal to FP    86 #elif defined(__dsPIC33E__)    88 # define ECAN_FCAN_IS_2FP 1         // FCAN is equal to 2 * FP    89 # define ECAN_FCAN_IS_FP  0         // FCAN is equal to FP    94 #define ECAN_NO_WAKEUP 0x4000    95 #define ECAN_SEG2PH_8TQ (0x0007 << 8)    96 #define ECAN_SEG2PH_7TQ (0x0006 << 8)    97 #define ECAN_SEG2PH_6TQ (0x0005 << 8)    98 #define ECAN_SEG2PH_5TQ (0x0004 << 8)    99 #define ECAN_SEG2PH_4TQ (0x0003 << 8)   100 #define ECAN_SEG2PH_3TQ (0x0002 << 8)   101 #define ECAN_SEG2PH_2TQ (0x0001 << 8)   102 #define ECAN_SEG2PH_1TQ (0x0000 << 8)   104 #define ECAN_SEG2_PROGRAMMABLE 0x0080   105 #define ECAN_SEG2_FIXED        0x0000   107 #define ECAN_SAMPLE_3TIMES 0x0040   108 #define ECAN_SAMPLE_1TIMES 0x0000   110 #define ECAN_SEG1PH_8TQ (0x0007 << 3)   111 #define ECAN_SEG1PH_7TQ (0x0006 << 3)   112 #define ECAN_SEG1PH_6TQ (0x0005 << 3)   113 #define ECAN_SEG1PH_5TQ (0x0004 << 3)   114 #define ECAN_SEG1PH_4TQ (0x0003 << 3)   115 #define ECAN_SEG1PH_3TQ (0x0002 << 3)   116 #define ECAN_SEG1PH_2TQ (0x0001 << 3)   117 #define ECAN_SEG1PH_1TQ (0x0000 << 3)   119 #define ECAN_PRSEG_8TQ 0x0007   120 #define ECAN_PRSEG_7TQ 0x0006   121 #define ECAN_PRSEG_6TQ 0x0005   122 #define ECAN_PRSEG_5TQ 0x0004   123 #define ECAN_PRSEG_4TQ 0x0003   124 #define ECAN_PRSEG_3TQ 0x0002   125 #define ECAN_PRSEG_2TQ 0x0001   126 #define ECAN_PRSEG_1TQ 0x0000   129 #define ECAN_SYNC_JUMP_4   (0x0003 << 6)   130 #define ECAN_SYNC_JUMP_3   (0x0002 << 6)   131 #define ECAN_SYNC_JUMP_2   (0x0001 << 6)   132 #define ECAN_SYNC_JUMP_1   (0x0000 << 6)   134 #define ECAN_PRE_2x64 0x003f   135 #define ECAN_PRE_2x63 0x003e   136 #define ECAN_PRE_2x62 0x003d   137 #define ECAN_PRE_2x61 0x003c   138 #define ECAN_PRE_2x60 0x003b   139 #define ECAN_PRE_2x59 0x003a   140 #define ECAN_PRE_2x58 0x0039   141 #define ECAN_PRE_2x57 0x0038   142 #define ECAN_PRE_2x56 0x0037   143 #define ECAN_PRE_2x55 0x0036   144 #define ECAN_PRE_2x54 0x0035   145 #define ECAN_PRE_2x53 0x0034   146 #define ECAN_PRE_2x52 0x0033   147 #define ECAN_PRE_2x51 0x0032   148 #define ECAN_PRE_2x50 0x0031   149 #define ECAN_PRE_2x49 0x0030   150 #define ECAN_PRE_2x48 0x002f   151 #define ECAN_PRE_2x47 0x002e   152 #define ECAN_PRE_2x46 0x002d   153 #define ECAN_PRE_2x45 0x002c   154 #define ECAN_PRE_2x44 0x002b   155 #define ECAN_PRE_2x43 0x002a   156 #define ECAN_PRE_2x42 0x0029   157 #define ECAN_PRE_2x41 0x0028   158 #define ECAN_PRE_2x40 0x0027   159 #define ECAN_PRE_2x39 0x0026   160 #define ECAN_PRE_2x38 0x0025   161 #define ECAN_PRE_2x37 0x0024   162 #define ECAN_PRE_2x36 0x0023   163 #define ECAN_PRE_2x35 0x0022   164 #define ECAN_PRE_2x34 0x0021   165 #define ECAN_PRE_2x33 0x0020   166 #define ECAN_PRE_2x32 0x001f   167 #define ECAN_PRE_2x31 0x001e   168 #define ECAN_PRE_2x30 0x001d   169 #define ECAN_PRE_2x29 0x001c   170 #define ECAN_PRE_2x28 0x001b   171 #define ECAN_PRE_2x27 0x001a   172 #define ECAN_PRE_2x26 0x0019   173 #define ECAN_PRE_2x25 0x0018   174 #define ECAN_PRE_2x24 0x0017   175 #define ECAN_PRE_2x23 0x0016   176 #define ECAN_PRE_2x22 0x0015   177 #define ECAN_PRE_2x21 0x0014   178 #define ECAN_PRE_2x20 0x0013   179 #define ECAN_PRE_2x19 0x0012   180 #define ECAN_PRE_2x18 0x0011   181 #define ECAN_PRE_2x17 0x0010   182 #define ECAN_PRE_2x16 0x000f   183 #define ECAN_PRE_2x15 0x000e   184 #define ECAN_PRE_2x14 0x000d   185 #define ECAN_PRE_2x13 0x000c   186 #define ECAN_PRE_2x12 0x000b   187 #define ECAN_PRE_2x11 0x000a   188 #define ECAN_PRE_2x10 0x0009   189 #define ECAN_PRE_2x9 0x0008   190 #define ECAN_PRE_2x8 0x0007   191 #define ECAN_PRE_2x7 0x0006   192 #define ECAN_PRE_2x6 0x0005   193 #define ECAN_PRE_2x5 0x0004   194 #define ECAN_PRE_2x4 0x0003   195 #define ECAN_PRE_2x3 0x0002   196 #define ECAN_PRE_2x2 0x0001   197 #define ECAN_PRE_2x1 0x0000   200 #define ECAN_DMA_BUF_SIZE_32 (0x0006 << 13)   201 #define ECAN_DMA_BUF_SIZE_24 (0x0005 << 13)   202 #define ECAN_DMA_BUF_SIZE_16 (0x0004 << 13)   203 #define ECAN_DMA_BUF_SIZE_12 (0x0003 << 13)   204 #define ECAN_DMA_BUF_SIZE_8 (0x0002 << 13)   205 #define ECAN_DMA_BUF_SIZE_6 (0x0001 << 13)   206 #define ECAN_DMA_BUF_SIZE_4 (0x0000 << 13)   209 #define ECAN_FIFO_START_AREA_31 31   210 #define ECAN_FIFO_START_AREA_30 30   211 #define ECAN_FIFO_START_AREA_29 29   212 #define ECAN_FIFO_START_AREA_28 28   213 #define ECAN_FIFO_START_AREA_27 27   214 #define ECAN_FIFO_START_AREA_26 26   215 #define ECAN_FIFO_START_AREA_25 25   216 #define ECAN_FIFO_START_AREA_24 24   217 #define ECAN_FIFO_START_AREA_23 23   218 #define ECAN_FIFO_START_AREA_22 22   219 #define ECAN_FIFO_START_AREA_21 21   220 #define ECAN_FIFO_START_AREA_20 20   221 #define ECAN_FIFO_START_AREA_19 19   222 #define ECAN_FIFO_START_AREA_18 18   223 #define ECAN_FIFO_START_AREA_17 17   224 #define ECAN_FIFO_START_AREA_16 16   225 #define ECAN_FIFO_START_AREA_15 15   226 #define ECAN_FIFO_START_AREA_14 14   227 #define ECAN_FIFO_START_AREA_13 13   228 #define ECAN_FIFO_START_AREA_12 12   229 #define ECAN_FIFO_START_AREA_11 11   230 #define ECAN_FIFO_START_AREA_10 10   231 #define ECAN_FIFO_START_AREA_9 9   232 #define ECAN_FIFO_START_AREA_8 8   233 #define ECAN_FIFO_START_AREA_7 7   234 #define ECAN_FIFO_START_AREA_6 6   235 #define ECAN_FIFO_START_AREA_5 5   236 #define ECAN_FIFO_START_AREA_4 4   237 #define ECAN_FIFO_START_AREA_3 3   238 #define ECAN_FIFO_START_AREA_2 2   239 #define ECAN_FIFO_START_AREA_1 1   240 #define ECAN_FIFO_START_AREA_0 0   243 #define ECAN_MATCH_EID   0x0008   244 #define ECAN_MATCH_SID   0x0000   246 #define ECAN_USE_FIFO   0xF   249 #define ECAN_RX_BUFF 0   250 #define ECAN_TX_BUFF 1   254 typedef struct _ECANW0 {
   259 typedef struct _ECANW1 {
   260   unsigned EID17_6: 12;
   263 typedef struct _ECANW2 {
   272 typedef struct _ECANW7 {
   280 typedef struct _ECANMSG {
   292 #if defined(__dsPIC33EP512GP806__)   306 #define ECAN_1TIME_HEADER_DEFS   314 inline static void CHANGE_MODE_ECAN1(uint16_t u16_mode) {
   315   C1CTRL1bits.REQOP = u16_mode;
   316   while(C1CTRL1bits.OPMODE != u16_mode);
   321 #define GET_FIFO_READBUFFER_ECAN1() (C1FIFO & 0x1F)   336 #endif // #if (NUM_ECAN_MODS >= 1)   381 #if (NUM_ECAN_MODS >= 2)   391 #ifndef ECAN_1TIME_HEADER_DEFS   393 #define ECAN_MODE_NORMAL 0   394 #define ECAN_MODE_DISABLED 1   395 #define ECAN_MODE_LOOPBACK 2   396 #define ECAN_MODE_LISTEN_ONLY 3   397 #define ECAN_MODE_CONFIGURE 4   398 #define ECAN_LISTEN_ALL_MESSAGES 7   424 #if defined(__dsPIC33EP512GP806__)   426 #define ECAN_FCAN_IS_2FP 0          // FCAN is equal to 2 * FP   427 #define ECAN_FCAN_IS_FP 1          // FCAN is equal to FP   429 #elif defined(__dsPIC33E__)   431 # define ECAN_FCAN_IS_2FP 1         // FCAN is equal to 2 * FP   432 # define ECAN_FCAN_IS_FP  0         // FCAN is equal to FP   437 #define ECAN_NO_WAKEUP 0x4000   438 #define ECAN_SEG2PH_8TQ (0x0007 << 8)   439 #define ECAN_SEG2PH_7TQ (0x0006 << 8)   440 #define ECAN_SEG2PH_6TQ (0x0005 << 8)   441 #define ECAN_SEG2PH_5TQ (0x0004 << 8)   442 #define ECAN_SEG2PH_4TQ (0x0003 << 8)   443 #define ECAN_SEG2PH_3TQ (0x0002 << 8)   444 #define ECAN_SEG2PH_2TQ (0x0001 << 8)   445 #define ECAN_SEG2PH_1TQ (0x0000 << 8)   447 #define ECAN_SEG2_PROGRAMMABLE 0x0080   448 #define ECAN_SEG2_FIXED        0x0000   450 #define ECAN_SAMPLE_3TIMES 0x0040   451 #define ECAN_SAMPLE_1TIMES 0x0000   453 #define ECAN_SEG1PH_8TQ (0x0007 << 3)   454 #define ECAN_SEG1PH_7TQ (0x0006 << 3)   455 #define ECAN_SEG1PH_6TQ (0x0005 << 3)   456 #define ECAN_SEG1PH_5TQ (0x0004 << 3)   457 #define ECAN_SEG1PH_4TQ (0x0003 << 3)   458 #define ECAN_SEG1PH_3TQ (0x0002 << 3)   459 #define ECAN_SEG1PH_2TQ (0x0001 << 3)   460 #define ECAN_SEG1PH_1TQ (0x0000 << 3)   462 #define ECAN_PRSEG_8TQ 0x0007   463 #define ECAN_PRSEG_7TQ 0x0006   464 #define ECAN_PRSEG_6TQ 0x0005   465 #define ECAN_PRSEG_5TQ 0x0004   466 #define ECAN_PRSEG_4TQ 0x0003   467 #define ECAN_PRSEG_3TQ 0x0002   468 #define ECAN_PRSEG_2TQ 0x0001   469 #define ECAN_PRSEG_1TQ 0x0000   472 #define ECAN_SYNC_JUMP_4   (0x0003 << 6)   473 #define ECAN_SYNC_JUMP_3   (0x0002 << 6)   474 #define ECAN_SYNC_JUMP_2   (0x0001 << 6)   475 #define ECAN_SYNC_JUMP_1   (0x0000 << 6)   477 #define ECAN_PRE_2x64 0x003f   478 #define ECAN_PRE_2x63 0x003e   479 #define ECAN_PRE_2x62 0x003d   480 #define ECAN_PRE_2x61 0x003c   481 #define ECAN_PRE_2x60 0x003b   482 #define ECAN_PRE_2x59 0x003a   483 #define ECAN_PRE_2x58 0x0039   484 #define ECAN_PRE_2x57 0x0038   485 #define ECAN_PRE_2x56 0x0037   486 #define ECAN_PRE_2x55 0x0036   487 #define ECAN_PRE_2x54 0x0035   488 #define ECAN_PRE_2x53 0x0034   489 #define ECAN_PRE_2x52 0x0033   490 #define ECAN_PRE_2x51 0x0032   491 #define ECAN_PRE_2x50 0x0031   492 #define ECAN_PRE_2x49 0x0030   493 #define ECAN_PRE_2x48 0x002f   494 #define ECAN_PRE_2x47 0x002e   495 #define ECAN_PRE_2x46 0x002d   496 #define ECAN_PRE_2x45 0x002c   497 #define ECAN_PRE_2x44 0x002b   498 #define ECAN_PRE_2x43 0x002a   499 #define ECAN_PRE_2x42 0x0029   500 #define ECAN_PRE_2x41 0x0028   501 #define ECAN_PRE_2x40 0x0027   502 #define ECAN_PRE_2x39 0x0026   503 #define ECAN_PRE_2x38 0x0025   504 #define ECAN_PRE_2x37 0x0024   505 #define ECAN_PRE_2x36 0x0023   506 #define ECAN_PRE_2x35 0x0022   507 #define ECAN_PRE_2x34 0x0021   508 #define ECAN_PRE_2x33 0x0020   509 #define ECAN_PRE_2x32 0x001f   510 #define ECAN_PRE_2x31 0x001e   511 #define ECAN_PRE_2x30 0x001d   512 #define ECAN_PRE_2x29 0x001c   513 #define ECAN_PRE_2x28 0x001b   514 #define ECAN_PRE_2x27 0x001a   515 #define ECAN_PRE_2x26 0x0019   516 #define ECAN_PRE_2x25 0x0018   517 #define ECAN_PRE_2x24 0x0017   518 #define ECAN_PRE_2x23 0x0016   519 #define ECAN_PRE_2x22 0x0015   520 #define ECAN_PRE_2x21 0x0014   521 #define ECAN_PRE_2x20 0x0013   522 #define ECAN_PRE_2x19 0x0012   523 #define ECAN_PRE_2x18 0x0011   524 #define ECAN_PRE_2x17 0x0010   525 #define ECAN_PRE_2x16 0x000f   526 #define ECAN_PRE_2x15 0x000e   527 #define ECAN_PRE_2x14 0x000d   528 #define ECAN_PRE_2x13 0x000c   529 #define ECAN_PRE_2x12 0x000b   530 #define ECAN_PRE_2x11 0x000a   531 #define ECAN_PRE_2x10 0x0009   532 #define ECAN_PRE_2x9 0x0008   533 #define ECAN_PRE_2x8 0x0007   534 #define ECAN_PRE_2x7 0x0006   535 #define ECAN_PRE_2x6 0x0005   536 #define ECAN_PRE_2x5 0x0004   537 #define ECAN_PRE_2x4 0x0003   538 #define ECAN_PRE_2x3 0x0002   539 #define ECAN_PRE_2x2 0x0001   540 #define ECAN_PRE_2x1 0x0000   543 #define ECAN_DMA_BUF_SIZE_32 (0x0006 << 13)   544 #define ECAN_DMA_BUF_SIZE_24 (0x0005 << 13)   545 #define ECAN_DMA_BUF_SIZE_16 (0x0004 << 13)   546 #define ECAN_DMA_BUF_SIZE_12 (0x0003 << 13)   547 #define ECAN_DMA_BUF_SIZE_8 (0x0002 << 13)   548 #define ECAN_DMA_BUF_SIZE_6 (0x0001 << 13)   549 #define ECAN_DMA_BUF_SIZE_4 (0x0000 << 13)   552 #define ECAN_FIFO_START_AREA_31 31   553 #define ECAN_FIFO_START_AREA_30 30   554 #define ECAN_FIFO_START_AREA_29 29   555 #define ECAN_FIFO_START_AREA_28 28   556 #define ECAN_FIFO_START_AREA_27 27   557 #define ECAN_FIFO_START_AREA_26 26   558 #define ECAN_FIFO_START_AREA_25 25   559 #define ECAN_FIFO_START_AREA_24 24   560 #define ECAN_FIFO_START_AREA_23 23   561 #define ECAN_FIFO_START_AREA_22 22   562 #define ECAN_FIFO_START_AREA_21 21   563 #define ECAN_FIFO_START_AREA_20 20   564 #define ECAN_FIFO_START_AREA_19 19   565 #define ECAN_FIFO_START_AREA_18 18   566 #define ECAN_FIFO_START_AREA_17 17   567 #define ECAN_FIFO_START_AREA_16 16   568 #define ECAN_FIFO_START_AREA_15 15   569 #define ECAN_FIFO_START_AREA_14 14   570 #define ECAN_FIFO_START_AREA_13 13   571 #define ECAN_FIFO_START_AREA_12 12   572 #define ECAN_FIFO_START_AREA_11 11   573 #define ECAN_FIFO_START_AREA_10 10   574 #define ECAN_FIFO_START_AREA_9 9   575 #define ECAN_FIFO_START_AREA_8 8   576 #define ECAN_FIFO_START_AREA_7 7   577 #define ECAN_FIFO_START_AREA_6 6   578 #define ECAN_FIFO_START_AREA_5 5   579 #define ECAN_FIFO_START_AREA_4 4   580 #define ECAN_FIFO_START_AREA_3 3   581 #define ECAN_FIFO_START_AREA_2 2   582 #define ECAN_FIFO_START_AREA_1 1   583 #define ECAN_FIFO_START_AREA_0 0   586 #define ECAN_MATCH_EID   0x0008   587 #define ECAN_MATCH_SID   0x0000   589 #define ECAN_USE_FIFO   0xF   592 #define ECAN_RX_BUFF 0   593 #define ECAN_TX_BUFF 1   597 typedef struct _ECANW0 {
   602 typedef struct _ECANW1 {
   603   unsigned EID17_6: 12;
   606 typedef struct _ECANW2 {
   615 typedef struct _ECANW7 {
   623 typedef struct _ECANMSG {
   635 #if defined(__dsPIC33EP512GP806__)   649 #define ECAN_1TIME_HEADER_DEFS   657 inline static void CHANGE_MODE_ECAN2(uint16_t u16_mode) {
   658   C2CTRL1bits.REQOP = u16_mode;
   659   while(C2CTRL1bits.OPMODE != u16_mode);
   664 #define GET_FIFO_READBUFFER_ECAN2() (C2FIFO & 0x1F)   666 void configBaudECAN2(
void);
   667 void clrRxFullFlagECAN2(
uint8_t u8_bufNum);
   669 void clrRxFullOvfFlagsECAN2(
void);
   672 void configRxMaskECAN2(
uint8_t u8_maskNum, uint32_t u32_idMask, 
uint8_t u8_idType, 
uint8_t u8_matchType);
   673 void startTxECAN2(
uint8_t u8_bufNum);
   679 #endif // #if (NUM_ECAN_MODS >= 2) 
uint8_t getRxFullFlagECAN1(uint8_t u8_bufNum)
void formatExtendedDataFrameECAN(ECANMSG *p_ecanmsg, uint32_t u32_id, uint8_t u8_len)
void clrRxFullOvfFlagsECAN1(void)
uint8_t getTxInProgressECAN1(uint8_t u8_bufNum)
void clrRxFullFlagECAN1(uint8_t u8_bufNum)
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)
uint32_t getIdExtendedDataFrameECAN(ECANMSG *p_ecanmsg)
Configures the system clock. 
void formatStandardDataFrameECAN(ECANMSG *p_ecanmsg, uint16_t u16_id, uint8_t u8_len)
A union type for byte, word, or dword access for 64 bit values. 
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)