免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1041 | 回复: 0
打印 上一主题 下一主题

Dm9000 移植 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-27 20:45 |只看该作者 |倒序浏览

Dm9000 移植:
主要以各自的开发板,以及DM的引脚连线.
第一要确定数据地址,第二要确定命令地址,第三要确定中断是低还是高有效.
以mini2440为例:
我自己的开发板DM是连在nGCS4的.
所以其数据地址就为:2000 0000(当然可以是nGCS4内的其他地址,不要走出nGCS4就行了)
而DM的CMD是连在ADDR2上的
所以命令是地址就是:2000 00020
中断是高是低有效由开发板 ,还有设置而定的.
Interrupt request
This pin is high active at default,its polarity can be modified by EEPROM setting or strap pin MDC
上面是DM手册所说的(手册里打进INT就可以搜到),也就是中断默许是高电平有效的,如果MDC脚被拉到高电平 那么就是低电平有效,
当然也可以在EEPROM中设定.我自己的板MDC是没有接空的,所以是高电平有效.


2.在arch/arm/mach-s3c2440/mach-smdk2440.c 中添加dm9000的platform_device。
#include
static struct resource dm9000_resource[] = {
[0]= {
.start = 0x20000000
.end  = 0x20000000
.flags = IORESOURCE_MEM,
},
[1]={
.start =  0x20000020
.end  = 0x20000020
.flags = IORESOURCE_MEM,
},
[2]={
.start = IRQ_EINT7,
.end   = IRQ_EINT7,//我的是连在7号中断线上的
.flags = IORESOURCE_IRQ,
}
};

static struct dm9000_plat_data  dm9000_platdata ={
.flags = DM9000_PLATF_16BITONLY,//work in 16bit mode //要以自己的开的板设定 我的是工作在16位的
};

struct platform_device eievk_dm9000_device = {
.name = "dm9000",
.id = -1,
.num_resources = 3,
.resource = dm9000_resource,
.dev = {
.platform_data = & dm9000_platdata,
}
};
EXPORT_SYMBOL(eievk_dm9000_device);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

接下就是使IRQ_EINT7高是平有效(你的呢?)
开外部中断.
Dm9000.c中
加入:
#include
#define EXTINT0          (0x56000088)
#define EXTINT7_HIGHT  (1
#define INTMSK           (0x4A000008)
#define EXTINT7_OPEN  (~(1
#define EINTMASK         (0x560000a4)
//外部中断屏蔽

//外部中断方式

static int __devinit
dm9000_probe(struct platform_device *pdev)中加入:
u32 id_val;
static void *extint0,*intmsk,*eintmsk;  
unsigned int value=0;
value = __raw_readl(S3C2410_BWSCON);
value &= ~(S3C2410_BWSCON_WS4|S3C2410_BWSCON_ST4|
                             S3C2410_BWSCON_DW4_32);
value |= (S3C2410_BWSCON_ST4|S3C2410_BWSCON_DW4_16);
       __raw_writel(value, S3C2410_BWSCON);
       value=0;
value = (S3C2410_BANKCON_Tacs4   |S3C2410_BANKCON_Tcos4|
                     S3C2410_BANKCON_Tacc14 |S3C2410_BANKCON_Tcoh4|
                     S3C2410_BANKCON_Tcah4   |S3C2410_BANKCON_Tacp6|
                     S3C2410_BANKCON_PMCnorm);
__raw_writel(value,S3C2410_BANKCON4);
//配制总线 不然会100% loss
/////////////////////////////////////////////////////
s3c2410_gpio_cfgpin(S3C2410_GPF7, S3C2410_GPF7_EINT7); //设定GPF7为中断所用(由于GPF7多功能脚 所以配制)
extint0=ioremap_nocache(EXTINT0,4);
//设定外部中断7为高电平 (要以板子而定)
writel((readl(extint0)&0x8fffffff)|EXTINT7_HIGHT,extint0);
      

//开外部中断7  
intmsk=ioremap_nocache(INTMSK,4);
writel(readl(intmsk)&(~(1   
/////////////////////////////////////////////////////////
eintmsk=ioremap_nocache(EINTMASK,4);
writel(readl(intmsk)&(~(1
/////////////////////////////////////////////
iounmap(intmsk);
iounmap(extint0);
iounmap(eintmsk);
////////////////////////////////////////////////////
ndev = alloc_etherdev(sizeof (struct board_info));
//////////////
启动以后就可以ifconfig eth0 IP来配制.
这里会有这样的消息说什么ipq flags not set 这个没有什么事的.


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/46785/showart_1882282.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP