免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 685 | 回复: 0

s3c2440的IO静态映射的分析 [复制链接]

论坛徽章:
0
发表于 2011-12-20 09:44 |显示全部楼层
内存映射分3个层次:
  • 开发板的层次(如:声卡,网卡和开发板相关的部分)
  • 最小系统的层次(系统必需的几个,如GPIO,IRQ,MEMCTRL,UART)
  • 其他系统的层次(不影响开机的部分,如:usb,lcd,adc)

  开发板的mapio的初始化: 
  smdk2440_map_io函数中会调用:

  s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
  而开发板相关的内存映射在smdk2440_iodesc,有ISA,声卡,网卡等。定义如下:
  static struct map_desc smdk2440_iodesc[] __initdata = {
    /* ISA IO Space map (memory space selected by A24) */
    { (u32)S3C24XX_VA_ISA_WORD, S3C2410_CS2, SZ_16M, MT_DEVICE },
    { (u32)S3C24XX_VA_ISA_BYTE, S3C2410_CS2, SZ_16M, MT_DEVICE },
  };
 
  最小系统的io初始化:
  s3c24xx_init_io函数会调用:
  iotable_init(s3c_iodesc, ARRAY_SIZE(s3c_iodesc));
  而最小系统相关的io映射在s3c_iodesc,定义如下:
  static struct map_desc s3c_iodesc[] __initdata = {
    IODESC_ENT(GPIO),
    IODESC_ENT(IRQ),
    IODESC_ENT(MEMCTRL),
    IODESC_ENT(UART)
  };
  这个部分是系统启动必须的映射。后续会调用(cpu->map_io)(mach_desc, size);来完成其他映射。
  这个函数会调用:
  iotable_init(s3c2440_iodesc, ARRAY_SIZE(s3c2440_iodesc));
  定义如下:
  static struct map_desc s3c2440_iodesc[] __initdata = {
    IODESC_ENT(USBHOST),
    IODESC_ENT(USBDEV),
    IODESC_ENT(CLKPWR),
    IODESC_ENT(LCD),
    IODESC_ENT(TIMER),
    IODESC_ENT(ADC),
    IODESC_ENT(WATCHDOG),
  };

  综合上述发现,如果一个新加驱动,首先要看是否完成了IO映射,如果没有的话,就在开发板部分加入。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP