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

📄 eth_ctl.c

📁 华为 HI3510 BOOTLOADER HIBOOT 源码包
💻 C
📖 第 1 页 / 共 5 页
字号:
/************************************************************************ *                                                                      * *                          SF_CTL.C                                  	* *                                                                      * *  Project Code:       SD592  SF                                       	* *  Create Date:        2005/1/5                                      	* *  Author:             	tangbenbing                                     * *  Modify Date:        2005/5/5                                                * *  Document:                                                           * *  Function:                                                           * *  Others:                                                             * *----------------------------------------------------------------------* *                                                                      * * Copyright 2005-20** SD592 Team HuaWei Tech, Inc.  					* *                     ALL RIGHTS RESERVED                              * *                                                                      * *----------------------------------------------------------------------* ************************************************************************///#include "stdio.h"//#include "stdlib.h"#include <config.h>#include "ETH_TypeDef.h"#include "ETH_Reg.h"#include "ETH_Struct.h"#ifdef Vxworks#include "vxWorks.h"#include "config.h"#include "intLib.h"#include "semLib.h"#include "taskLib.h"#include "logLib.h"#endif/*=======================================================================*							GLB REG**=======================================================================*//*======================================================================= *  函数名称:void ETH_SetInterruptEnable(In UINT32 u32InterruptEn) *  初稿完成:2005/1/7    *  作    者:   *  函数功能:通过配置寄存器,使能/禁止CPU的中断类型 *  输入参数:中断使能/禁止控制值 *			 每个Bit代表一种中断类型的使能控制,0-中断禁止、1-中断使能)。 *               		bit0 :	ETH有帧等待CPU接收                           *               		bit1:	ETH发送完来自CPU的一帧数据指示            *               		bit2:	ETH有空间接收来自CPU的帧                    *               		bit3:	ETH连接状态变化中断                       *               		bit4:	ETH速度模式变化中断                         *              		bit5:	ETH双工模式变化中断                         *               		bit6:	MDIO完成CPU操作指示                        *               		bit7:	总线操作出错指示中断信号                        *               		bit8:	重传次数超限指示                        *  输出参数: *  返回类型:  无 *  其他说明:  *  调用函数:  建议  *  主调函数:  建议 *========================================================================*/void ETH_SetInterruptEnable(In UINT32 u32InterruptEn){	//CPU_Int_U SetInterruptEn;	//SetInterruptEn.w32 = (u32InterruptEn & 0x1FF);	//*(UINT32 *) ETH_GLB_REG(1) = SetInterruptEn.w32;	*(UINT32 *) ETH_GLB_REG(1) = (u32InterruptEn & 0x1FF);}/*======================================================================= *  函数名称:UINT32 ETH_ReadInterruptEnable(Out UINT32 *pu32InterruptEnAddr) *  初稿完成:2005/1/7    *  作    者:   *  函数功能:读中断配置寄存器,获取使能/禁止CPU的中断信息 *  输入参数:中断使能/禁止控制值 *			 每个Bit代表一种中断类型的使能控制,0-中断禁止、1-中断使能)。 *               		bit0 :	ETH有帧等待CPU接收                           *               		bit1:	ETH发送完来自CPU的一帧数据指示            *               		bit2:	ETH有空间接收来自CPU的帧                    *               		bit3:	ETH连接状态变化中断                       *               		bit4:	ETH速度模式变化中断                         *              		bit5:	ETH双工模式变化中断                         *               		bit6:	MDIO完成CPU操作指示                        *               		bit7:	总线操作出错指示中断信号                        *               		bit8:	重传次数超限指示                        *  输出参数: *  返回类型:  无 *  其他说明:  *  调用函数:  建议  *  主调函数:  建议 *========================================================================*/UINT32 ETH_ReadInterruptEnable(Out UINT32 *pu32InterruptEnAddr){	CPU_Int_U SetInterruptEn;	SetInterruptEn.w32 = *(UINT32 *) ETH_GLB_REG(1);	*pu32InterruptEnAddr = SetInterruptEn.w32;	return *pu32InterruptEnAddr;}/*======================================================================= *  函数名称:UINT32 ETH_ReadInterruptStatus(Out UINT32 *pu32InterruptMode) *  初稿完成:2005/1/7    *  作    者:   *  函数功能:通过读取CPU对应的中断向量表寄存器,可以判断和相应中断类型 *  输入参数:读取中断类型寄存器 *			 每个Bit代表一种中断类型的使能控制,0-中断禁止、1-中断使能) *               		bit0 :	ETH有帧等待CPU接收                           *               		bit1:	ETH发送完来自CPU的一帧数据指示            *               		bit2:	ETH有空间接收来自CPU的帧                    *               		bit3:	ETH连接状态变化中断                       *               		bit4:	ETH速度模式变化中断                         *              		bit5:	ETH双工模式变化中断                         *               		bit6:	MDIO完成CPU操作指示                        *               		bit7:	总线操作出错指示中断信号                        *               		bit8:	重传次数超限指示                        *  输出参数: *  返回类型:  无 *  其他说明:  *  调用函数:  建议  *  主调函数:  建议 *========================================================================*/UINT32 ETH_ReadInterruptStatus(Out UINT32 *pu32InterruptMode){	CPU_Int_U ReadInterrupt;	ReadInterrupt.w32 = *(UINT32 *) ETH_GLB_REG(0);	*pu32InterruptMode = ReadInterrupt.w32;	/*read clear the status*/	//*(UINT32 *) ETH_GLB_REG(0) = ((ReadInterrupt.w32) & (0x1FF));	return *pu32InterruptMode;}/*======================================================================= *  函数名称:UINT32 ETH_ClearInterruptStatus(Out UINT32 *pu32InterruptMode) *  初稿完成:2005/1/7    *  作    者:   *  函数功能:通过读取CPU对应的中断向量表寄存器,可以判断和相应中断类型 *  输入参数:读取中断类型寄存器 *			 每个Bit代表一种中断类型的使能控制,0-中断禁止、1-中断使能) *               		bit0 :	ETH有帧等待CPU接收                           *               		bit1:	ETH发送完来自CPU的一帧数据指示            *               		bit2:	ETH有空间接收来自CPU的帧                    *               		bit3:	ETH连接状态变化中断                       *               		bit4:	ETH速度模式变化中断                         *              		bit5:	ETH双工模式变化中断                         *               		bit6:	MDIO完成CPU操作指示                        *               		bit7:	总线操作出错指示中断信号                        *               		bit8:	重传次数超限指示                        *  输出参数: *  返回类型:  return 1->soft reset ok; return 0->soft reset fail. *  其他说明:  *  调用函数:  建议  *  主调函数:  建议 *========================================================================*/UINT32 ETH_ClearInterruptStatus(In UINT32 u32InterruptClear){	CPU_Int_U ReadInterrupt;	ReadInterrupt.w32 = *(UINT32 *) ETH_GLB_REG(0);	/*read clear the status*/	*(UINT32 *) ETH_GLB_REG(0) = ((ReadInterrupt.w32) & (u32InterruptClear));	if ((u32InterruptClear & (*(UINT32 *) ETH_GLB_REG(0))) == 0)	{		return 1;	}	return 0;}/*======================================================================= *  函数名称:void ETH_SetNormalInterruptStyle(In UINT32 u32InterruptNorChoi) *  初稿完成:2005/1/7    *  作    者:   *  函数功能:配置CPU必须响应的普通中断类型 *  输入参数:配置值(每个Bit代表一种中断类型的使能控制,0-中断禁止、1-中断使能) *               		bit0 :	ETH有帧等待CPU接收                           *               		bit1:	ETH发送完来自CPU的一帧数据指示            *               		bit2:	ETH有空间接收来自CPU的帧                    *               		bit3:	ETH连接状态变化中断                       *               		bit4:	ETH速度模式变化中断                         *              		bit5:	ETH双工模式变化中断                         *               		bit6:	MDIO完成CPU操作指示                        *               		bit7:	总线操作出错指示中断信号                        *               		bit8:	重传次数超限指示                        *  输出参数: *  返回类型:  无 *  其他说明:  *  调用函数:  建议  *  主调函数:  建议 *========================================================================*/void ETH_SetNormalInterruptStyle(In UINT32 u32InterruptNorChoi){//	CPU_Int_U SetCPUInterrNor;//	SetCPUInterrNor.w32 = u32InterruptNorChoi;//	*(UINT32 *) ETH_GLB_REG(2) = SetCPUInterrNor.w32;	*(UINT32 *) ETH_GLB_REG(2) = (u32InterruptNorChoi & 0x1FF);}/*======================================================================= *  函数名称:UINT32 ETH_ReadSoftResetFinishFlag (Out UINT32 *pu32ResetFiniInf) *  初稿完成:2005/1/8    *  作    者:   *  函数功能:读取ETH软复位之后硬件初始化完成的指示标志位,以便于确定是否可以做相应操作 *  输入参数: *  输出参数:return 1->soft reset ok; return 0->soft reset fail. *  返回类型:  无 *  其他说明:  *  调用函数:  建议  *  主调函数:  建议 *========================================================================*/UINT32 ETH_ReadSoftResetFinishFlag (Out UINT32 *pu32ResetFiniInf){	Init_OnResetInf_U ReadResetFin;	ReadResetFin.w32 = *(UINT32 *) ETH_GLB_REG(3);	*pu32ResetFiniInf = ReadResetFin.w32;	if ((ReadResetFin.w32 ^ 0x7) != 0)	{		return Failure;	}	else	{		return Success;	}}/*======================================================================= *  函数名称:UINT32 ETH_SoftResetPort(In UINT32 u32PortReset) *  初稿完成:2005/1/6    *  作    者:   *  函数功能:端口复位控制1-复位 *  输入参数: *  输出参数:   *  返回类型:  return 0->reset fail; return 1->reset success. *  其他说明:  *  调用函数:  建议  *  主调函数:  建议 *========================================================================*/UINT32 ETH_SoftResetPort(In UINT32 u32PortReset){	UINT16 u16Delay = 0;	Port_Reset_U SoftReset;	SoftReset.w32 = *(UINT32 *) ETH_MAC_REG(2);	SoftReset.bits.reset_port = u32PortReset;	*(UINT32 *) ETH_MAC_REG(2) = SoftReset.w32;	for(u16Delay = 0 ; u16Delay < 5000 ; u16Delay ++)	{		if ((*(UINT32 *) ETH_GLB_REG(3) ^ 0x7) == 0)		{			return 1;		}	}	return 0;}/*======================================================================= *  函数名称:void ETH_SetPortRMIIOrMII(In UINT32 u32MIIOrRMIIMode) *  初稿完成:2005/1/6    *  作    者:   *  函数功能:设置端口与PHY之间RMII与MII接口模式选择(0-MII,1-RMII) *  输入参数: *	     	 RMII/MII模式 *  输出参数:   *  返回类型:  无 *  其他说明:  *  调用函数:  建议  *  主调函数:  建议 *========================================================================*/void ETH_SetPortRMIIOrMII (In UINT32 u32MIIOrRMIIMode) {	Set_RMII_Endian_U SetRMIIOrMII;	SetRMIIOrMII.w32 = *(UINT32 *) ETH_GLB_REG(4);	SetRMIIOrMII.bits.mode_rmii = u32MIIOrRMIIMode;	*(UINT32 *) ETH_GLB_REG(4) = SetRMIIOrMII.w32;}/*======================================================================= *  函数名称:void ETH_SetEndian (In UINT32 u32InEndian, In UINT32 u32OutEndian) *  初稿完成:2005/1/6    *  作    者:   *  函数功能:设置SDRAM的大小端模式,1-小端,0-大端 *  输入参数: *  输出参数:   *  返回类型:  无 *  其他说明:  *  调用函数:  建议  *  主调函数:  建议 *========================================================================*/void ETH_SetEndian (In UINT32 u32InEndian, In UINT32 u32OutEndian) {	Set_RMII_Endian_U SetEndian;	SetEndian.w32 = *(UINT32 *) ETH_GLB_REG(4);	SetEndian.bits.in_endian = u32InEndian;	SetEndian.bits.out_endian = u32OutEndian;	*(UINT32 *) ETH_GLB_REG(4) = SetEndian.w32;}/*======================================================================= *  函数名称:void ETH_SetFrameQueueLength (In UINT32 u32InputLength, In UINT32 u32OutputLength) *  初稿完成:2005/1/6    *  作    者:   *  函数功能:设置输入和输出队列长度,长度总和<= 32 *  输入参数: *  输出参数:   *  返回类型:  return 0->set fail; return 1->set success. *  其他说明:  *  调用函数:  建议  *  主调函数:  建议 *========================================================================*/UINT32 ETH_SetFrameQueueLength (In UINT32 u32InputLength, In UINT32 u32OutputLength){	Set_FrameQueueLength_U SetFrameQueue;	Set_CPUReadSpeLinDup_U SpeLinDupMode;	if ( (u32InputLength == 0) || (u32OutputLength == 0) )	{		//dbg_info("The length can not be 0!\n");		return 0;	}	if ( (u32InputLength + u32OutputLength) > 32 )	{		//dbg_info("InputLength add OutputLength must smaller than 32!\n");		return 0;	}	/*for the queue can be set perfect, we must unlink the port first, and clear the queue frame*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -