📄 bspfec.c
字号:
//------------------------------------------------------------------------------
// Copyright (C) 2006, Freescale Semiconductor, Inc. All Rights Reserved.
// THIS SOURCE CODE, AND ITS USE AND DISTRIBUTION, IS SUBJECT TO THE TERMS
// AND CONDITIONS OF THE APPLICABLE LICENSE AGREEMENT
//------------------------------------------------------------------------------
//
// File: bspfec.c
//
// Implementation of FEC Driver
//
// This file implements the bsp level code for FEC.
//
//-----------------------------------------------------------------------------
#include "bsp.h"
#include "fec.h"
//-----------------------------------------------------------------------------
// External Functions
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// External Variables
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// Defines
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// Types
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// Global Variables
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// Local Variables
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// Local Functions
//-----------------------------------------------------------------------------
//------------------------------------------------------------------------------
//
// Function: BSPFECIomuxConfig
//
// This fuction will enable/disable the FEC GPIO according to the parameter
// "Enable".
//
// Parameters:
// Enable
// [in] TRUE for enabling the FEC GPIO, FALSE for disabling the
// FEC GPIO.
//
// Return Value:
// TRUE for success, FALSE if failure.
//
//------------------------------------------------------------------------------
BOOL BSPFECIomuxConfig( IN BOOL Enable )
{
DDK_GPIO_CFG cfg;
BOOL cfgState;
PHYSICAL_ADDRESS phyAddr;
PCSP_PBC_REGS pPBC;
DEBUGMSG(ZONE_FUNCTION, (TEXT("FEC: +BSPFECIomuxConfig\r\n")));
if(Enable)
{
phyAddr.QuadPart = BSP_BASE_REG_PA_PBC_BASE;
pPBC = (PCSP_PBC_REGS) MmMapIoSpace(phyAddr, sizeof(CSP_PBC_REGS), FALSE);
if(pPBC == NULL)
{
DEBUGMSG(ZONE_ERROR, (TEXT("BSPFECIomuxConfig: Allocate PBC memory failed.\r\n")));
return FALSE;
}
// set ATA_FEC_EN and ATA_FEC_SEL
OUTREG16(&pPBC->BCTRL2_CLEAR, CSP_BITFMASK(PBC_BCTRL2_ATA_FEC_EN));
OUTREG16(&pPBC->BCTRL2_SET, CSP_BITFMASK(PBC_BCTRL2_ATA_FEC_SEL));
DDK_GPIO_SET_CONFIG(cfg, FEC);
cfgState = DDKGpioEnable(&cfg);
if(cfgState == FALSE)
{
DEBUGMSG(ZONE_ERROR, (TEXT("BSPFECIomuxConfig: Enable FEC GPIO failed.\r\n")));
return FALSE;
}
DDK_GPIO_SET_CONFIG(cfg, FECTXEN);
cfgState = DDKGpioEnable(&cfg);
if(cfgState == FALSE)
{
DEBUGMSG(ZONE_ERROR, (TEXT("BSPFECIomuxConfig: Enable FEC_TX_EN failed.\r\n")));
return FALSE;
}
DDK_GPIO_SET_CONFIG(cfg, FECMDIO);
cfgState = DDKGpioEnable(&cfg);
if(cfgState == FALSE)
{
DEBUGMSG(ZONE_ERROR, (TEXT("BSPFECIomuxConfig: Enable FEC_MDIO failed.\r\n")));
return FALSE;
}
}
else
{
DDK_GPIO_SET_CONFIG(cfg, FEC);
cfgState = DDKGpioDisable(&cfg);
if(cfgState == FALSE)
{
DEBUGMSG(ZONE_ERROR, (TEXT("BSPFECIomuxConfig: Disable FEC GPIO failed.\r\n")));
return FALSE;
}
DDK_GPIO_SET_CONFIG(cfg, FECTXEN);
cfgState = DDKGpioDisable(&cfg);
if(cfgState == FALSE)
{
DEBUGMSG(ZONE_ERROR, (TEXT("BSPFECIomuxConfig: Disable FEC_TX_EN failed.\r\n")));
return FALSE;
}
DDK_GPIO_SET_CONFIG(cfg, FECMDIO);
cfgState = DDKGpioDisable(&cfg);
if(cfgState == FALSE)
{
DEBUGMSG(ZONE_ERROR, (TEXT("BSPFECIomuxConfig: Disable FEC_MDIO failed.\r\n")));
return FALSE;
}
}
DEBUGMSG(ZONE_FUNCTION, (TEXT("FEC: -BSPFECIomuxConfig\r\n")));
return TRUE;
}
//------------------------------------------------------------------------------
//
// Function: BSPFECClockConfig
//
// This fuction will enable/disable the FEC Clock according to the parameter
// "Enable".
//
// Parameters:
// Enable
// [in] TRUE for enabling the FEC clock, FALSE for disabling the
// FEC clock.
//
// Return Value:
// TRUE for success, FALSE if failure.
//
//------------------------------------------------------------------------------
BOOL BSPFECClockConfig( IN BOOL Enable )
{
BOOL cfgState;
DEBUGMSG(ZONE_FUNCTION, (TEXT("FEC: +BSPFECClockConfig\r\n")));
if(Enable)
{
cfgState = DDKClockSetGatingMode(DDK_CLOCK_GATE_INDEX_FEC, DDK_CLOCK_GATE_MODE_ENABLE);
if(cfgState == FALSE)
{
DEBUGMSG(ZONE_ERROR, (TEXT("BSPFECClockConfig: Enable FEC IPG clock failed.\r\n")));
return FALSE;
}
cfgState = DDKClockSetGatingMode(DDK_CLOCK_GATE_INDEX_HCLK_FEC, DDK_CLOCK_GATE_MODE_ENABLE);
if(cfgState == FALSE)
{
DEBUGMSG(ZONE_ERROR, (TEXT("BSPFECClockConfig: Enable FEC AHB clock failed.\r\n")));
return FALSE;
}
}
else
{
cfgState = DDKClockSetGatingMode(DDK_CLOCK_GATE_INDEX_FEC, DDK_CLOCK_GATE_MODE_DISABLE);
if(cfgState == FALSE)
{
DEBUGMSG(ZONE_ERROR, (TEXT("BSPFECClockConfig: Disable FEC IPG clock failed.\r\n")));
return FALSE;
}
cfgState = DDKClockSetGatingMode(DDK_CLOCK_GATE_INDEX_HCLK_FEC, DDK_CLOCK_GATE_MODE_DISABLE);
if(cfgState == FALSE)
{
DEBUGMSG(ZONE_ERROR, (TEXT("BSPFECClockConfig: Disable FEC AHB clock failed.\r\n")));
return FALSE;
}
}
DEBUGMSG(ZONE_FUNCTION, (TEXT("FEC: -BSPFECClockConfig\r\n")));
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -