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)