文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Dm9000 移植

Dm9000 移植

时间:2009-03-27  来源:帆锅

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 <linux/dm9000.h>

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 <asm-arm/arch-s3c2410/regs-gpio.h>

#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 这个没有什么事的.

相关阅读 更多 +
排行榜 更多 +
房间毁灭模拟器最新版

房间毁灭模拟器最新版

休闲益智 下载
街头追逐者最新版

街头追逐者最新版

休闲益智 下载
弓箭手2内置作弊菜单

弓箭手2内置作弊菜单

休闲益智 下载