?? 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
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -