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

📄 can.h

📁 一个基于arm的can通讯的源代码 目前还没有使用任何rtos 可以很方便的嵌入到任何rtos中去
💻 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 + -