⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ecan.h

📁 ECAN OOP implementation for TMS320 280x and x281x
💻 H
字号:
/*! \file ecan.h
 */

#ifndef __ECAN_HEADER__
#define __ECAN_HEADER__

#if    defined(__C280X_ECANA)\
    || defined(__C280X_ECANB)

#if    defined(__C280X_ECANA0_ISR) || defined(__C280X_ECANA1_ISR)\
    || defined(__C280X_ECANB0_ISR) || defined(__C280X_ECANB1_ISR)
  #define __C280X_ECANxxx_ISR
#endif

//
// class ecan_base
//
class ecan_base
#ifdef __C280X_ECANxxx_ISR
                : public iointctrl
#endif //__C280X_ECANxxx_ISR
{ ecan_base(const ecan_base&);
  ecan_base& operator=(const ecan_base&);
public:
  ecan_base(
      volatile ECAN_REGS&   EcanxRegs
    , volatile ECAN_MBOXES& EcanxMboxes
    , volatile LAM_REGS&    EcanxLAMRegs
    , const pclk& pclk_ena
    , pio& CANTX
    , pio& CANRX
    , unsigned long bitrate
  );

  volatile ECAN_REGS&   EcanRegs;
  volatile ECAN_MBOXES& EcanMboxes;
  volatile LAM_REGS&    EcanLAMRegs;

  static const unsigned short mbox_number = 32;

#ifdef __C280X_ECANxxx_ISR
  //iointctrl
  void enable_pie_interrupt(unsigned short ena) = 0;
  void enable_rx_interrupt (unsigned short ena);
  void enable_rx_interrupt (unsigned short ena, unsigned short level);
  void enable_tx_interrupt (unsigned short ena);
  void enable_tx_interrupt (unsigned short ena, unsigned short level);
#endif //__C280X_ECANxxx_ISR
};


//
// class mbox
//
class mbox
{ mbox(const mbox&);
  mbox& operator=(const mbox&);
  ecan_base& ecan;
  volatile MBOX& MboxRegs;
  unsigned short mbnr;
  unsigned long mask;
public:
  mbox( // configure for transmit
      ecan_base& ecanref
    , unsigned short n
    , unsigned long  msgid
    , unsigned short rtr
    );

  mbox( // configure for receive
      ecan_base& ecanref
    , unsigned short n
    , unsigned long  msgid
    , unsigned long  lam
    , unsigned short opc
    , unsigned short rtr
    );

  typedef unsigned short  data_type;
  typedef unsigned short  size_type;
  static const size_type max_bufsize = 8;

  size_type size();
  void read (data_type* buf, size_type bufsize );
  void write(data_type* buf, size_type bufsize );

  //
  // class transmission
  //
  class transmission
  { //transactionProcessing(const transactionProcessing&);
    transmission& operator=(const transmission&);
    mbox& mb;
  public:
    transmission(mbox& mbRef);
    bool operator()(void) const;
  };
};


#if    defined(__C280X_ECANA)
//
// class ecana
//
class ecana : public ecan_base
{ ecana(const ecana&);
  ecana& operator=(const ecana&);
public:
  ecana(
      pio& CANTX
    , pio& CANRX
    , unsigned long bitrate
  );
#ifdef __C280X_ECANxxx_ISR
  //iointctrl
  void enable_pie_interrupt(unsigned short ena);
#endif //__C280X_ECANxxx_ISR
};
#endif // __C280X_ECANA


#if    defined(__C280X_ECANB)
//
// class ecanb
//
class ecanb : public ecan_base
{ ecanb(const ecanb&);
  ecanb& operator=(const ecanb&);
public:
  ecanb(
      pio& CANTX
    , pio& CANRX
    , unsigned long bitrate
  );
#ifdef __C280X_ECANxxx_ISR
  //iointctrl
  void enable_pie_interrupt(unsigned short ena);
#endif //__C280X_ECANxxx_ISR
};
#endif // __C280X_ECANB

#endif // #if    defined(__C280X_ECANA)\
              || defined(__C280X_ECANB)

#endif /* __ECAN_HEADER__ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -