📄 复件 can_code.c
字号:
_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 *) (®AFRAM);
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 + -