Chinaunix首页 | 论坛 | 博客
  • 博客访问: 80091
  • 博文数量: 24
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 135
  • 用 户 组: 普通用户
  • 注册时间: 2014-04-03 10:38
文章分类

全部博文(24)

文章存档

2015年(1)

2014年(23)

我的朋友

分类: LINUX

2014-04-26 17:53:48

一. 查看datasheet确认物理信息
1. 查看原理图确认物理基地址

下图是dm9000a的引脚图,从图可知dm9000a是CSN1


CSN1连在了cpu的XMOCSN1上即BANK1

从可知BANK1的基地址是0x1800_0000

2. 确认地址线与数据线的地址
dm9000的cmd引脚是控制数据还是地址的,它连在了6410的addr2上
同时在中有:
当cmd是高,访问的是数据
当cmd是低,访问的是地址
访问不同的地址,ADDR2的值是不同的,即:
0x1800 0000   ADDR2=0   地址线
0x1800 0004   ADDR2=1   数据线
3. 确认dm9000a的位数
中16bit的连线图如下图所示.

16bit的连线图与ok6410中dm9000a的连线图是一样的,
所以ok6410中dm9000a的位数是16bit
4. 中断号的确认
a. 从中可以看出dm9000的中断引脚是IRQ_LAN,
IRQ_LAN与CPU的连线如下图所示

IRQ_LAN连到了XEINT7上面,所以dm9000的中断号是EINT_7.
b. 下面看一下它是上升沿触发还是下降沿触发

EECS, EECK EED_IO这三个引脚都悬空,即都是低电平
在的datasheet中有如下描述
EECK --> 控制中断是高触发还是低触发; high-->低有效; low-->中断高有效
this pin is also used as the strap pin of the polarity of the INT pin
EECS --> 控制总线是8bit还是16bit; high-->8bit; low-->16bit
this pin is also used as the strap pin of the polarity of the internal memory data bus width
二. 移植过程
1. 在arch/arm/mach-s3c64xx/mach-smdk6410.c中添加dm9000的设备信息
  1. static struct resource smdk6410_dm9000_resource[] = {
  2.     [0] = {
  3.         .start = SMDK6410_PA_DM9000,
  4.         .end = SMDK6410_PA_DM9000 + 3,
  5.         .flags = IORESOURCE_MEM,
  6.     },
  7.     [1] = {
  8.         .start = SMDK6410_PA_DM9000 + 4,
  9.         .end = SMDK6410_PA_DM9000 + 4 + 500,
  10.         .flags = IORESOURCE_MEM,
  11.     },
  12.     [2] = {
  13.         .start = IRQ_EINT(7),
  14.         .end = IRQ_EINT(7),                             //中断号是7
  15.         .flags = IORESOURCE_IRQ | IRQF_TRIGGER_HIGH,    //上升沿触发
  16.     },
  17. };

  18. static struct dm9000_plat_data smdk6410_dm9000_pdata = {
  19.     .flags     = (DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM),   //16bit,没有eeprom
  20. };

  21. static struct platform_device smdk6410_device_eth = {
  22.     .name    = "dm9000",
  23.     .id    = -1,           //-1说明只有dm9000这个名,没有dm9000.12等
  24.     .num_resources    = ARRAY_SIZE(smdk6410_dm9000_resource),
  25.     .resource    = smdk6410_dm9000_resource,
  26.     .dev    = {
  27.         .platform_data = &smdk6410_dm9000_pdata,
  28.     },
  29. };
在arch/arm/mach-s3c64xx/include/map.h中
  1. #define SMDK6410_PA_DM9000 (0x18000000)

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