Chinaunix首页 | 论坛 | 博客
  • 博客访问: 322237
  • 博文数量: 85
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 800
  • 用 户 组: 普通用户
  • 注册时间: 2014-10-18 15:21
文章分类

全部博文(85)

文章存档

2017年(1)

2016年(19)

2015年(55)

2014年(10)

我的朋友

分类: 嵌入式

2015-12-05 23:32:00

疑问
1.为什么一开始需要用 ioremap去生成一个虚拟地址
base_addr=ioremap(S3C2410_PA_ADC,0x20);
而在Led或者按键驱动中却没调用这个,而是直接使用的
        s3c2410_gpio_cfgpin(led_table[i], led_cfg_table[i]);
        s3c2410_gpio_setpin(led_table[i], 0);
static unsigned long led_table [] = {
    S3C2410_GPB(5),
    S3C2410_GPB(6),
    S3C2410_GPB(7),
    S3C2410_GPB(8),
};
------------------------------------------------------------------------------------------------------------------------------------------
原因:
在linux中操作的是虚拟地址,全部物理寄存器地址都必须转换为虚拟地址。所以需要用ioremap转换。在GPIO操作中,s3c2410_gpio_cfgpin()函数内使用了
#define S3C24XX_GPIO_BASE(x)  S3C2410_GPIO_BASE(x)
#define S3C2410_GPIO_BASE(pin)   ((((pin) & ~31) >> 1) + S3C24XX_VA_GPIO)//已经使用了虚拟地址

2.    clk_get 做何用途?
adc_clock = clk_get(NULL, "adc");
clk_enable(adc_clock);
-----------------------------------------------------------------------------------------------------------------------------------------
clk_get从一个时钟list链表中以字符id名称来查找一个时钟clk结构体并且返回,最后调用clk.enable(),来时能对应的外设时钟源。


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