|
发表于 2011-5-31 18:20:02
|
显示全部楼层
/*--------------------------------------------------------------------------------*-
* 函数名称: CAN_SetACCF()
* 参 数: 波特率
* 返 回: XX
* 函数功能: 接收滤波器状态
*
* 说 明:
*
* 当前版本: V1.0 * 取代版本:
* 作 者: wsl * 修 改:
* 版本信息: 2010-04-30 * 修改信息:
-*--------------------------------------------------------------------------------*/
void CAN_SetACCF(const unsigned int ACCFMode)
{
switch (ACCFMode)
{
case ACCF_OFF: // 接收滤波器状态-复位/停止
LPC_CANAF->AFMR = ACCFMode; // 不缓冲区接收报文
break;
case ACCF_BYPASS: // 接收滤波器状态-复位/停止
LPC_CANAF->AFMR = ACCFMode; // 所有接收的报文存到接收缓冲区中
break;
// 接收滤波器状态-运行 // 硬件接收过滤
case ACCF_ON: // ACCOFF\ACCBP\EFCAN=0时,接收滤波器处于工作模式
case ACCF_FULLCAN: // ACCOFF\ACCBP=0\eFCAN=1,接收滤波器处于FullCAN工作模式
LPC_CANAF->AFMR = ACCF_OFF;
CAN_SetACCF_Lookup();
LPC_CANAF->AFMR = ACCFMode;
break;
default: break;
}
}
/*--------------------------------------------------------------------------------*-
* 函数名称: CAN_SetACCF()
* 参 数: 波特率
* 返 回: XX
* 函数功能: 接收滤波器状态
*
* 说 明:
*
* 当前版本: V1.0 * 取代版本:
* 作 者: wsl * 修 改:
* 版本信息: 2010-04-30 * 修改信息:
-*--------------------------------------------------------------------------------*/
void CAN_SetACCF_Lookup(void)
{
unsigned int address = 0;
unsigned int ID_high, ID_low;
/* Set explicit standard Frame */
LPC_CANAF->SFF_sa = address;
ID_low = (0x125 << 16);
ID_high = 0x126;
*((volatile uint32_t *)(LPC_CANAF_RAM_BASE + address)) = ID_low | ID_high;
address += 4;
/* Set group standard Frame */
LPC_CANAF->SFF_GRP_sa = address;
ID_low = (0x125 << 16); // 下边界
ID_high = 0x129; // 上边界
*((volatile uint32_t *)(LPC_CANAF_RAM_BASE + address)) = ID_low | ID_high;
address += 4;
LPC_CANAF->EFF_sa = address; // 明确的扩展帧
LPC_CANAF->EFF_GRP_sa = address; // 扩展帧组
/* Set End of Table */
LPC_CANAF->ENDofTable = address;
} |
|