阅读:2325回复:7
怎么对网卡寄存器进行写和读操作?
网卡:RTL8019as , 三星S3C44B0X ARM芯片
u8_t 为8位数据类型 void Write_Reg(u8_t Reg , u8_t value)//写网卡寄存器 { //可以帮我写吗,谢谢 } u8_t Read_Reg(u8_t Reg)//读网卡寄存器 { //可以帮我写吗,谢谢 } |
|
沙发#
发布于:2004-05-10 21:50
armlinux里不是有8139的例子吗,看看一下
|
|
板凳#
发布于:2004-05-11 17:38
可以参考
#define outportb(port, data) *((volatile U8 *)(port)) = (U8)(data) 这个定义. |
|
地板#
发布于:2004-05-12 10:17
rou_wexx :
*((volatile U8 *)(port)) = (U8)(data) 这样就可以写到网卡寄存器吗? 可以写得具体点吗 |
|
地下室#
发布于:2004-05-12 10:31
这只是一个基本的i/o操作,具体的怎么操作就要看你8019是怎么连的了,请注意你所设置的8019的io起始地址一定要一致因为isa总线一般都是从300h开始的i/ospace!具体的可以参考8019的spec。
|
|
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) ; ..... } |
|
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 |
|
7楼#
发布于:2004-05-24 22:00
我想应该和前面的volatile 只不过起了个不同的名字而已,作用是一样的啦。
|
|