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

📄 复件 can_code.c

📁 基于菲利普的LPC2100的集成CAN控制器的应用程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	_CANAFMR afmr;
	afmr.dwValue = 0;		// initial value!!!

	switch(mode)
	{
		case 1:
			afmr.Bits.AccBp = 1;	// Bypass mode
			break;
			
		case 2:
			// ..					// normal filter
			break;

		case 3:
			afmr.Bits.eFCAN = 1;	// FullCAN mode
			break;
		default:
			afmr.Bits.AccBp = 0;
			afmr.Bits.AccOff = 1;	// all message on CAN buses are ignored
			break;
	}

	REGAFMR = afmr.dwValue;
}

// ========================函数定义===================================================
//	函数名称:AFGetEndofTabOffset()
//	函数功能:获得表格结束偏移地址
//	输入参数:none
//	输出参数:表格结束偏移地址
//	全局变量:无
//	调用模块:无

//	作    者:Bai Huan-Xu
//	日    期:2004/7/19
// -------------------------------------------------------------------------------------
//	修 改 人:
//	日    期:
//	描    述:
// ====================================================================================
uint32 AFGetEndOfTabOffset(void)
{
	return REGENDofTable;
}

// ========================函数定义===================================================
//	函数名称:AFInitFCANTab()
//	函数功能:初始化 FullCAN 表格
//	输入参数:pTab 表格地址
// 			  nCell 表格占用 Cell 的个数
//	输出参数:参考 enum LUT_BUILD_ERR
//	全局变量:无
//	调用模块:无

//	作    者:Bai Huan-Xu
//	日    期:2004/7/19
// -------------------------------------------------------------------------------------
//	修 改 人:
//	日    期:
//	描    述:
// ====================================================================================
/*
uint32 AFInitFCANTab(_AF_SFF_CELL *pTab, uint32 nCell)
{
	uint8 i;
	_CANAFMR afmr;
	uint32 bakAfmr;
	_AF_SFF_CELL *pU32;
	_AF_SFF_CELL mask  = {-1,-1,-1,-1,-1,-1,-1,-1};
	
	if(nCell > (REGSFF_sa / 4))
	{
		return TABLE_CELL_TOO_LARGE;
	}

	for(i = 0; i < nCell; i++)
	{
		if(pTab -> LoCh != pTab -> UpCh || pTab -> LoId >= pTab -> UpId)
		{
			return CELL_CONTENT_INVALID;
		}
	}
		
	afmr.dwValue = REGAFMR;
	bakAfmr = afmr.dwValue;
	afmr.Bits.AccBp = 1;
	REGAFMR = afmr.dwValue;

	pU32 = (_AF_SFF_CELL *) (&REGAFRAM);

	for(i = 0; i < (REGSFF_sa / 4); i++)
	{
		*(pU32 + i) = mask;			// disable all AF cell
	}

	for(i = 0; i < nCell; i++)
	{
		*(pU32 + i) = *(pTab + i);	// set filter cell
	}

	REGAFMR = bakAfmr;
	return LUT_SETTING_OK;
}
*/
// ========================函数定义===================================================
//	函数名称:AFInitSFFInivTab(_AF_SFF_CELL *pTab, uint32 nCell)
//	函数功能:初始化独立标准帧标识符表格
//	输入参数:pTab 表格地址
// 			  nCell 表格占用Cell 的个数
//	输出参数:参考enum LUT_BUILD_ERR
//	全局变量:无
//	调用模块:无

