www.pudn.com > MPC8241BSP.rar > BspCpusApi.c, change:2003-06-05,size:4957b


/************************************************************************ 
* 版权所有 (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) ); 
}