📄 can.h
字号:
// File :CAN.h
// Describe :LPC2119/2129/2194/2292/2294 CAN block driver.
// Author :exdata
// Ver :0.95
// Update :2004.06.27
// Copyright:zlgmcu
// ============================== WARNING ==============================
//
// DO NOT EDIT THIS FILE!!!
//
// =====================================================================
#ifndef __CAN_H__
#define __CAN_H__
#if !defined(__cplusplus)
#error C++ compiler required.
#endif
#include "CANPreDef.h"
#include "YuQueue.h"
////////////////////////////////////////////////////////////////////////////////////////////////////////
#define MOD_OFFSET 0x00
#define CMR_OFFSET 0x04
#define GSR_OFFSET 0x08
#define ICR_OFFSET 0x0c
#define IER_OFFSET 0x10
#define BTR_OFFSET 0x14
#define EWL_OFFSET 0x18
#define SR_OFFSET 0x1c
#define RFS_OFFSET 0x20
#define RID_OFFSET 0x24
#define RDA_OFFSET 0x28
#define RDB_OFFSET 0x2c
#define TFI_OFFSET 0x30
#define TID_OFFSET 0x34
#define TDA_OFFSET 0x38
#define TDB_OFFSET 0x3c
////////////////////////////////////////////////////////////////////////////////////////////////////////
// CAN register,just like SJA1000.
#define REGMOD (*((volatile UINT32 *)(m_RegBase + MOD_OFFSET)))
#define REGCMR (*((volatile UINT32 *)(m_RegBase + CMR_OFFSET)))
#define REGGSR (*((volatile UINT32 *)(m_RegBase + GSR_OFFSET)))
#define REGICR (*((volatile UINT32 *)(m_RegBase + ICR_OFFSET)))
#define REGIER (*((volatile UINT32 *)(m_RegBase + IER_OFFSET)))
#define REGBTR (*((volatile UINT32 *)(m_RegBase + BTR_OFFSET)))
#define REGEWL (*((volatile UINT32 *)(m_RegBase + EWL_OFFSET)))
#define REGSR (*((volatile UINT32 *)(m_RegBase + SR_OFFSET)))
#define REGRFS (*((volatile UINT32 *)(m_RegBase + RFS_OFFSET)))
#define REGRID (*((volatile UINT32 *)(m_RegBase + RID_OFFSET)))
#define REGRDA (*((volatile UINT32 *)(m_RegBase + RDA_OFFSET)))
#define REGRDB (*((volatile UINT32 *)(m_RegBase + RDB_OFFSET)))
#define REGTFI(x) (*((volatile UINT32 *)(m_RegBase + (0x10L * (x - 1)) + TFI_OFFSET)))
#define REGTID(x) (*((volatile UINT32 *)(m_RegBase + (0x10L * (x - 1)) + TID_OFFSET)))
#define REGTDA(x) (*((volatile UINT32 *)(m_RegBase + (0x10L * (x - 1)) + TDA_OFFSET)))
#define REGTDB(x) (*((volatile UINT32 *)(m_RegBase + (0x10L * (x - 1)) + TDB_OFFSET)))
////////////////////////////////////////////////////////////////////////////////////////////////////////
class CCAN
{
public:
CCAN(UINT32 Index,UINT32 RxBufZise);
virtual ~CCAN();
// control
void PCONPEnable();
void PCONPDisable();
UINT32 GetRegister(UINT32 Offset);
void SetRegister(UINT32 Offset,UINT32 Value);
void SoftBusReset();
BOOL SoftBusEnable();
_CANMOD GetMod();
BOOL SetMod(_CANMOD mod);
BOOL Initial(_CANBTR btr,BOOL bSTM = FALSE);
// CAN interrupt handle
virtual void IntEntry();
// transmit
BOOL IsTransmiting(UINT32 BufCh);
BOOL IsTransCompleted(UINT32 BufCh);
void AbortTransmit(UINT32 BufCh);
UINT32 Transmit(_CANTxBUF *pTxBuf,UINT32 BufCh = 1);
// receive
int GetRecvCount();
void ClearRecvBuf();
BOOL Receive(_CANRxBUF *pRxBuf);
////////////////////////////////////////////////////////////////////////////
protected:
virtual void OnWUI(_CANICR icr);
virtual void OnIDI(_CANICR icr);
virtual void OnEPI(_CANICR icr);
virtual void OnEI(_CANICR icr);
virtual void OnTI(_CANICR icr);
virtual void OnRI(_CANICR icr);
virtual void OnDOI(_CANICR icr);
virtual void OnALI(_CANICR icr);
virtual void OnBEI(_CANICR icr);
void EnableCanINT();
void DisableCanINT();
void InitPinSelect();
protected:
UINT32 m_Index;
UINT32 m_RegBase;
CYuQueue <_CANRxBUF> m_RxFIFO;
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -