Open Model Railroad Network (OpenMRN)
Loading...
Searching...
No Matches
MCAN.hxx
1
34#ifndef _FREERTOS_DRIVERS_COMMON_TCAN4550CAN_HXX_
35#define _FREERTOS_DRIVERS_COMMON_TCAN4550CAN_HXX_
36
37#include "Can.hxx"
38#include "DummyGPIO.hxx"
39#include "SPI.hxx"
40
41#include "os/Gpio.hxx"
42#include "os/OS.hxx"
43#include "utils/Atomic.hxx"
44
45#include "can_ioctl.h"
46
47#define TCAN4550_DEBUG 0
48
53class TCAN4550Can : public Can, public OSThread, private Atomic
54{
55public:
61 TCAN4550Can(const char *name,
62 void (*interrupt_enable)(), void (*interrupt_disable)(),
63#if TCAN4550_DEBUG
64 const Gpio *test_pin = DummyPinWithRead::instance()
65#else
66 const Gpio *test_pin = nullptr
67#endif
68 )
69 : Can(name, 0, 0)
70 , OSThread()
71 , interruptEnable_(interrupt_enable)
72 , interruptDisable_(interrupt_disable)
73 , spiFd_(-1)
74 , spi_(nullptr)
75 , sem_()
79 , txPending_(false)
80 , rxPending_(false)
81#if TCAN4550_DEBUG
82 , testPin_(test_pin)
83#endif
84 {
85#if TCAN4550_DEBUG
86 testPin_->set();
87#endif
88 }
89
92 {
93 }
94
101 void init(const char *spi_name, uint32_t freq, uint32_t baud,
102 uint16_t rx_timeout_bits);
103
105 __attribute__((optimize("-O3")))
107 {
108 int woken = false;
110 sem_.post_from_isr(&woken);
111 os_isr_exit_yield_test(woken);
112 }
113
118 {
119 return &lock_;
120 }
121
122private:
124 static constexpr uint32_t SPI_MAX_SPEED_HZ = 18000000;
125
127 static constexpr size_t MRAM_SIZE_WORDS = (2 * 1024) / 4;
128
129 // ---- Memory layout ----
130 //
131 // +-----------------------+
132 // | RX FIFO 0, buf 0 | 0x0000
133 // | ... |
134 // | RX FIFO 0, buf 63 | 0x03F0
135 // +-----------------------+
136 // | TX Event 0 (FIFO) | 0x0400
137 // | ... |
138 // | TX Event 15 (FIFO) | 0x047F
139 // +-----------------------+
140 // | TX Buf 0 | 0x0480
141 // | ... |
142 // | TX Buf 15 | 0x057F
143 // +-----------------------+
144 // | TX Buf 16 (FIFO) | 0x0580
145 // | ... |
146 // | TX Buf 31 (FIFO) | 0x067F
147 // +-----------------------+
148 // | Unused | 0x0680
149 // +-----------------------+
150
152 static constexpr uint32_t RX_FIFO_SIZE = 64;
153
155 static constexpr uint32_t TX_EVENT_FIFO_SIZE = 16;
156
158 static constexpr uint32_t TX_DEDICATED_BUFFER_COUNT = 16;
159
161 static constexpr uint32_t TX_FIFO_SIZE = 16;
162
164 static constexpr uint32_t TX_FIFO_BUFFERS_MASK = 0xFFFF0000;
165
167 static constexpr uint16_t RX_FIFO_0_MRAM_ADDR = 0x0000;
168
170 static constexpr uint16_t TX_EVENT_FIFO_MRAM_ADDR = 0x0400;
171
173 static constexpr uint16_t TX_BUFFERS_MRAM_ADDR = 0x0480;
174
176 static constexpr uint16_t TX_FIFO_BUFFERS_MRAM_ADDR = 0x0580;
177
179 static constexpr uint16_t MRAM_ADDR_OFFSET = 0x8000;
180
271
272 // Check alignment
273 static_assert(TXEFS * 4 == 0x10F4, "register enum misaligned");
274 static_assert(ILE * 4 == 0x105C, "register enum misaligned");
275 static_assert(MCAN_INTERRUPT_STATUS * 4 == 0x0824,
276 "register enum misaligned");
277
278 enum Command : uint8_t
279 {
280 WRITE = 0x61,
281 READ = 0x41,
282 };
283
285 struct Mode
286 {
289 : data(0xC8000468)
290 {
291 }
292
293 union
294 {
295 uint32_t data;
296 struct
297 {
298 uint32_t testModeConfig : 1;
299 uint32_t sweDis : 1;
300 uint32_t reset : 1;
301 uint32_t wdEnable : 1;
302 uint32_t reserved1 : 2;
303 uint32_t modeSel : 2;
304 uint32_t nWkrqConfig : 1;
305 uint32_t inhDisable : 1;
306 uint32_t gpio1GpoConfig : 2;
307 uint32_t reserved2 : 1;
308 uint32_t failSafeEnable : 1;
309 uint32_t gpio1Config : 2;
310 uint32_t wdAction : 2;
311 uint32_t wdBitSet : 1;
312 uint32_t nWkrqVoltage : 1;
313 uint32_t reserved3 : 1;
314 uint32_t testModeEn : 1;
315 uint32_t gpo2Config : 2;
316 uint32_t reserved4 : 3;
317 uint32_t clkRef : 1;
318 uint32_t wdTimer : 2;
319 uint32_t wakeConfig : 2;
320 };
321 };
322 };
323
325 struct Dbtp
326 {
333 Dbtp(uint32_t dsjw, uint32_t dtseg2, uint32_t dtseg1, uint32_t dbrp,
334 uint32_t tdc)
335 : dsjw(dsjw)
336 , dtseg2(dtseg2)
337 , dtseg1(dtseg1)
338 , dbrp(dbrp)
339 , tdc(tdc)
340 {
341 }
342
343 union
344 {
345 uint32_t data;
346 struct
347 {
348 uint32_t dsjw : 4;
349 uint32_t dtseg2 : 4;
350 uint32_t dtseg1 : 5;
351 uint32_t reserved1 : 3;
352 uint32_t dbrp : 5;
353 uint32_t reserved2 : 2;
354 uint32_t tdc : 1;
355 uint32_t reserved3 : 8;
356 };
357 };
358 };
359
361 struct Cccr
362 {
365 : data(0x00000001)
366 {
367 }
368
369 union
370 {
371 uint32_t data;
372 struct
373 {
374 uint32_t init : 1;
375 uint32_t cce : 1;
376 uint32_t asm_ : 1;
377 uint32_t csa : 1;
378 uint32_t csr : 1;
379 uint32_t mon : 1;
380 uint32_t dar : 1;
381 uint32_t test : 1;
382
383 uint32_t fdoe : 1;
384 uint32_t brse : 1;
385 uint32_t rsvd1 : 2;
386 uint32_t pxhd : 1;
387 uint32_t efbi : 1;
388 uint32_t txp : 1;
389 uint32_t niso : 1;
390
391 uint32_t rsvd2 : 16;
392 };
393 };
394 };
395
397 struct Nbtp
398 {
405 Nbtp(uint32_t sjw, uint32_t tseg2, uint32_t tseg1, uint32_t brp)
406 : ntseg2(tseg2)
407 , ntseg1(tseg1)
408 , nbrp(brp)
409 , nsjw(sjw)
410 {
411 }
412
413 union
414 {
415 uint32_t data;
416 struct
417 {
418 uint32_t ntseg2 : 7;
419 uint32_t rsvd1 : 1;
420 uint32_t ntseg1 : 8;
421 uint32_t nbrp : 9;
422 uint32_t nsjw : 7;
423 };
424 };
425 };
426
428 struct Tscc
429 {
432 : data(0x00000000)
433 {
434 }
435
436 union
437 {
438 uint32_t data;
439 struct
440 {
441 uint32_t tss : 2;
442 uint32_t rsvd1 : 14;
443
444 uint32_t tcp : 4;
445 uint32_t rsvd2 : 12;
446 };
447 };
448 };
449
451 struct Tscv
452 {
453 union
454 {
455 uint32_t data;
456 struct
457 {
458 uint32_t tsc : 16;
459 uint32_t rsvd : 16;
460 };
461 };
462 };
463
465 struct Tocc
466 {
469 : data(0xFFFF0000)
470 {
471 }
472
473 union
474 {
475 uint32_t data;
476 struct
477 {
478 uint32_t etoc : 1;
479 uint32_t tos : 2;
480 uint32_t rsvd1 : 5;
481
482 uint32_t rsvd2 : 8;
483
484 uint32_t top : 16;
485 };
486 };
487 };
488
490 struct Tocv
491 {
492 union
493 {
494 uint32_t data;
495 struct
496 {
497 uint32_t toc : 16;
498 uint32_t rsvd : 16;
499 };
500 };
501 };
502
504 struct Psr
505 {
506 union
507 {
508 uint32_t data;
509 struct
510 {
511 uint32_t lec : 3;
512 uint32_t act : 2;
513 uint32_t ep : 1;
514 uint32_t ew : 1;
515 uint32_t bo : 1;
516
517 uint32_t dlec : 3;
518 uint32_t resi : 1;
519 uint32_t rbrs : 1;
520 uint32_t rfdf : 1;
521 uint32_t pxe : 1;
522 uint32_t rsvd1 : 1;
523
524 uint32_t tdcv : 7;
525 uint32_t rsvd2 : 1;
526
527 uint32_t rsvd3 : 8;
528 };
529 };
530 };
531
533 struct Rxfxc
534 {
537 : data(0x00000000)
538 {
539 }
540
541 union
542 {
543 uint32_t data;
544 struct
545 {
546 uint32_t fsa : 16;
547
548 uint32_t fs : 7;
549 uint32_t rsvd : 1;
550
551 uint32_t fwm : 7;
552 uint32_t fom : 1;
553 };
554 };
555 };
556
558 struct Rxfxs
559 {
560 union
561 {
562 uint32_t data;
563 struct
564 {
565 uint32_t ffl : 7;
566 uint32_t rsvd1 : 1;
567
568 uint32_t fgi : 6;
569 uint32_t rsvd2 : 2;
570
571 uint32_t fpi : 6;
572 uint32_t rsvd3 : 2;
573
574 uint32_t ff : 1;
575 uint32_t rfl : 1;
576 uint32_t rsvd4 : 6;
577 };
578 };
579 };
580
582 struct Rxfxa
583 {
586 : data(0x00000000)
587 {
588 }
589
590 union
591 {
592 uint32_t data;
593 struct
594 {
595 uint32_t fai : 6;
596 uint32_t rsvd : 26;
597 };
598 };
599 };
600
602 struct Txbc
603 {
606 : data(0x00000000)
607 {
608 }
609
610 union
611 {
612 uint32_t data;
613 struct
614 {
615 uint32_t tbsa : 16;
616
617 uint32_t ndtb : 6;
618 uint32_t rsvd1 : 2;
619
620 uint32_t tfqs : 6;
621 uint32_t tfqm : 1;
622 uint32_t rsvd2 : 1;
623 };
624 };
625 };
626
628 struct Txfqs
629 {
630 union
631 {
632 uint32_t data;
633 struct
634 {
635 uint32_t tffl : 6;
636 uint32_t rsvd1 : 2;
637
638 uint32_t tfgi : 5;
639 uint32_t rsvd2 : 3;
640
641 uint32_t tfqpi : 5;
642 uint32_t tfqf : 1;
643 uint32_t rsvd3 : 2;
644
645 uint32_t rsvd4 : 8;
646 };
647 };
648 };
649
651 struct Txesc
652 {
655 : data(0x00000000)
656 {
657 }
658
659 union
660 {
661 uint32_t data;
662 struct
663 {
664 uint32_t tbds : 3;
665 uint32_t rsvd : 29;
666 };
667 };
668 };
669
671 struct Txefc
672 {
675 : data(0x00000000)
676 {
677 }
678
679 union
680 {
681 uint32_t data;
682 struct
683 {
684 uint32_t efsa : 16;
685
686 uint32_t efs : 6;
687 uint32_t rsvd1 : 2;
688
689 uint32_t efwm : 6;
690 uint32_t rsvd2 : 2;
691 };
692 };
693 };
694
696 struct Txefs
697 {
698 union
699 {
700 uint32_t data;
701 struct
702 {
703 uint32_t effl : 6;
704 uint32_t rsvd1 : 2;
705
706 uint32_t efgi : 5;
707 uint32_t rsvd2 : 3;
708
709 uint32_t efpi : 5;
710 uint32_t rsvd3 : 3;
711
712 uint32_t eff : 1;
713 uint32_t tefl : 1;
714 uint32_t rsvd4 : 6;
715 };
716 };
717 };
718
720 struct Txefa
721 {
724 : data(0x00000000)
725 {
726 }
727
728 union
729 {
730 uint32_t data;
731 struct
732 {
733 uint32_t efai : 5;
734 uint32_t rsvd : 27;
735 };
736 };
737 };
738
741 {
744 : data(0x00000000)
745 {
746 }
747
748 union
749 {
750 uint32_t data;
751 struct
752 {
753 uint32_t vtwd : 1;
754 uint32_t mcanint : 1;
755 uint32_t rsvd1 : 1;
756 uint32_t spierr : 1;
757 uint32_t rsvd2 : 1;
758 uint32_t canerr : 1;
759 uint32_t wkrq : 1;
760 uint32_t globalerr : 1;
761
762 uint32_t candom : 1;
763 uint32_t rsvd3 : 1;
764 uint32_t canslnt : 1;
765 uint32_t rsvd4 : 2;
766 uint32_t wkerr : 1;
767 uint32_t lwu : 1;
768 uint32_t canint : 1;
769
770 uint32_t eccerr : 1;
771 uint32_t rsvd5 : 1;
772 uint32_t wdto : 1;
773 uint32_t tsd : 1;
774 uint32_t pwron : 1;
775 uint32_t uvio : 1;
776 uint32_t uvsup : 1;
777 uint32_t sms : 1;
778
779 uint32_t rsvd6 : 7;
780 uint32_t canbusnom : 1;
781 };
782 };
783 };
784
787 {
790 : data(0x00000000)
791 {
792 }
793
794 union
795 {
796 uint32_t data;
797 struct
798 {
799 uint32_t rf0n : 1;
800 uint32_t rf0w : 1;
801 uint32_t rf0f : 1;
802 uint32_t rf0l : 1;
803 uint32_t rf1n : 1;
804 uint32_t rf1w : 1;
805 uint32_t rf1f : 1;
806 uint32_t rf1l : 1;
807
808 uint32_t hpm : 1;
809 uint32_t tc : 1;
810 uint32_t tcf : 1;
811 uint32_t tfe : 1;
812 uint32_t tefn : 1;
813 uint32_t tefw : 1;
814 uint32_t teff : 1;
815 uint32_t tefl : 1;
816
817 uint32_t tsw : 1;
818 uint32_t mraf : 1;
819 uint32_t too : 1;
820 uint32_t drx : 1;
821 uint32_t bec : 1;
822 uint32_t beu : 1;
823 uint32_t elo : 1;
824 uint32_t ep : 1;
825
826 uint32_t ew : 1;
827 uint32_t bo : 1;
828 uint32_t wdi : 1;
829 uint32_t pea : 1;
830 uint32_t ped : 1;
831 uint32_t ara : 1;
832 uint32_t rsvd : 2;
833 };
834 };
835 };
836
838 struct Ile
839 {
842 : data(0x00000000)
843 {
844 }
845
846 union
847 {
848 uint32_t data;
849 struct
850 {
851 uint32_t eint0 : 1;
852 uint32_t eint1 : 1;
853 uint32_t rsvd : 30;
854 };
855 };
856 };
857
860 {
861 uint32_t freq;
862 uint32_t baud;
864 };
865
868 {
869 union
870 {
871 uint64_t payload64;
872 uint32_t payload32[2];
873 uint8_t payload[8];
874 struct
875 {
876 uint8_t length;
877 uint8_t addrL;
878 uint8_t addrH;
879 union
880 {
881 uint8_t cmd;
882 uint8_t status;
883 };
884 uint32_t data;
885 };
886 };
887 };
888
891 {
892 union
893 {
894 uint32_t payload32;
895 uint8_t payload[4];
896 struct
897 {
898 uint8_t length;
899 uint8_t addrL;
900 uint8_t addrH;
901 union
902 {
903 uint8_t cmd;
904 uint8_t status;
905 };
906 };
907 };
908 };
909
912 {
913 uint32_t id : 29;
914 uint32_t rtr : 1;
915 uint32_t xtd : 1;
916 uint32_t esi : 1;
917
918 uint32_t rxts : 16;
919 uint32_t dlc : 4;
920 uint32_t brs : 1;
921 uint32_t fdf : 1;
922 uint32_t rsvd : 2;
923 uint32_t fidx : 7;
924 uint32_t anmf : 1;
925
926 union
927 {
928 uint64_t data64;
929 uint32_t data32[2];
930 uint16_t data16[4];
931 uint8_t data[8];
932 };
933 };
934
937 {
938 uint32_t id : 29;
939 uint32_t rtr : 1;
940 uint32_t xtd : 1;
941 uint32_t esi : 1;
942
943 uint32_t rsvd1 : 16;
944 uint32_t dlc : 4;
945 uint32_t brs : 1;
946 uint32_t fdf : 1;
947 uint32_t rsvd2 : 1;
948 uint32_t efc : 1;
949 uint32_t mm : 8;
950
951 union
952 {
953 uint64_t data64;
954 uint32_t data32[2];
955 uint16_t data16[4];
956 };
957 };
958
961 {
962 uint32_t id : 29;
963 uint32_t rtr : 1;
964 uint32_t xtd : 1;
965 uint32_t esi : 1;
966
967 uint32_t txts : 16;
968 uint32_t dlc : 4;
969 uint32_t brs : 1;
970 uint32_t fdf : 1;
971 uint32_t et : 2;
972 uint32_t mm : 8;
973 };
974
977 {
978 static_assert(sizeof(MRAMSPIMessage) == sizeof(uint32_t),
979 "unexpected MRAMSPIMessage size");
980
981 uint32_t padding;
984 };
985
987 void flush_buffers() override;
988
995 ssize_t read(File *file, void *buf, size_t count) override;
996
1003 ssize_t write(File *file, const void *buf, size_t count) override;
1004
1010 int ioctl(File *file, unsigned long int key, unsigned long data) override;
1011
1017 bool select(File* file, int mode) override;
1018
1021 void *entry() override;
1022
1023 void enable() override;
1024 void disable() override;
1025
1027 void tx_msg() override
1028 {
1029 // unused in this implementation
1030 }
1031
1035 __attribute__((optimize("-O3")))
1036 uint32_t register_read(Registers address)
1037 {
1038 SPIMessage msg;
1039 msg.cmd = READ;
1040 msg.addrH = address >> 6;
1041 msg.addrL = (address << 2) & 0xFF;
1042 msg.length = 1;
1043
1044 spi_ioc_transfer xfer;
1045 xfer.tx_buf = (unsigned long)(&msg);
1046 xfer.rx_buf = (unsigned long)(&msg);
1047 xfer.len = sizeof(msg);
1048
1050
1051#if TCAN4550_DEBUG
1052 HASSERT((msg.status & 0x8) == 0);
1053#endif
1054
1055 return msg.data;
1056 }
1057
1061 __attribute__((optimize("-O3")))
1062 void register_write(Registers address, uint32_t data)
1063 {
1064 SPIMessage msg;
1065 msg.cmd = WRITE;
1066 msg.addrH = address >> 6;
1067 msg.addrL = (address << 2) & 0xFF;
1068 msg.length = 1;
1069 msg.data = data;
1070
1071 spi_ioc_transfer xfer;
1072 xfer.tx_buf = (unsigned long)(&msg);
1073 xfer.rx_buf = (unsigned long)(&msg);
1074 xfer.len = sizeof(msg);
1075
1077#if TCAN4550_DEBUG
1078 HASSERT((msg.status & 0x8) == 0);
1079#endif
1080 }
1081
1086 __attribute__((optimize("-O3")))
1087 void rxbuf_read(uint16_t offset, MRAMRXBuffer *buf, size_t count)
1088 {
1089 uint16_t address = offset + MRAM_ADDR_OFFSET;
1090 SPIMessage msg;
1091 msg.cmd = READ;
1092 msg.addrH = address >> 8;
1093 msg.addrL = address & 0xFF;
1094 msg.length = count * (sizeof(MRAMRXBuffer) / 4);
1095
1096 spi_ioc_transfer xfer[2];
1097 xfer[0].tx_buf = (unsigned long)(&msg);
1098 xfer[0].rx_buf = (unsigned long)(&msg);
1099 xfer[0].len = 4; //sizeof(SPIMessage);
1100 xfer[1].tx_buf = (unsigned long)(nullptr);
1101 xfer[1].rx_buf = (unsigned long)(buf);
1102 xfer[1].len = count * sizeof(MRAMRXBuffer);
1103
1105#if TCAN4550_DEBUG
1106 HASSERT((msg.status & 0x8) == 0);
1107#endif
1108 }
1109
1114 __attribute__((optimize("-O3")))
1115 void txbuf_write(uint16_t offset, MRAMTXBufferMultiWrite *buf, size_t count)
1116 {
1117 static_assert(sizeof(MRAMTXBuffer) == 16,
1118 "Unexpected MRAMTXBuffer size");
1119
1120 uint16_t address = offset + MRAM_ADDR_OFFSET;
1121 buf->header.cmd = WRITE;
1122 buf->header.addrH = address >> 8;
1123 buf->header.addrL = address & 0xFF;
1124 buf->header.length = count * (sizeof(MRAMTXBuffer) / 4);
1125
1126 spi_ioc_transfer xfer;
1127 xfer.tx_buf = (unsigned long)&buf->header;
1128 xfer.rx_buf = (unsigned long)&buf->header;
1129 xfer.len = sizeof(buf->header) + (count * sizeof(MRAMTXBuffer));
1130
1132#if TCAN4550_DEBUG
1133 HASSERT((buf->header.status & 0x8) == 0);
1134#endif
1135 }
1136
1144 uint8_t state_;
1145
1146 // These bitmasks are protected from a read-modify-write race condition
1147 // because they are only set from a thread context that holds the SPI bus
1148 // mutex.
1149 uint8_t txPending_ : 1;
1150 uint8_t rxPending_ : 1;
1151
1154 MRAMTXBufferMultiWrite txBufferMultiWrite_ __attribute__((aligned(8)));
1155#if TCAN4550_DEBUG
1156 volatile uint32_t regs_[64];
1157 volatile uint32_t status_;
1158 volatile uint32_t enable_;
1159 volatile uint32_t spiStatus_;
1160 const Gpio *testPin_;
1161#endif
1162
1164 static const TCAN4550Baud BAUD_TABLE[];
1165
1168
1170};
1171
1172#endif // _FREERTOS_DRIVERS_COMMON_TCAN4550CAN_HXX_
1173
Lightweight locking class for protecting small critical sections.
Definition Atomic.hxx:130
Base class for a CAN device for the Arduino environment.
const char * name
device name
Definition Devtab.hxx:266
OS-independent abstraction for GPIO.
Definition Gpio.hxx:43
OSMutex lock_
protects internal structures.
Definition Devtab.hxx:588
This class provides a mutex API.
Definition OS.hxx:427
This class provides a counting semaphore API.
Definition OS.hxx:243
This class provides a threading API.
Definition OS.hxx:46
Private data for an SPI device.
Definition SPI.hxx:53
int transfer_with_cs_assert_polled(struct spi_ioc_transfer *msgs, int num=1)
Method to transmit/receive the data.
Definition SPI.hxx:80
Specification of CAN driver for the TCAN4550.
Definition MCAN.hxx:54
static constexpr uint32_t TX_FIFO_SIZE
size in elements for the TX FIFO
Definition MCAN.hxx:161
static constexpr uint16_t TX_BUFFERS_MRAM_ADDR
start address of TX BUFFERS in MRAM
Definition MCAN.hxx:173
void disable() override
function to disable device
Definition MCAN.cxx:282
void * entry() override
User entry point for the created thread.
Definition MCAN.cxx:639
MCANInterrupt mcanInterruptEnable_
shadow for the interrupt enable
Definition MCAN.hxx:1142
bool select(File *file, int mode) override
Device select method.
Definition MCAN.cxx:584
@ WRITE
write one or more addresses
Definition MCAN.hxx:280
@ READ
read one or more addresses
Definition MCAN.hxx:281
static constexpr uint32_t TX_DEDICATED_BUFFER_COUNT
size in elements for the dedicated TX buffers
Definition MCAN.hxx:158
static constexpr uint16_t RX_FIFO_0_MRAM_ADDR
start address of RX FIFO 0 in MRAM
Definition MCAN.hxx:167
uint32_t register_read(Registers address)
Read from a SPI register.
Definition MCAN.hxx:1036
void init(const char *spi_name, uint32_t freq, uint32_t baud, uint16_t rx_timeout_bits)
Initialize CAN device settings.
Definition MCAN.cxx:89
int spiFd_
SPI bus that accesses TCAN4550.
Definition MCAN.hxx:1139
int ioctl(File *file, unsigned long int key, unsigned long data) override
Request an ioctl transaction.
Definition MCAN.cxx:625
Registers
SPI Registers, word addressing, not byte addressing.
Definition MCAN.hxx:185
@ TXFQS
0xC4 0xC4 TX FIFO/queue status
Definition MCAN.hxx:253
@ RXF0C
0xA0 -— RX FIFO 0 configuration
Definition MCAN.hxx:244
@ RSVD15
0xE8 -— reserved
Definition MCAN.hxx:262
@ NBTP
nominal bit timing and prescaler
Definition MCAN.hxx:208
@ INTERRUPT_STATUS
interrupt and diagnostic flags
Definition MCAN.hxx:196
@ RXESC
0xBC -— RX buffer/FIFO element size configuration
Definition MCAN.hxx:251
@ RSVD4
reserved
Definition MCAN.hxx:216
@ TXBCIE
0xE4 0xE0 TX buffer cancellation finished interrupt enable
Definition MCAN.hxx:261
@ TXEFS
0xF4 0xE4 TX event FIFO status
Definition MCAN.hxx:265
@ RSVD6
reserved
Definition MCAN.hxx:225
@ DBTP
data bit timing and prescaler
Definition MCAN.hxx:204
@ TXBAR
0xD0 0xCC TX buffer add request
Definition MCAN.hxx:256
@ RSVD8
reserved
Definition MCAN.hxx:227
@ RSVD3
reserved
Definition MCAN.hxx:215
@ RXF0S
0xA4 0x90 RX FIFO 0 status
Definition MCAN.hxx:245
@ ECC
ECC error detection and testing.
Definition MCAN.hxx:194
@ NDAT1
0x98 -— new data 1
Definition MCAN.hxx:242
@ TXBTO
0xD8 0xD4 TX buffer transmission occurred
Definition MCAN.hxx:258
@ ENDN
endianess
Definition MCAN.hxx:202
@ TXESC
0xC8 -— TX buffer element size configuration
Definition MCAN.hxx:254
@ TXEFC
0xF0 -— TX event FIFO configuration
Definition MCAN.hxx:264
@ RXF0A
0xA8 0x94 RX FIFO 0 Acknowledge
Definition MCAN.hxx:246
@ RSVD2
reserved
Definition MCAN.hxx:214
@ RXBC
0xAC -— RX buffer configuration
Definition MCAN.hxx:247
@ RXF1S
0xB4 0x98 RX FIFO 1 status
Definition MCAN.hxx:249
@ ILE
interrupt line enable
Definition MCAN.hxx:224
@ HPMS
0x94 0x88 high prioirty message status
Definition MCAN.hxx:241
@ RXF1A
0xB8 0x9C RX FIFO 1 acknowledge
Definition MCAN.hxx:250
@ RSVD14
0x8C -— reserved
Definition MCAN.hxx:239
@ MCAN_INTERRUPT_STATUS
interrupt flags related to MCAN core
Definition MCAN.hxx:197
@ IE
interrupt enable
Definition MCAN.hxx:222
@ RWD
RAM watchdog.
Definition MCAN.hxx:206
@ SIDFC
0x84 -— standard ID filter configuration
Definition MCAN.hxx:237
@ DEVICE_IDL
device ID "TCAN"
Definition MCAN.hxx:186
@ RXF1C
0xB0 -— RX FIFO 1 configuration
Definition MCAN.hxx:248
@ CUST
customer
Definition MCAN.hxx:203
@ RSVD17
reserved
Definition MCAN.hxx:267
@ RSVD1
reserved
Definition MCAN.hxx:213
@ RSVD16
0xEC -— reserved
Definition MCAN.hxx:263
@ IR
interrupt status
Definition MCAN.hxx:221
@ TXEFA
0xF8 0xE8 TX event FIFO acknowledge
Definition MCAN.hxx:266
@ GFC
0x80 0x80 global filter configuration
Definition MCAN.hxx:236
@ CREL
core release
Definition MCAN.hxx:201
@ TXBC
0xC0 0xC0 TX buffer configuration
Definition MCAN.hxx:252
@ TXBRP
0xCC 0xC8 TX buffer request pending
Definition MCAN.hxx:255
@ PSR
protocol status
Definition MCAN.hxx:218
@ RSVD12
reserved
Definition MCAN.hxx:231
@ INTERRUPT_ENABLE
interrupt and diagnostic flags
Definition MCAN.hxx:199
@ RSVD9
reserved
Definition MCAN.hxx:228
@ MODE
modes of operation and pin configurations
Definition MCAN.hxx:191
@ RSVD13
reserved
Definition MCAN.hxx:232
@ CCCR
CC control.
Definition MCAN.hxx:207
@ TEST2
test
Definition MCAN.hxx:205
@ TOCV
timeout counter value
Definition MCAN.hxx:212
@ DEVICE_IDH
device ID "4550"
Definition MCAN.hxx:187
@ RSVD10
reserved
Definition MCAN.hxx:229
@ REVISION
silicon revision
Definition MCAN.hxx:188
@ ECR
error count
Definition MCAN.hxx:217
@ TIMESTAMP_PRESCALER
timestamp presacaler
Definition MCAN.hxx:192
@ RSVD11
reserved
Definition MCAN.hxx:230
@ XIDAM
0x90 0x84 extended ID and mask
Definition MCAN.hxx:240
@ TDCR
transmitter delay compensation
Definition MCAN.hxx:219
@ TXBTIE
0xE0 0xDC TX buffer transmission interrupt enable
Definition MCAN.hxx:260
@ RSVD7
reserved
Definition MCAN.hxx:226
@ TXBCF
0xDC 0xD8 TX buffer cancellation finished
Definition MCAN.hxx:259
@ TEST
read and write test registers, scratchpad
Definition MCAN.hxx:193
@ STATUS
status
Definition MCAN.hxx:189
@ RSVD5
reserved
Definition MCAN.hxx:220
@ TXBCR
0xD4 0xD0 TX buffer cancellation request
Definition MCAN.hxx:257
@ TSCC
timestamp counter configuration
Definition MCAN.hxx:209
@ MRAM
MRAM offset.
Definition MCAN.hxx:269
@ TOCC
timeout counter configuration
Definition MCAN.hxx:211
@ TSCV
timestamp counter value
Definition MCAN.hxx:210
@ XIDFC
0x88 -— extended ID filter configuration
Definition MCAN.hxx:238
@ ILS
interrupt line select
Definition MCAN.hxx:223
@ NDAT2
0x9C -— new data 2
Definition MCAN.hxx:243
static constexpr uint32_t RX_FIFO_SIZE
size in elements for the RX FIFO
Definition MCAN.hxx:152
void txbuf_write(uint16_t offset, MRAMTXBufferMultiWrite *buf, size_t count)
Write one or more TX buffers.
Definition MCAN.hxx:1115
ssize_t write(File *file, const void *buf, size_t count) override
Write to a file or device.
Definition MCAN.cxx:449
static constexpr size_t MRAM_SIZE_WORDS
size in words of the MRAM memory
Definition MCAN.hxx:127
TCAN4550Can(const char *name, void(*interrupt_enable)(), void(*interrupt_disable)(), const Gpio *test_pin=nullptr)
Constructor.
Definition MCAN.hxx:61
void tx_msg() override
Function to try and transmit a message.
Definition MCAN.hxx:1027
void(* interruptEnable_)()
enable interrupt callback
Definition MCAN.hxx:1137
static constexpr uint16_t TX_EVENT_FIFO_MRAM_ADDR
start address of TX Event FIFO in MRAM
Definition MCAN.hxx:170
void register_write(Registers address, uint32_t data)
Write to a SPI register.
Definition MCAN.hxx:1062
~TCAN4550Can()
Destructor.
Definition MCAN.hxx:91
SPI * spi_
pointer to a SPI object instance
Definition MCAN.hxx:1140
ssize_t read(File *file, void *buf, size_t count) override
Read from a file or device.
Definition MCAN.cxx:345
static constexpr uint32_t TX_FIFO_BUFFERS_MASK
mask of all the TX buffers used in the TX FIFO
Definition MCAN.hxx:164
void enable() override
function to enable device
Definition MCAN.cxx:225
uint8_t txPending_
waiting on a TX active event
Definition MCAN.hxx:1149
void rxbuf_read(uint16_t offset, MRAMRXBuffer *buf, size_t count)
Read one or more RX buffers.
Definition MCAN.hxx:1087
static constexpr uint32_t SPI_MAX_SPEED_HZ
maximum SPI clock speed in Hz
Definition MCAN.hxx:124
void interrupt_handler()
Handle an interrupt. Called by user provided interrupt handler.
Definition MCAN.hxx:106
OSSem sem_
semaphore for posting events
Definition MCAN.hxx:1141
void flush_buffers() override
Called after disable.
Definition MCAN.cxx:313
MRAMTXBufferMultiWrite txBufferMultiWrite_
Allocating this buffer here avoids having to put it on the TCAN4550Can::write() caller's stack.
Definition MCAN.hxx:1154
static constexpr uint16_t MRAM_ADDR_OFFSET
Offset of the MRAM address over SPI.
Definition MCAN.hxx:179
TCAN4550Can()
Default Constructor.
uint8_t state_
present bus state
Definition MCAN.hxx:1144
uint8_t rxPending_
waiting on a RX active event
Definition MCAN.hxx:1150
static constexpr uint16_t TX_FIFO_BUFFERS_MRAM_ADDR
start address of TX FIFO in MRAM
Definition MCAN.hxx:176
uint32_t txCompleteMask_
shadow for the transmit complete buffer mask
Definition MCAN.hxx:1143
static const TCAN4550Baud BAUD_TABLE[]
baud rate settings table
Definition MCAN.hxx:45
OSMutex * get_spi_bus_lock()
Return a mutex that can be used by another SPI driver instance sharing the same bus as its bus lock.
Definition MCAN.hxx:117
void(* interruptDisable_)()
disable interrupt callback
Definition MCAN.hxx:1138
static constexpr uint32_t TX_EVENT_FIFO_SIZE
size in elements for the TX event FIFO
Definition MCAN.hxx:155
#define CAN_STATE_STOPPED
CAN bus stopped.
#define HASSERT(x)
Checks that the value of expression x is true, else terminates the current process.
Definition macros.h:138
#define DISALLOW_COPY_AND_ASSIGN(TypeName)
Removes default copy-constructor and assignment added by C++.
Definition macros.h:171
static constexpr const Gpio * instance()
Definition DummyGPIO.hxx:97
File information.
Definition Devtab.hxx:52
CC control register definition.
Definition MCAN.hxx:362
uint32_t txp
transmitter pause
Definition MCAN.hxx:388
uint32_t brse
bit rate switch enable
Definition MCAN.hxx:384
uint32_t efbi
edge filtering during bus integration
Definition MCAN.hxx:387
uint32_t test
test mode enable
Definition MCAN.hxx:381
uint32_t rsvd1
reserved
Definition MCAN.hxx:385
uint32_t asm_
restricted operation mode
Definition MCAN.hxx:376
uint32_t data
raw word value
Definition MCAN.hxx:371
uint32_t rsvd2
reserved
Definition MCAN.hxx:391
uint32_t fdoe
FD operation enable.
Definition MCAN.hxx:383
uint32_t csa
clock stop acknowledge
Definition MCAN.hxx:377
uint32_t cce
configuration change enable
Definition MCAN.hxx:375
Cccr()
Constructor. Sets the reset value.
Definition MCAN.hxx:364
uint32_t dar
disable automatic retransmission
Definition MCAN.hxx:380
uint32_t niso
non ISO operation
Definition MCAN.hxx:389
uint32_t mon
bus monitorying mode is disabled
Definition MCAN.hxx:379
uint32_t csr
clock stop request
Definition MCAN.hxx:378
uint32_t pxhd
protocol exception handling disable
Definition MCAN.hxx:386
uint32_t init
initialzation
Definition MCAN.hxx:374
Data bit timing and prescaler register definition.
Definition MCAN.hxx:326
uint32_t reserved1
reserved
Definition MCAN.hxx:351
uint32_t dtseg1
data time segment after sample
Definition MCAN.hxx:350
uint32_t reserved2
reserved
Definition MCAN.hxx:353
uint32_t data
raw word value
Definition MCAN.hxx:345
uint32_t reserved3
reserved
Definition MCAN.hxx:355
uint32_t tdc
trasmitter delay compensation
Definition MCAN.hxx:354
uint32_t dbrp
data bit rate prescaler
Definition MCAN.hxx:352
uint32_t dsjw
data (re)synchronization jump width
Definition MCAN.hxx:348
uint32_t dtseg2
data time segment before sample
Definition MCAN.hxx:349
Dbtp(uint32_t dsjw, uint32_t dtseg2, uint32_t dtseg1, uint32_t dbrp, uint32_t tdc)
Constructor.
Definition MCAN.hxx:333
MCAN interrupt line enable register definition.
Definition MCAN.hxx:839
uint32_t rsvd
reserved
Definition MCAN.hxx:853
Ile()
Constructor. Sets the reset value.
Definition MCAN.hxx:841
uint32_t eint1
enable interrupt line 1
Definition MCAN.hxx:852
uint32_t eint0
enable interrupt line 0
Definition MCAN.hxx:851
uint32_t data
raw word value
Definition MCAN.hxx:848
TCAN4550 interrupt registers (INTERRUPT_ENABLE/STATUS)
Definition MCAN.hxx:741
uint32_t wdto
watchdog timeout
Definition MCAN.hxx:772
uint32_t tsd
thermal shutdown
Definition MCAN.hxx:773
uint32_t canerr
CAN eror.
Definition MCAN.hxx:758
uint32_t sms
sleep mode status
Definition MCAN.hxx:777
uint32_t canslnt
CAN silent.
Definition MCAN.hxx:764
uint32_t spierr
SPI error.
Definition MCAN.hxx:756
uint32_t globalerr
global error (any fault)
Definition MCAN.hxx:760
uint32_t pwron
power on
Definition MCAN.hxx:774
Interrupt()
Constructor. Sets the reset value.
Definition MCAN.hxx:743
uint32_t wkrq
wake request
Definition MCAN.hxx:759
uint32_t mcanint
M_CAN global interrupt.
Definition MCAN.hxx:754
uint32_t canint
CAN bus wake up interrupt.
Definition MCAN.hxx:768
uint32_t data
raw word value
Definition MCAN.hxx:750
uint32_t rsvd2
reserved
Definition MCAN.hxx:757
uint32_t lwu
local wake up
Definition MCAN.hxx:767
uint32_t eccerr
uncorrectable ECC error detected
Definition MCAN.hxx:770
uint32_t wkerr
wake error
Definition MCAN.hxx:766
uint32_t vtwd
global voltage, temp or wdto
Definition MCAN.hxx:753
uint32_t rsvd4
reserved
Definition MCAN.hxx:765
uint32_t uvsup
under voltage VSUP and UVCCOUT
Definition MCAN.hxx:776
uint32_t candom
CAN stuck dominant.
Definition MCAN.hxx:762
uint32_t rsvd3
reserved
Definition MCAN.hxx:763
uint32_t rsvd5
reserved
Definition MCAN.hxx:771
uint32_t uvio
under voltage VIO
Definition MCAN.hxx:775
uint32_t rsvd1
reserved
Definition MCAN.hxx:755
uint32_t canbusnom
CAN bus normal.
Definition MCAN.hxx:780
uint32_t rsvd6
reserved
Definition MCAN.hxx:779
MCAN interrupt registers (IR, IE, and ILS) definition.
Definition MCAN.hxx:787
uint32_t rf1l
RX FIFO 1 message lost.
Definition MCAN.hxx:806
uint32_t tcf
transmission cancellation finished
Definition MCAN.hxx:810
uint32_t rsvd
reserved
Definition MCAN.hxx:832
uint32_t bec
bit error corrected
Definition MCAN.hxx:821
uint32_t teff
TX event FIFO full.
Definition MCAN.hxx:814
uint32_t tefw
TX event FIFO watermark reached.
Definition MCAN.hxx:813
uint32_t mraf
message RAM access failure
Definition MCAN.hxx:818
uint32_t rf1f
RX FIFO 1 full.
Definition MCAN.hxx:805
uint32_t rf1n
RX FIFO 1 new message.
Definition MCAN.hxx:803
uint32_t rf0f
RX FIFO 0 full.
Definition MCAN.hxx:801
uint32_t ped
protocol error in data phase
Definition MCAN.hxx:830
uint32_t tefn
TX event FIFO new entry.
Definition MCAN.hxx:812
uint32_t rf1w
RX FIFO 1 watermark reached.
Definition MCAN.hxx:804
uint32_t tefl
TX event FIFO event lost.
Definition MCAN.hxx:815
uint32_t wdi
watchdog
Definition MCAN.hxx:828
uint32_t tfe
TX FIFO empty.
Definition MCAN.hxx:811
uint32_t drx
message stored to dedicated RX buffer
Definition MCAN.hxx:820
uint32_t beu
bit error uncorrected
Definition MCAN.hxx:822
uint32_t tc
transmission completed
Definition MCAN.hxx:809
uint32_t hpm
high priority message
Definition MCAN.hxx:808
uint32_t too
timeout occurred
Definition MCAN.hxx:819
uint32_t rf0l
RX FIFO 0 message lost.
Definition MCAN.hxx:802
uint32_t elo
error logging overflow
Definition MCAN.hxx:823
uint32_t ara
access to reserved address
Definition MCAN.hxx:831
uint32_t rf0w
RX FIFO 0 watermark reached.
Definition MCAN.hxx:800
uint32_t ep
error passive
Definition MCAN.hxx:824
uint32_t rf0n
RX FIFO 0 new message.
Definition MCAN.hxx:799
uint32_t pea
protocol error in arbitration phase
Definition MCAN.hxx:829
MCANInterrupt()
Constructor. Sets the reset value.
Definition MCAN.hxx:789
uint32_t data
raw word value
Definition MCAN.hxx:796
uint32_t bo
bus-off status
Definition MCAN.hxx:827
uint32_t tsw
timestamp wraparound
Definition MCAN.hxx:817
uint32_t ew
warning status
Definition MCAN.hxx:826
RX Buffer structure.
Definition MCAN.hxx:912
uint64_t data64
data payload (64-bit)
Definition MCAN.hxx:928
uint16_t data16[4]
data payload (0 - 3 half word)
Definition MCAN.hxx:930
uint8_t data[8]
data payload (0 - 8 byte)
Definition MCAN.hxx:931
uint32_t brs
bit rate switch
Definition MCAN.hxx:920
uint32_t xtd
extended identifier
Definition MCAN.hxx:915
uint32_t id
CAN identifier.
Definition MCAN.hxx:913
uint32_t esi
error state indicator
Definition MCAN.hxx:916
uint32_t fidx
filter index that message mached if ANMF = 0
Definition MCAN.hxx:923
uint32_t rsvd
reserved
Definition MCAN.hxx:922
uint32_t anmf
accepted non-matching frame of filter element
Definition MCAN.hxx:924
uint32_t dlc
data length code
Definition MCAN.hxx:919
uint32_t fdf
FD format.
Definition MCAN.hxx:921
uint32_t rxts
receive timestamp
Definition MCAN.hxx:918
uint32_t rtr
remote transmission request
Definition MCAN.hxx:914
uint32_t data32[2]
data payload (0 - 1 word)
Definition MCAN.hxx:929
MRAM SPI message for read/write commands.
Definition MCAN.hxx:891
uint8_t addrL
register address LSB
Definition MCAN.hxx:899
uint8_t payload[4]
raw payload
Definition MCAN.hxx:895
uint32_t payload32
raw paylaod as 32-bit value
Definition MCAN.hxx:894
uint8_t length
length in words
Definition MCAN.hxx:898
uint8_t addrH
register address MSB
Definition MCAN.hxx:900
uint8_t status
bits 0..7 of INTERRUPT_STATUS
Definition MCAN.hxx:904
Structure for writing multiple TX buffers in one SPI transaction.
Definition MCAN.hxx:977
MRAMTXBuffer txBuffers[TX_FIFO_SIZE]
buffer payload
Definition MCAN.hxx:983
uint32_t padding
padding for 8-byte alignment
Definition MCAN.hxx:981
MRAMSPIMessage header
message header
Definition MCAN.hxx:982
TX Buffer structure.
Definition MCAN.hxx:937
uint32_t mm
message marker
Definition MCAN.hxx:949
uint64_t data64
data payload 64-bit
Definition MCAN.hxx:953
uint32_t rsvd1
reserved
Definition MCAN.hxx:943
uint32_t efc
event FIFO control
Definition MCAN.hxx:948
uint16_t data16[4]
data payload (0 - 3 half word)
Definition MCAN.hxx:955
uint32_t data32[2]
data payload (0 - 1 word)
Definition MCAN.hxx:954
uint32_t brs
bit rate switch
Definition MCAN.hxx:945
uint32_t rsvd2
reserved
Definition MCAN.hxx:947
uint32_t id
CAN identifier.
Definition MCAN.hxx:938
uint32_t fdf
FD format.
Definition MCAN.hxx:946
uint32_t dlc
data length code
Definition MCAN.hxx:944
uint32_t esi
error state indicator
Definition MCAN.hxx:941
uint32_t xtd
extended identifier
Definition MCAN.hxx:940
uint32_t rtr
remote transmission request
Definition MCAN.hxx:939
TX Event FIFO Element structure.
Definition MCAN.hxx:961
uint32_t esi
error state indicator
Definition MCAN.hxx:965
uint32_t brs
bit rate switch
Definition MCAN.hxx:969
uint32_t mm
message marker
Definition MCAN.hxx:972
uint32_t txts
transmit timestamp
Definition MCAN.hxx:967
uint32_t id
CAN identifier.
Definition MCAN.hxx:962
uint32_t dlc
data length code
Definition MCAN.hxx:968
uint32_t xtd
extended identifier
Definition MCAN.hxx:964
uint32_t rtr
remote transmission request
Definition MCAN.hxx:963
Mode register definition.
Definition MCAN.hxx:286
Mode()
Constructor. Sets the reset value.
Definition MCAN.hxx:288
uint32_t reserved1
reserved
Definition MCAN.hxx:302
uint32_t gpio1GpoConfig
GPIO1 output function select.
Definition MCAN.hxx:306
uint32_t nWkrqConfig
nWKRQ pin function
Definition MCAN.hxx:304
uint32_t wdBitSet
write a '1' to reset timer
Definition MCAN.hxx:311
uint32_t wdEnable
watchdog enable
Definition MCAN.hxx:301
uint32_t inhDisable
INH pin disable.
Definition MCAN.hxx:305
uint32_t reserved2
reserved
Definition MCAN.hxx:307
uint32_t sweDis
sleep wake error disable
Definition MCAN.hxx:299
uint32_t testModeEn
test mode enable
Definition MCAN.hxx:314
uint32_t data
raw word value
Definition MCAN.hxx:295
uint32_t wakeConfig
Wake pin configuration.
Definition MCAN.hxx:319
uint32_t modeSel
mode of operation select
Definition MCAN.hxx:303
uint32_t testModeConfig
test mode configuration
Definition MCAN.hxx:298
uint32_t clkRef
CLKIN/crystal freq reference.
Definition MCAN.hxx:317
uint32_t reset
device reset
Definition MCAN.hxx:300
uint32_t wdTimer
watchdog timer
Definition MCAN.hxx:318
uint32_t gpio1Config
GPIO1 pin function select.
Definition MCAN.hxx:309
uint32_t nWkrqVoltage
nWKRQ pin GPO buffer voltage
Definition MCAN.hxx:312
uint32_t wdAction
selected watchdog action
Definition MCAN.hxx:310
uint32_t reserved3
reserved
Definition MCAN.hxx:313
uint32_t gpo2Config
GPO2 pin configuration.
Definition MCAN.hxx:315
uint32_t failSafeEnable
fail safe mode enable
Definition MCAN.hxx:308
uint32_t reserved4
reserved
Definition MCAN.hxx:316
Nominal bit timing & prescaler register definition.
Definition MCAN.hxx:398
uint32_t rsvd1
reserved
Definition MCAN.hxx:419
Nbtp(uint32_t sjw, uint32_t tseg2, uint32_t tseg1, uint32_t brp)
Constructor.
Definition MCAN.hxx:405
uint32_t ntseg1
time segment after sample
Definition MCAN.hxx:420
uint32_t data
raw word value
Definition MCAN.hxx:415
uint32_t nbrp
bit rate prescaler
Definition MCAN.hxx:421
uint32_t nsjw
re-synchronization jump width
Definition MCAN.hxx:422
uint32_t ntseg2
time segment before sample
Definition MCAN.hxx:418
Protocol status register definition.
Definition MCAN.hxx:505
uint32_t dlec
data phase last error code
Definition MCAN.hxx:517
uint32_t ew
warning status
Definition MCAN.hxx:514
uint32_t rsvd1
reserved
Definition MCAN.hxx:522
uint32_t lec
last error code
Definition MCAN.hxx:511
uint32_t data
raw word value
Definition MCAN.hxx:508
uint32_t ep
error passive
Definition MCAN.hxx:513
uint32_t rbrs
BRS of last received CAN FD message.
Definition MCAN.hxx:519
uint32_t rsvd3
reserved
Definition MCAN.hxx:527
uint32_t pxe
protocol exception event
Definition MCAN.hxx:521
uint32_t bo
bus-off status
Definition MCAN.hxx:515
uint32_t resi
ESI of last received CAN FD message.
Definition MCAN.hxx:518
uint32_t rfdf
received a CAN FD message
Definition MCAN.hxx:520
uint32_t rsvd2
reserved
Definition MCAN.hxx:525
uint32_t act
activity
Definition MCAN.hxx:512
uint32_t tdcv
transmitter delauy compenation value
Definition MCAN.hxx:524
RX FIFO x acknowledge register definition.
Definition MCAN.hxx:583
uint32_t rsvd
reserved
Definition MCAN.hxx:596
Rxfxa()
Constructor. Sets the reset value.
Definition MCAN.hxx:585
uint32_t fai
RX FIFO acknowledge index.
Definition MCAN.hxx:595
uint32_t data
raw word value
Definition MCAN.hxx:592
RX FIFO x configuraation register definition.
Definition MCAN.hxx:534
Rxfxc()
Constructor. Sets the reset value.
Definition MCAN.hxx:536
uint32_t fsa
RX FIFO start address.
Definition MCAN.hxx:546
uint32_t fom
RX FIFO operation mode.
Definition MCAN.hxx:552
uint32_t fwm
RX FIFO high water mark.
Definition MCAN.hxx:551
uint32_t fs
RX FIFO size.
Definition MCAN.hxx:548
uint32_t data
raw word value
Definition MCAN.hxx:543
uint32_t rsvd
reserved
Definition MCAN.hxx:549
RX FIFO x status register definition.
Definition MCAN.hxx:559
uint32_t data
raw word value
Definition MCAN.hxx:562
uint32_t rsvd4
reserved
Definition MCAN.hxx:576
uint32_t fgi
RX FIFO get index.
Definition MCAN.hxx:568
uint32_t rfl
RX FIFO message lost.
Definition MCAN.hxx:575
uint32_t rsvd2
reserved
Definition MCAN.hxx:569
uint32_t fpi
RX FIFO put index.
Definition MCAN.hxx:571
uint32_t ffl
RX FIFO fill level.
Definition MCAN.hxx:565
uint32_t ff
RX FIFO full.
Definition MCAN.hxx:574
uint32_t rsvd1
reserved
Definition MCAN.hxx:566
SPI message for read/write commands.
Definition MCAN.hxx:868
uint32_t data
data word
Definition MCAN.hxx:884
uint8_t addrH
register address MSB
Definition MCAN.hxx:878
uint8_t addrL
register address LSB
Definition MCAN.hxx:877
uint64_t payload64
raw payload as 64-bit value
Definition MCAN.hxx:871
uint8_t payload[8]
raw payload
Definition MCAN.hxx:873
uint32_t payload32[2]
raw paylaod as 32-bit array
Definition MCAN.hxx:872
uint8_t status
bits 0..7 of INTERRUPT_STATUS
Definition MCAN.hxx:882
uint8_t length
length in words
Definition MCAN.hxx:876
uint8_t cmd
command
Definition MCAN.hxx:881
Buad rate table entry.
Definition MCAN.hxx:860
uint32_t freq
incoming frequency
Definition MCAN.hxx:861
uint32_t baud
target baud rate
Definition MCAN.hxx:862
Nbtp nbtp
data bit timing and prescaler
Definition MCAN.hxx:863
Timeout counter configuration register definition.
Definition MCAN.hxx:466
uint32_t etoc
enable timeout counter
Definition MCAN.hxx:478
uint32_t top
timeout period
Definition MCAN.hxx:484
Tocc()
Constructor. Sets the reset value.
Definition MCAN.hxx:468
uint32_t data
raw word value
Definition MCAN.hxx:475
uint32_t rsvd1
reserved
Definition MCAN.hxx:480
uint32_t tos
timeout select
Definition MCAN.hxx:479
uint32_t rsvd2
reserved
Definition MCAN.hxx:482
Timeout counter value register definition.
Definition MCAN.hxx:491
uint32_t data
raw word value
Definition MCAN.hxx:494
uint32_t rsvd
reserved
Definition MCAN.hxx:498
uint32_t toc
timeout counter
Definition MCAN.hxx:497
Timestamp counter configuration register definition.
Definition MCAN.hxx:429
uint32_t rsvd1
reserved
Definition MCAN.hxx:442
Tscc()
Constructor. Sets the reset value.
Definition MCAN.hxx:431
uint32_t data
raw word value
Definition MCAN.hxx:438
uint32_t rsvd2
reserved
Definition MCAN.hxx:445
uint32_t tss
timestamp select
Definition MCAN.hxx:441
uint32_t tcp
timestamp counter prescaler
Definition MCAN.hxx:444
Timestamp counter value register definition.
Definition MCAN.hxx:452
uint32_t tsc
timestamp counter
Definition MCAN.hxx:458
uint32_t rsvd
reserved
Definition MCAN.hxx:459
uint32_t data
raw word value
Definition MCAN.hxx:455
TX Buffer configuraation register definition.
Definition MCAN.hxx:603
uint32_t tfqs
TX FIFO/queue size.
Definition MCAN.hxx:620
uint32_t data
raw word value
Definition MCAN.hxx:612
uint32_t rsvd2
reserved
Definition MCAN.hxx:622
Txbc()
Constructor. Sets the reset value.
Definition MCAN.hxx:605
uint32_t rsvd1
reserved
Definition MCAN.hxx:618
uint32_t ndtb
number of dediated transmit buffers
Definition MCAN.hxx:617
uint32_t tbsa
TX buffers start address.
Definition MCAN.hxx:615
uint32_t tfqm
TX FIFO/queue mode.
Definition MCAN.hxx:621
TX event FIFO acknowledge register definition.
Definition MCAN.hxx:721
uint32_t data
raw word value
Definition MCAN.hxx:730
uint32_t rsvd
reserved
Definition MCAN.hxx:734
uint32_t efai
TX event FIFO acknowledge index.
Definition MCAN.hxx:733
Txefa()
Constructor. Sets the reset value.
Definition MCAN.hxx:723
TX event FIFO configuration register definition.
Definition MCAN.hxx:672
uint32_t rsvd1
reserved
Definition MCAN.hxx:687
uint32_t rsvd2
reserved
Definition MCAN.hxx:690
uint32_t efsa
event FIFO start address
Definition MCAN.hxx:684
uint32_t efwm
event FIFO watermark
Definition MCAN.hxx:689
Txefc()
Constructor. Sets the reset value.
Definition MCAN.hxx:674
uint32_t efs
event FIFO size
Definition MCAN.hxx:686
uint32_t data
raw word value
Definition MCAN.hxx:681
TX event FIFO status register definition.
Definition MCAN.hxx:697
uint32_t data
raw word value
Definition MCAN.hxx:700
uint32_t rsvd3
reserved
Definition MCAN.hxx:710
uint32_t efpi
event FIFO put index
Definition MCAN.hxx:709
uint32_t rsvd2
reserved
Definition MCAN.hxx:707
uint32_t efgi
event FIFO get index
Definition MCAN.hxx:706
uint32_t rsvd4
reserved
Definition MCAN.hxx:714
uint32_t tefl
TX event FIFO element lost.
Definition MCAN.hxx:713
uint32_t effl
event FIFO fill level
Definition MCAN.hxx:703
uint32_t eff
event FIFO full
Definition MCAN.hxx:712
uint32_t rsvd1
reserved
Definition MCAN.hxx:704
TX buffer element size configurataion register definition.
Definition MCAN.hxx:652
uint32_t tbds
TX buffer data field size.
Definition MCAN.hxx:664
uint32_t rsvd
reserved
Definition MCAN.hxx:665
uint32_t data
raw word value
Definition MCAN.hxx:661
Txesc()
Constructor. Sets the reset value.
Definition MCAN.hxx:654
TX FIFO/queue status register definition.
Definition MCAN.hxx:629
uint32_t rsvd2
reserved
Definition MCAN.hxx:639
uint32_t tfgi
TX FIFO/queue get index.
Definition MCAN.hxx:638
uint32_t rsvd3
reserved
Definition MCAN.hxx:643
uint32_t rsvd1
reserved
Definition MCAN.hxx:636
uint32_t tfqpi
TX FIFO/queue put index.
Definition MCAN.hxx:641
uint32_t data
raw word value
Definition MCAN.hxx:632
uint32_t rsvd4
reserved
Definition MCAN.hxx:645
uint32_t tfqf
TX FIFO/queue full.
Definition MCAN.hxx:642
uint32_t tffl
TX FIFO free level.
Definition MCAN.hxx:635