#pragma once #include #include "F28335/DSP28x_Project.h" #include "F28335/DSP2833x_Device.h" #include "CAN_data.h" namespace can_space { class CAN{ public: CAN(CAN_VARIANT canVariant); void initGpio(); void config(uint16_t baudrate = 1000, uint16_t flags = 0); void configTxMBox(uint16_t boxNumber, const MsgID& configID, const MsgCtrlReg& configCtrlReg); void configRxMBox(uint16_t boxNumber, const MsgID& configID, const MsgCtrlReg& configCtrlReg); void configSystemIsr(uint32_t flags); void configMBoxIsr(uint16_t boxNumber); bool isNewMessage(); bool isNewMessage(uint16_t boxNumber); void transmitMsg(uint16_t boxNumber, const CANMessage& message, bool writeDataLength = false); void transmitMsg(uint16_t boxNumber, const uint64_t& message, const uint16_t dlc); void transmitMsg(uint16_t boxNumber, const uint64_t& message); void updateTXMessage(uint16_t boxNumber, const CANMessage& message); void sendRemoteRequest(uint16_t boxNumber); int16_t receiveMsg(uint16_t boxNumber, CANMessage& rxMessage); void enableTimeOutControl(uint16_t boxNumber); void disableTimeOutControl(uint16_t boxNumber); void resetTimeStampCounter(); void setTimeOutValue(uint16_t boxNumber, uint32_t canBitsNumber); bool isTimeOut(uint16_t boxNumber); void clearTimeOutFlag(uint16_t boxNumber); void busErrorInterruptFlagsReset(); private: CAN_VARIANT _canPort; volatile ECAN_REGS* _p_CanRegs; ECAN_REGS _CanShadow; volatile ECAN_MBOXES* _p_CanMBoxes; volatile MOTO_REGS* _p_CanMotoRegs; volatile MOTS_REGS* _p_CanMotsRegs; }; } // can_space