//	作    者:Bai Huan-Xu
//	日    期:2004/7/19
// -------------------------------------------------------------------------------------
//	修 改 人:
//	日    期:
//	描    述:
// ====================================================================================
uint32 AFInitSFFInivTab(_AF_SFF_CELL *pTab, uint32 nCell)
{
	uint8 i;
	_CANAFMR afmr;
	uint32 bakAfmr;
	_AF_SFF_CELL *pU32;
	_AF_SFF_CELL mask = {-1,-1,-1,-1,-1,-1,-1,-1};
	
	if(nCell > ((REGSFF_GRP_sa - REGSFF_sa) / 4))
	{
		return TABLE_CELL_TOO_LARGE;
	}

	
	afmr.dwValue = REGAFMR;
	bakAfmr = afmr.dwValue;
	afmr.Bits.AccBp = 1;
	REGAFMR = afmr.dwValue;

	pU32 = (_AF_SFF_CELL *)((uint32) & REGAFRAM + (uint32)(REGSFF_sa));

	for(i = 0; i < ((REGSFF_GRP_sa - REGSFF_sa) / 4); i++)
	{
		*(pU32 + i) = mask;				// disable all AF cell
	}

	for(i = 0; i < nCell; i++)
	{
		*(pU32 + i) = *(pTab + i);		// set filter cell
	}

	REGAFMR = bakAfmr;
	return LUT_SETTING_OK;
}

// ========================函数定义===================================================
//	函数名称:AFInitSFFGrpTab(_AF_SFF_CELL *pTab, uint32 nCell)
//	函数功能:初始化独立标准帧标识符表格
//	输入参数:pTab 表格地址
// 			  nCell 表格占用Cell 的个数
//	输出参数:参考enum LUT_BUILD_ERR
//	全局变量:无
//	调用模块:无

//	作    者:Bai Huan-Xu
//	日    期:2004/7/19
// -------------------------------------------------------------------------------------
//	修 改 人:
//	日    期:
//	描    述:
// ====================================================================================
uint32 AFInitSFFGrpTab(_AF_SFF_CELL *pTab, uint32 nCell)
{
	uint8 i;
	_CANAFMR afmr;
	uint32 bakAfmr;
	_AF_SFF_CELL *pU32;
	_AF_SFF_CELL mask = {-1,-1,-1,-1,-1,-1,-1,-1};
	
	if(nCell > ((REGEFF_sa - REGSFF_GRP_sa) / 4))
	{
		return TABLE_CELL_TOO_LARGE;
	}

	
	afmr.dwValue = REGAFMR;
	bakAfmr = afmr.dwValue;
	afmr.Bits.AccBp = 1;

	
	pU32 = (_AF_SFF_CELL *)((uint32) & REGAFRAM + (uint32)(REGSFF_GRP_sa));

	for(i = 0; i < ((REGEFF_sa - REGSFF_GRP_sa) / 4); i++)
	{
		*(pU32 + i) = mask;			// disable all AF cell
	}

	for(i = 0; i < nCell; i++)
	{
		*(pU32 + i) = *(pTab + i);	// set filter cell
	}

	REGAFMR = bakAfmr;
	return LUT_SETTING_OK;
}

// ========================函数定义===================================================
//	函数名称:AFInitEFFInivTab(_AF_EFF_CELL *pTab, uint32 nCell)
//	函数功能:初始化独立标准帧标识符表格
//	输入参数:pTab 表格地址
// 			  nCell 表格占用Cell 的个数
//	输出参数:参考enum LUT_BUILD_ERR
//	全局变量:无
//	调用模块:无

