📄 bspcpusapi.c
字号:
/************************************************************************
* 版权所有 (C)2003, 深圳市中兴通讯股份有限公司。
*
* 文件名称: BspCpusApi.c
* 文件标识:
* 内容摘要: 提供824x子卡对外提供的所有函数
* 其它说明: 暂无
* 当前版本: V1.0
* 作 者: 邹同亮
* 完成日期: 2003年1月11日
*
* 修改记录1:
* 修改日期:
* 版 本 号:
* 修 改 人:
* 修改内容:
* 修改记录2:…
************************************************************************/
#include "vxWorks.h"
#include "muxlib.h"
#include "etherLib.h"
#include "end.h"
#include "endLib.h"
#include "ifLib.h"
#include "ipProto.h"
#include "BspCpusApi.h"
unsigned char g_ucBoardReset =0; /* 上层是否调用过BoardReset函数,1表示调过 */
/************************************************************************
* 函数名称: NetIntAdd
* 功能描述: 加网口中断
* 输入参数: pNetAdded:加中断所需参数的结构指针
* 输出参数: 无
* 返 回 值: 无
* 其它说明: 无
* 修改日期: 版本号 修改人 修改内容
* -----------------------------------------------
* 2002/12/24 V1.0 马书宇 创建
************************************************************************/
void NetIntAdd(NET_ADD * pNetAdded)
{
int i;
unsigned long intreg;
int externIntNum;
for(i = 0; i < pNetAdded->unit; i++)
{
pciConfigOutByte (0, pNetAdded->DevNum[i], 0, PCI_CFG_DEV_INT_LINE, pNetAdded->IntNum[i]);
externIntNum = pNetAdded->IntNum[i] - EXTERNAL_INTERRUPT_BASE;
intreg = sysPciInLong((UINT32)((UINT32)(EPIC_EXT_SRC0_VEC_PRI_REG) + externIntNum * 0x20));
sysPciOutLong((UINT32)((UINT32)(EPIC_EXT_SRC0_VEC_PRI_REG) + externIntNum * 0x20), (intreg & 0xfff0ffff) | ((pNetAdded->IntPri[i]<<16)&0x000f0000));
}
}
/************************************************************************
* 函数名称: GetPrPMCInfo
* 功能描述: 获得子卡类型
* 输入参数: pHardwareInfo: 结构指针,结构体为:
typedef struct{
USHORT BoardType; 硬件单板类型
USHORT BoardVersion; 硬件单板版本号
}T_HARDWARE_INFO;
* 输出参数: 同输入
* 返 回 值: OK: 操作成功
NULL: 操作不成功
* 其它说明: 无
* 修改日期: 版本号 修改人 修改内容
* -----------------------------------------------
* 2002/12/24 V1.0 马书宇 创建
************************************************************************/
unsigned long GetPrPMCInfo(T_HARDWARE_INFO *pHardwareInfo)
{
if(NULL == pHardwareInfo)
return NULL;
pHardwareInfo->BoardType = PRPMC8245;
pHardwareInfo->BoardVersion = *(UCHAR *)0xfff00002;
return OK;
}
/************************************************************************
* 函数名称: GetCom2Clk
* 功能描述: 获得串口2时钟
* 输入参数: 无
* 返 回 值: 串口2时钟
* 其它说明: 无
* 修改日期: 版本号 修改人 修改内容
* -----------------------------------------------
* 2003/04/06 V1.0 邹同亮 创建
************************************************************************/
unsigned long GetCom2Clk(void)
{
return (sysGetBusSpdHertz());
}
/************************************************************************
* 函数名称: BoardReset
* 功能描述: 复位子卡
* 输入参数: 无
* 输出参数: 无
* 返 回 值: 无
* 其它说明: 无
* 修改日期: 版本号 修改人 修改内容
* -----------------------------------------------
*
************************************************************************/
void BoardReset(void)
{
unsigned char ucBSCR;
ucBSCR = *((unsigned char*)XPBCON_EPLD_REG5);
*((unsigned char*)XPBCON_EPLD_REG5) = ucBSCR | 0x80; /* 使能看门狗 */
g_ucBoardReset =1; /* 设置调用过此函数标志,喂狗函数据此不喂狗 */
taskDelay(sysClkRateGet() * 2); /* 延时2秒 */
}
/************************************************************************
* 函数名称: FeedWatchDog
* 功能描述: 喂狗
* 输入参数: 无
* 输出参数: 无
* 返 回 值: 无
* 其它说明: 无
* 修改日期: 版本号 修改人 修改内容
* -----------------------------------------------
*
************************************************************************/
void watchDogFeed(void)
{
unsigned char ucBSCR;
if(g_ucBoardReset)
{
return;
}
ucBSCR = *((unsigned char*)XPBCON_EPLD_REG0);
/* 使WDI信号翻转 */
*((unsigned char*)XPBCON_EPLD_REG0) = (ucBSCR & 0xdf) | ((ucBSCR & 0x20) ^ 0x20);
}
/* 使能看门狗功能 */
void watchDogEnable(void)
{
/* 使能前先喂狗,因为此时可能看门狗已经溢出 */
watchDogFeed();
taskDelay(1);
watchDogFeed();
(*((unsigned char *)XPBCON_EPLD_REG5)) |= 0x80;
}
/* 禁止看门狗功能 */
void watchDogDisable(void)
{
(*((unsigned char *)XPBCON_EPLD_REG5)) &= 0x7f;
}
/* 获取子卡硬件版本信息 */
UINT32 getHardwareVersion(void)
{
return ( *((unsigned char *)XPBCON_EPLD_REG2) );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -