Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7675871
  • 博文数量: 961
  • 博客积分: 15795
  • 博客等级: 上将
  • 技术积分: 16612
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-07 14:23
文章分类

全部博文(961)

文章存档

2016年(1)

2015年(61)

2014年(41)

2013年(51)

2012年(235)

2011年(391)

2010年(181)

分类: 嵌入式

2010-08-16 20:26:00

嵌入式学习入门 http://blog.chinaunix.net/u3/117680/showart.php?id=2300212  

内存映射分3个层次:

·    开发板的层次(如:声卡,网卡和开发板相关的部分)

·    最小系统的层次(系统必需的几个,如GPIO,IRQ,MEMCTRL,UART

·    其他系统的层次(不影响开机的部分,如:usblcdadc

  开发板的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映射,如果没有的话,就在开发板部分加入。

 

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