⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bspfec.c

📁 mx27 f14v2 源代码。包括ADS板上诸多驱动的源码。
💻 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 + -