lingigi
驱动牛犊
驱动牛犊
  • 注册日期2004-02-21
  • 最后登录2004-05-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2325回复:7

怎么对网卡寄存器进行写和读操作?

楼主#
更多 发布于:2004-05-10 20:44
网卡:RTL8019as , 三星S3C44B0X ARM芯片
u8_t 为8位数据类型
void Write_Reg(u8_t Reg , u8_t value)//写网卡寄存器
{
//可以帮我写吗,谢谢
}
u8_t Read_Reg(u8_t Reg)//读网卡寄存器
{
//可以帮我写吗,谢谢
}
freducn2002
驱动小牛
驱动小牛
  • 注册日期2002-06-26
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望29点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2004-05-10 21:50
armlinux里不是有8139的例子吗,看看一下
rou_wexx
驱动牛犊
驱动牛犊
  • 注册日期2003-03-04
  • 最后登录2008-11-10
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-05-11 17:38
可以参考
#define outportb(port, data) *((volatile U8 *)(port)) = (U8)(data) 这个定义.
lingigi
驱动牛犊
驱动牛犊
  • 注册日期2004-02-21
  • 最后登录2004-05-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-05-12 10:17
rou_wexx :
*((volatile U8 *)(port)) = (U8)(data)
这样就可以写到网卡寄存器吗?
可以写得具体点吗
rou_wexx
驱动牛犊
驱动牛犊
  • 注册日期2003-03-04
  • 最后登录2008-11-10
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-05-12 10:31
这只是一个基本的i/o操作,具体的怎么操作就要看你8019是怎么连的了,请注意你所设置的8019的io起始地址一定要一致因为isa总线一般都是从300h开始的i/ospace!具体的可以参考8019的spec。
lingigi
驱动牛犊
驱动牛犊
  • 注册日期2004-02-21
  • 最后登录2004-05-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-05-16 21:50
是否可以这样写:
#define ARM_NET_BASE (0xfffa0000) // 网卡基地址
#define NET_CR (ARM_NET_BASE + 0x00) //网卡命令寄存器
...
...
#define __arch_putb(v,a)        (*(volatile unsigned char *)(a) = (v))
#define __arch_getb(a)          (*(volatile unsigned char *)(a))
#define outb(v,a)  __arch_putb(v,a)
#define inb(a)     __arch_getb(a)
void main()
{
...
outb(0x12 , NET_CR) ;
.....
}
zhangzhuoliang
驱动牛犊
驱动牛犊
  • 注册日期2003-06-23
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望42点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-05-22 11:14
typedef unsigned char __INTIO *IORegInt8;
typedef unsigned char __EXTIO *IORegExt8;
typedef unsigned short int __INTIO *IORegInt16;
typedef unsigned short int __EXTIO *IORegExt16;

#define ETHCTRL (*(IORegExt8)(IOBASE + 0))
#define ETHWRITE (*(IORegExt8)(IOBASE + 1))
#define ETHREAD (*(IORegExt8)(IOBASE + 2))

#define R_NONE 0xE0
#define R_IOWR 0x60
#define R_WR_OE 0xA0
#define R_IORD 0xC0

static void iowrite(INT8U reg, INT8U c)
{
ETHCTRL = reg | R_NONE
ETHWRITE = c;
ETHCTRL = reg | (R_WR_OE & R_IOWR);
BUSYWAIT();
ETHCTRL = reg | R_WR_OE;
ETHCTRL = reg | R_NONE;
}

/*
 * Function to read a byte from the specified RT8019 register.
 */
static INT8U ioread(INT8U reg)
{
INT8U c;

ETHCTRL = reg | R_NONE; //write reg number to ADDRESS/CONTROL latch
ETHCTRL = reg | R_IORD; //Set R_IORD to 0
BUSYWAIT(); //wait 410ns
ETHCTRL = reg  | R_NONE; //Set R_IORD to 1
c = ETHREAD; //read value of the reg
return c;
}
有人这样写!但是有几点不知道什么意思!希望跟搂主一起讨论一下!
intio, _extio 关键词是啥意思啊1
rou_wexx
驱动牛犊
驱动牛犊
  • 注册日期2003-03-04
  • 最后登录2008-11-10
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-05-24 22:00
我想应该和前面的volatile 只不过起了个不同的名字而已,作用是一样的啦。
游客

返回顶部