📄 ecan.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 + -