//	作    者:Bai Huan-Xu
//	日    期:2004/7/19
// -------------------------------------------------------------------------------------
//	修 改 人:
//	日    期:
//	描    述:
// ====================================================================================
/*
uint32 AFInitEFFInivTab(_AF_EFF_CELL *pTab, uint32 nCell)
{	
	uint8 i;
	_CANAFMR afmr;
	uint32 bakAfmr;
	_AF_EFF_CELL *pU32;
	_AF_EFF_CELL mask = {-1,-1};
	
	if(nCell > ((REGEFF_GRP_sa - REGEFF_sa) / 4))
	{
		return TABLE_CELL_TOO_LARGE;
	}

	
	afmr.dwValue = REGAFMR;
	bakAfmr = afmr.dwValue;
	afmr.Bits.AccBp = 1;
	REGAFMR = afmr.dwValue;

	
	pU32 = (_AF_EFF_CELL *)((uint32) & REGAFRAM + (uint32)(REGEFF_sa));

	for(i = 0; i < ((REGEFF_GRP_sa - REGEFF_sa) / 4); i++)
	{
		*(pU32 + i) = mask;			// disable all AF cell
	}

	for(i = 0; i < nCell; i++)
	{
		*(pU32 + i) = *(pTab + i);	// set filter cell
	}

	REGAFMR = bakAfmr;
	return LUT_SETTING_OK;
}

// ========================函数定义===================================================
//	函数名称:AFInitEFFGrpTab(_AF_EFF_CELL *pTab, uint32 nCell)
//	函数功能:初始化独立标准帧标识符表格
//	输入参数:pTab 表格地址
// 			  nCell 表格占用Cell 的个数
//	输出参数:参考enum LUT_BUILD_ERR
//	全局变量:无
//	调用模块:无

//	作    者:Bai Huan-Xu
//	日    期:2004/7/19
// -------------------------------------------------------------------------------------
//	修 改 人:
//	日    期:
//	描    述:
// ====================================================================================
uint32 AFInitEFFGrpTab(_AF_EFF_CELL *pTab, uint32 nCell)
{
	uint8 i;
	_CANAFMR afmr;
	uint32 bakAfmr;
	_AF_EFF_CELL *pU32;
	_AF_EFF_CELL mask = {-1,-1};
	
	if((nCell % 2) != 0)
	{
		return CELL_NUM_INVALID;
	}

	if(nCell > ((REGENDofTable - REGEFF_GRP_sa) / 4))
	{
		return TABLE_CELL_TOO_LARGE;
	}

	afmr.dwValue = REGAFMR;
	bakAfmr = afmr.dwValue;
	afmr.Bits.AccBp = 1;
	REGAFMR = afmr.dwValue;

	pU32 = (_AF_EFF_CELL *)((uint32) & REGAFRAM + (uint32)(REGEFF_GRP_sa));

	for(i = 0; i < ((REGENDofTable - REGEFF_GRP_sa) / 4); i++)
	{
		*(pU32 + i) = mask;			// disable all AF cell
	}

	for(i = 0; i < nCell; i++)
	{
		*(pU32 + i) = *(pTab + i);			// set filter cell
	}

	REGAFMR = bakAfmr;

	return LUT_SETTING_OK;
}

// ========================函数定义===================================================
//	函数名称:AFReadFCANRxResurt()
//	函数功能:读取 FullCAN 自动接收内容(未能完全通过测试)
//	输入参数:pMsg,数据回写地址
// 			  IdIndex, FullCANID 索引值
//	输出参数:0	数据在上一次读取后没有被更新
//			  1 数据正在被更新
//			  2 数据读取成功
//	全局变量:无
//	调用模块:无

//	作    者:Bai Huan-Xu
//	日    期:2004/7/19
// -------------------------------------------------------------------------------------
//	修 改 人:
//	日    期:
//	描    述:
// ====================================================================================
uint32 AFReadFCANRxResurt(_AF_AUTOSTORE_MSG *pMsg, uint32 IdIndex)
{
	uint32 state = -1;
	_AF_AUTOSTORE_MSG *pTmp;

	pTmp = (_AF_AUTOSTORE_MSG *)((uint32) & REGAFRAM + (uint32)REGENDofTable + (uint32)(IdIndex * 12));

	if(pTmp -> Head.SEM == 0x03)		// SEM = 11(B)
	{
		pTmp -> Head.SEM = 0x00;		// set flag to begin read message...
		*pMsg = *pTmp;
		if(pTmp -> Head.SEM != 0x00)	// flag check...
		{
			state = 1;					// updata continue...
		}
		else
		{
			state = 2;					// get a correct message!
		}
	}

	else
	{
		state = 0;						// not any updata after last access
	}

	return state;
}
*/
// #endif
// =========================== end of the file ====================================================

⌨️ 快捷键说明

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