123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330 |
- #pragma once
- #include "AP_HAL_ChibiOS.h"
- #if HAL_WITH_UAVCAN
- # if !defined(STM32H7XX)
- #include <uavcan/uavcan.hpp>
- #include <stdint.h>
- #ifndef UAVCAN_CPP_VERSION
- # error UAVCAN_CPP_VERSION
- #endif
- #if UAVCAN_CPP_VERSION < UAVCAN_CPP11
- # define constexpr const
- #endif
- namespace ChibiOS_CAN
- {
- namespace bxcan
- {
- struct TxMailboxType
- {
- volatile uint32_t TIR;
- volatile uint32_t TDTR;
- volatile uint32_t TDLR;
- volatile uint32_t TDHR;
- };
- struct RxMailboxType
- {
- volatile uint32_t RIR;
- volatile uint32_t RDTR;
- volatile uint32_t RDLR;
- volatile uint32_t RDHR;
- };
- struct FilterRegisterType
- {
- volatile uint32_t FR1;
- volatile uint32_t FR2;
- };
- struct CanType
- {
- volatile uint32_t MCR;
- volatile uint32_t MSR;
- volatile uint32_t TSR;
- volatile uint32_t RF0R;
- volatile uint32_t RF1R;
- volatile uint32_t IER;
- volatile uint32_t ESR;
- volatile uint32_t BTR;
- uint32_t RESERVED0[88];
- TxMailboxType TxMailbox[3];
- RxMailboxType RxMailbox[2];
- uint32_t RESERVED1[12];
- volatile uint32_t FMR;
- volatile uint32_t FM1R;
- uint32_t RESERVED2;
- volatile uint32_t FS1R;
- uint32_t RESERVED3;
- volatile uint32_t FFA1R;
- uint32_t RESERVED4;
- volatile uint32_t FA1R;
- uint32_t RESERVED5[8];
- FilterRegisterType FilterRegister[28];
- };
- CanType* const Can[UAVCAN_STM32_NUM_IFACES] =
- {
- reinterpret_cast<CanType*>(0x40006400)
- #if UAVCAN_STM32_NUM_IFACES > 1
- ,
- reinterpret_cast<CanType*>(0x40006800)
- #endif
- };
- constexpr unsigned long MCR_INRQ = (1U << 0);
- constexpr unsigned long MCR_SLEEP = (1U << 1);
- constexpr unsigned long MCR_TXFP = (1U << 2);
- constexpr unsigned long MCR_RFLM = (1U << 3);
- constexpr unsigned long MCR_NART = (1U << 4);
- constexpr unsigned long MCR_AWUM = (1U << 5);
- constexpr unsigned long MCR_ABOM = (1U << 6);
- constexpr unsigned long MCR_TTCM = (1U << 7);
- constexpr unsigned long MCR_RESET = (1U << 15);
- constexpr unsigned long MCR_DBF = (1U << 16);
- constexpr unsigned long MSR_INAK = (1U << 0);
- constexpr unsigned long MSR_SLAK = (1U << 1);
- constexpr unsigned long MSR_ERRI = (1U << 2);
- constexpr unsigned long MSR_WKUI = (1U << 3);
- constexpr unsigned long MSR_SLAKI = (1U << 4);
- constexpr unsigned long MSR_TXM = (1U << 8);
- constexpr unsigned long MSR_RXM = (1U << 9);
- constexpr unsigned long MSR_SAMP = (1U << 10);
- constexpr unsigned long MSR_RX = (1U << 11);
- constexpr unsigned long TSR_RQCP0 = (1U << 0);
- constexpr unsigned long TSR_TXOK0 = (1U << 1);
- constexpr unsigned long TSR_ALST0 = (1U << 2);
- constexpr unsigned long TSR_TERR0 = (1U << 3);
- constexpr unsigned long TSR_ABRQ0 = (1U << 7);
- constexpr unsigned long TSR_RQCP1 = (1U << 8);
- constexpr unsigned long TSR_TXOK1 = (1U << 9);
- constexpr unsigned long TSR_ALST1 = (1U << 10);
- constexpr unsigned long TSR_TERR1 = (1U << 11);
- constexpr unsigned long TSR_ABRQ1 = (1U << 15);
- constexpr unsigned long TSR_RQCP2 = (1U << 16);
- constexpr unsigned long TSR_TXOK2 = (1U << 17);
- constexpr unsigned long TSR_ALST2 = (1U << 18);
- constexpr unsigned long TSR_TERR2 = (1U << 19);
- constexpr unsigned long TSR_ABRQ2 = (1U << 23);
- constexpr unsigned long TSR_CODE_SHIFT = (24U);
- constexpr unsigned long TSR_CODE_MASK = (3U << TSR_CODE_SHIFT);
- constexpr unsigned long TSR_TME0 = (1U << 26);
- constexpr unsigned long TSR_TME1 = (1U << 27);
- constexpr unsigned long TSR_TME2 = (1U << 28);
- constexpr unsigned long TSR_LOW0 = (1U << 29);
- constexpr unsigned long TSR_LOW1 = (1U << 30);
- constexpr unsigned long TSR_LOW2 = (1U << 31);
- constexpr unsigned long RFR_FMP_SHIFT = (0U);
- constexpr unsigned long RFR_FMP_MASK = (3U << RFR_FMP_SHIFT);
- constexpr unsigned long RFR_FULL = (1U << 3);
- constexpr unsigned long RFR_FOVR = (1U << 4);
- constexpr unsigned long RFR_RFOM = (1U << 5);
- constexpr unsigned long IER_TMEIE = (1U << 0);
- constexpr unsigned long IER_FMPIE0 = (1U << 1);
- constexpr unsigned long IER_FFIE0 = (1U << 2);
- constexpr unsigned long IER_FOVIE0 = (1U << 3);
- constexpr unsigned long IER_FMPIE1 = (1U << 4);
- constexpr unsigned long IER_FFIE1 = (1U << 5);
- constexpr unsigned long IER_FOVIE1 = (1U << 6);
- constexpr unsigned long IER_EWGIE = (1U << 8);
- constexpr unsigned long IER_EPVIE = (1U << 9);
- constexpr unsigned long IER_BOFIE = (1U << 10);
- constexpr unsigned long IER_LECIE = (1U << 11);
- constexpr unsigned long IER_ERRIE = (1U << 15);
- constexpr unsigned long IER_WKUIE = (1U << 16);
- constexpr unsigned long IER_SLKIE = (1U << 17);
- constexpr unsigned long ESR_EWGF = (1U << 0);
- constexpr unsigned long ESR_EPVF = (1U << 1);
- constexpr unsigned long ESR_BOFF = (1U << 2);
- constexpr unsigned long ESR_LEC_SHIFT = (4U);
- constexpr unsigned long ESR_LEC_MASK = (7U << ESR_LEC_SHIFT);
- constexpr unsigned long ESR_NOERROR = (0U << ESR_LEC_SHIFT);
- constexpr unsigned long ESR_STUFFERROR = (1U << ESR_LEC_SHIFT);
- constexpr unsigned long ESR_FORMERROR = (2U << ESR_LEC_SHIFT);
- constexpr unsigned long ESR_ACKERROR = (3U << ESR_LEC_SHIFT);
- constexpr unsigned long ESR_BRECERROR = (4U << ESR_LEC_SHIFT);
- constexpr unsigned long ESR_BDOMERROR = (5U << ESR_LEC_SHIFT);
- constexpr unsigned long ESR_CRCERRPR = (6U << ESR_LEC_SHIFT);
- constexpr unsigned long ESR_SWERROR = (7U << ESR_LEC_SHIFT);
- constexpr unsigned long ESR_TEC_SHIFT = (16U);
- constexpr unsigned long ESR_TEC_MASK = (0xFFU << ESR_TEC_SHIFT);
- constexpr unsigned long ESR_REC_SHIFT = (24U);
- constexpr unsigned long ESR_REC_MASK = (0xFFU << ESR_REC_SHIFT);
- constexpr unsigned long BTR_BRP_SHIFT = (0U);
- constexpr unsigned long BTR_BRP_MASK = (0x03FFU << BTR_BRP_SHIFT);
- constexpr unsigned long BTR_TS1_SHIFT = (16U);
- constexpr unsigned long BTR_TS1_MASK = (0x0FU << BTR_TS1_SHIFT);
- constexpr unsigned long BTR_TS2_SHIFT = (20U);
- constexpr unsigned long BTR_TS2_MASK = (7U << BTR_TS2_SHIFT);
- constexpr unsigned long BTR_SJW_SHIFT = (24U);
- constexpr unsigned long BTR_SJW_MASK = (3U << BTR_SJW_SHIFT);
- constexpr unsigned long BTR_LBKM = (1U << 30);
- constexpr unsigned long BTR_SILM = (1U << 31);
- constexpr unsigned long BTR_BRP_MAX = (1024U);
- constexpr unsigned long BTR_TSEG1_MAX = (16U);
- constexpr unsigned long BTR_TSEG2_MAX = (8U);
- constexpr unsigned long TIR_TXRQ = (1U << 0);
- constexpr unsigned long TIR_RTR = (1U << 1);
- constexpr unsigned long TIR_IDE = (1U << 2);
- constexpr unsigned long TIR_EXID_SHIFT = (3U);
- constexpr unsigned long TIR_EXID_MASK = (0x1FFFFFFFU << TIR_EXID_SHIFT);
- constexpr unsigned long TIR_STID_SHIFT = (21U);
- constexpr unsigned long TIR_STID_MASK = (0x07FFU << TIR_STID_SHIFT);
- constexpr unsigned long TDTR_DLC_SHIFT = (0U);
- constexpr unsigned long TDTR_DLC_MASK = (0x0FU << TDTR_DLC_SHIFT);
- constexpr unsigned long TDTR_TGT = (1U << 8);
- constexpr unsigned long TDTR_TIME_SHIFT = (16U);
- constexpr unsigned long TDTR_TIME_MASK = (0xFFFFU << TDTR_TIME_SHIFT);
- constexpr unsigned long TDLR_DATA0_SHIFT = (0U);
- constexpr unsigned long TDLR_DATA0_MASK = (0xFFU << TDLR_DATA0_SHIFT);
- constexpr unsigned long TDLR_DATA1_SHIFT = (8U);
- constexpr unsigned long TDLR_DATA1_MASK = (0xFFU << TDLR_DATA1_SHIFT);
- constexpr unsigned long TDLR_DATA2_SHIFT = (16U);
- constexpr unsigned long TDLR_DATA2_MASK = (0xFFU << TDLR_DATA2_SHIFT);
- constexpr unsigned long TDLR_DATA3_SHIFT = (24U);
- constexpr unsigned long TDLR_DATA3_MASK = (0xFFU << TDLR_DATA3_SHIFT);
- constexpr unsigned long TDHR_DATA4_SHIFT = (0U);
- constexpr unsigned long TDHR_DATA4_MASK = (0xFFU << TDHR_DATA4_SHIFT);
- constexpr unsigned long TDHR_DATA5_SHIFT = (8U);
- constexpr unsigned long TDHR_DATA5_MASK = (0xFFU << TDHR_DATA5_SHIFT);
- constexpr unsigned long TDHR_DATA6_SHIFT = (16U);
- constexpr unsigned long TDHR_DATA6_MASK = (0xFFU << TDHR_DATA6_SHIFT);
- constexpr unsigned long TDHR_DATA7_SHIFT = (24U);
- constexpr unsigned long TDHR_DATA7_MASK = (0xFFU << TDHR_DATA7_SHIFT);
- constexpr unsigned long RIR_RTR = (1U << 1);
- constexpr unsigned long RIR_IDE = (1U << 2);
- constexpr unsigned long RIR_EXID_SHIFT = (3U);
- constexpr unsigned long RIR_EXID_MASK = (0x1FFFFFFFU << RIR_EXID_SHIFT);
- constexpr unsigned long RIR_STID_SHIFT = (21U);
- constexpr unsigned long RIR_STID_MASK = (0x07FFU << RIR_STID_SHIFT);
- constexpr unsigned long RDTR_DLC_SHIFT = (0U);
- constexpr unsigned long RDTR_DLC_MASK = (0x0FU << RDTR_DLC_SHIFT);
- constexpr unsigned long RDTR_FM_SHIFT = (8U);
- constexpr unsigned long RDTR_FM_MASK = (0xFFU << RDTR_FM_SHIFT);
- constexpr unsigned long RDTR_TIME_SHIFT = (16U);
- constexpr unsigned long RDTR_TIME_MASK = (0xFFFFU << RDTR_TIME_SHIFT);
- constexpr unsigned long RDLR_DATA0_SHIFT = (0U);
- constexpr unsigned long RDLR_DATA0_MASK = (0xFFU << RDLR_DATA0_SHIFT);
- constexpr unsigned long RDLR_DATA1_SHIFT = (8U);
- constexpr unsigned long RDLR_DATA1_MASK = (0xFFU << RDLR_DATA1_SHIFT);
- constexpr unsigned long RDLR_DATA2_SHIFT = (16U);
- constexpr unsigned long RDLR_DATA2_MASK = (0xFFU << RDLR_DATA2_SHIFT);
- constexpr unsigned long RDLR_DATA3_SHIFT = (24U);
- constexpr unsigned long RDLR_DATA3_MASK = (0xFFU << RDLR_DATA3_SHIFT);
- constexpr unsigned long RDHR_DATA4_SHIFT = (0U);
- constexpr unsigned long RDHR_DATA4_MASK = (0xFFU << RDHR_DATA4_SHIFT);
- constexpr unsigned long RDHR_DATA5_SHIFT = (8U);
- constexpr unsigned long RDHR_DATA5_MASK = (0xFFU << RDHR_DATA5_SHIFT);
- constexpr unsigned long RDHR_DATA6_SHIFT = (16U);
- constexpr unsigned long RDHR_DATA6_MASK = (0xFFU << RDHR_DATA6_SHIFT);
- constexpr unsigned long RDHR_DATA7_SHIFT = (24U);
- constexpr unsigned long RDHR_DATA7_MASK = (0xFFU << RDHR_DATA7_SHIFT);
- constexpr unsigned long FMR_FINIT = (1U << 0);
- }
- }
- #if UAVCAN_CPP_VERSION < UAVCAN_CPP11
- # undef constexpr
- #endif
- #endif
- #endif
|