Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1264541
  • 博文数量: 404
  • 博客积分: 10011
  • 博客等级: 上将
  • 技术积分: 5382
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-03 16:29
文章存档

2010年(40)

2009年(140)

2008年(224)

我的朋友

分类: LINUX

2008-09-27 11:06:55

一个数字问题,花费两天时间,真顶不顺。如果这个所谓的革新公司提供实验板的原理图就好了,可惜...我怀疑他们的板都不知从那里抄来的,也确实佩服他们的销售和我们学校的领导,多么成功的交易啊...

      好,问题解决,留下笔记。Linux 2.6.19.2 ,参考 mach-vr1000.c 和网上众多例子...

vi arch/arm/mach-s3c2410/mach-smdk2410.c ,加入:

static struct resource s3c_d9k_resource[] = {
        [0] = {
                .start = 0x0A000000 + 0x300,
                .end   = 0x0A000000 + 0x300 + 0x03,
                .flags = IORESOURCE_MEM
        },
        [1] = {
                .start = 0x0A000000 + 0x300 + 0x4,
                .end   = 0x0A000000 + 0x300 + 0x4 + 0x7f,
                .flags = IORESOURCE_MEM
        },
        [2] = {
                .start = IRQ_EINT0,
                .end   = IRQ_EINT0,
                .flags = IORESOURCE_IRQ
        }
};
static struct dm9000_plat_data s3c_device_d9k_platdata = {
        .flags= DM9000_PLATF_16BITONLY
};

struct platform_device s3c_device_d9k = {
        .name= "dm9000",
        .id= 0,
        .num_resources= ARRAY_SIZE(s3c_d9k_resource),
        .resource= s3c_d9k_resource,
        .dev= {
                .platform_data = &s3c_device_d9k_platdata,
        }
};

修改static struct platform_device *smdk2410_devices[] __initdata = {
        &s3c_device_usb,
        &s3c_device_lcd,
        &s3c_device_wdt,
        &s3c_device_i2c,
        &s3c_device_iis,
        &s3c_device_d9k
};
      红色部分是关键,网上的 vr1000.c 和网上大多例子此处都为0x40。经查证,是因为DM9000A的地址线和数据线是复用的,它是通过92脚(CMD)来区分。如果CMD接到 s3c2410的A2脚, 则数据端口的地址 = 地址端口 + 0x04 。那如果是0x40的话,他的CMD应该是接到s3c2410的A7脚。

       奇怪的是 DM9000 在u-boot下也算工作正常,翻查代码,原来有这么两句:

#define DM9000_IO    CONFIG_DM9000_BASE
#define DM9000_DATA    (CONFIG_DM9000_BASE+4)

唉,一切只能怪自己不仔细,客观的说,是经验不足 ^_^

      哈哈,无论如何,终于摆脱 read wrong id 的恶梦,可是,马上又遇到可恶的 IRQ_EINT0 ,一申请0号中断就死机...


转过来,让自己也注意一下

http://weibing.blogbus.com/logs/4437246.html


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