Open Model Railroad Network (OpenMRN)
Loading...
Searching...
No Matches
TCAN4550Can.hxx
Go to the documentation of this file.
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
184 enum Registers : uint16_t
185 {
186 DEVICE_IDL = 0x0,
187 DEVICE_IDH,
188 REVISION,
189 STATUS,
190
191 MODE = 0x200,
193 TEST,
194 ECC,
195
196 INTERRUPT_STATUS = 0x208,
198
199 INTERRUPT_ENABLE = 0x20C,
200
201 CREL = 0x400,
202 ENDN,
203 CUST,
204 DBTP,
205 TEST2,
206 RWD,
207 CCCR,
208 NBTP,
209 TSCC,
210 TSCV,
211 TOCC,
212 TOCV,
213 RSVD1,
214 RSVD2,
215 RSVD3,
216 RSVD4,
217 ECR,
218 PSR,
219 TDCR,
220 RSVD5,
221 IR,
222 IE,
223 ILS,
224 ILE,
225 RSVD6,
226 RSVD7,
227 RSVD8,
228 RSVD9,
229 RSVD10,
230 RSVD11,
231 RSVD12,
232 RSVD13,
233 // From here on the register offsets differ between
234 // implementations:
235 // TCAN STM32 < register offset
236 GFC,
237 SIDFC,
238 XIDFC,
239 RSVD14,
240 XIDAM,
241 HPMS,
242 NDAT1,
243 NDAT2,
244 RXF0C,
245 RXF0S,
246 RXF0A,
247 RXBC,
248 RXF1C,
249 RXF1S,
250 RXF1A,
251 RXESC,
252 TXBC,
253 TXFQS,
254 TXESC,
255 TXBRP,
256 TXBAR,
257 TXBCR,
258 TXBTO,
259 TXBCF,
260 TXBTIE,
261 TXBCIE,
262 RSVD15,
263 RSVD16,
264 TXEFC,
265 TXEFS,
266 TXEFA,
267 RSVD17,
268
269 MRAM = 0x2000,
270 };
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
740 struct Interrupt
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
786 struct MCANInterrupt
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
859 struct TCAN4550Baud
860 {
861 uint32_t freq;
862 uint32_t baud;
863 Nbtp nbtp;
864 };
865
867 struct SPIMessage
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
890 struct MRAMSPIMessage
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
911 struct MRAMRXBuffer
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
936 struct MRAMTXBuffer
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
960 struct MRAMTXEventFIFOElement
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
976 struct MRAMTXBufferMultiWrite
977 {
978 static_assert(sizeof(MRAMSPIMessage) == sizeof(uint32_t),
979 "unexpected MRAMSPIMessage size");
980
981 uint32_t padding;
982 MRAMSPIMessage header;
983 MRAMTXBuffer txBuffers[TX_FIFO_SIZE];
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
1137 void (*interruptEnable_)();
1138 void (*interruptDisable_)();
1139 int spiFd_;
1140 SPI *spi_;
1141 OSSem sem_;
1142 MCANInterrupt mcanInterruptEnable_;
1143 uint32_t txCompleteMask_;
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
void * entry() override
User entry point for the created thread.
MCANInterrupt mcanInterruptEnable_
shadow for the interrupt enable
Definition MCAN.hxx:1142
bool select(File *file, int mode) override
Device select method.
@ 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.
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.
Registers
SPI Registers, word addressing, not byte addressing.
@ 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.
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.
void tx_msg() override
Function to try and transmit a message.
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.
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.
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
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.
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.
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
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.
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
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.
uint32_t rsvd
reserved
Definition MCAN.hxx:853
Ile()
Constructor. Sets the reset value.
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
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.
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
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.
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
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
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()
Constructor. Sets the reset value.
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
uint32_t rsvd1
reserved
Definition MCAN.hxx:419
Nbtp(uint32_t sjw, uint32_t tseg2, uint32_t tseg1, uint32_t brp)
Constructor.
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
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
uint32_t rsvd
reserved
Definition MCAN.hxx:596
Rxfxa()
Constructor. Sets the reset value.
uint32_t fai
RX FIFO acknowledge index.
Definition MCAN.hxx:595
uint32_t data
raw word value
Definition MCAN.hxx:592
Rxfxc()
Constructor. Sets the reset value.
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
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
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
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.
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
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
uint32_t rsvd1
reserved
Definition MCAN.hxx:442
Tscc()
Constructor. Sets the reset value.
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
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
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.
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
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.
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.
uint32_t efs
event FIFO size
Definition MCAN.hxx:686
uint32_t data
raw word value
Definition MCAN.hxx:681
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
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.
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