Chinaunix首页 | 论坛 | 博客
  • 博客访问: 42748
  • 博文数量: 18
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 185
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-23 21:00
文章分类

全部博文(18)

文章存档

2011年(1)

2009年(17)

我的朋友

分类: LINUX

2009-03-27 20:45:58

Dm9000 移植:

主要以各自的开发板,以及DM的引脚连线.

第一要确定数据地址,第二要确定命令地址,第三要确定中断是低还是高有效.

mini2440为例:

我自己的开发板DM是连在nGCS4.

所以其数据地址就为:2000 0000(当然可以是nGCS4内的其他地址,不要走出nGCS4就行了)

DMCMD是连在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 中添加dm9000platform_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<<28)

#define INTMSK           (0x4A000008)

#define EXTINT7_OPEN  (~(1<<4))

#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<<4)),intmsk); //   

/////////////////////////////////////////////////////////

eintmsk=ioremap_nocache(EINTMASK,4);

writel(readl(intmsk)&(~(1<<7)),eintmsk);//

/////////////////////////////////////////////

iounmap(intmsk);

iounmap(extint0);

iounmap(eintmsk);

////////////////////////////////////////////////////

ndev = alloc_etherdev(sizeof (struct board_info));

//////////////

启动以后就可以ifconfig eth0 IP来配制.

这里会有这样的消息说什么ipq flags not set 这个没有什么事的.

阅读(896) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-01-10 14:07:38

请问博主, .end = IRQ_EINT7,//我的是连在7号中断线上的 这句话的意思是说,你的dm9000的INT脚连接到了cpu的gpio7上面吗?? 7号中断线是什么意思?