您的位置:首页 > 其它

获取硬件资源

2015-06-18 09:04 197 查看
0> 环境:

硬件:Tiny4412

软件:linux-3.5内核源码包

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

1> 将物理地址动态映射---- > 虚拟地址:

_ _arm_ioremap(unsigned long phys_addr,
// 物理起始地址

size_t size, //映射虚拟空间大小,以字节为单位

unsigned int mtype //映射空间权限

);

/linux-3.5/include/asm-generic/sizes.h 中定义了size_t 宏值:

例:#define SZ_1 0x00000001

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

使用:以led为例:

#define GPM4BASE 0x11000000

#define GPM4CON 0x02e0

#define GPM4DAT 0x02e4

unsigned longvir = ioremap(GPM4BASE, SZ_4K); //调用到_ _arm_ioremap( );

tmp = ioread32(vir+GPM4CON); //读数据

iowrite32(tmp, vir+GPM4CON);
//写数据

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

2> 静态映射:struct map_desc

待解决??????

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

3> gpio:参考/linux-3.5/Documentation/gpio.txt

1》/linux-3.5/arch/arm/mach-exynos/include/mach/gpio.h 为Exynos4412的GPIO编了号:

int led1_n = EXYNOS4X12_GPM4(0); //得到编号

2》gpio_is_valid(int number); //判断gpio编号是否合法

3》 gpio_request(led1_n, "led1"); //注册GPIO编号

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

使用:

int gpio_direction_input(unsigned gpio); //设为输入功能

int gpio_direction_output(unsigned gpio, int value); //设为输出功能,并写入值。

int gpio_get_value(unsigned gpio); //读值

void gpio_set_value(unsigned gpio, int value) ; //写值

note:

void gpio_free(unsigned gpio) ;
//用完必须释放GPIO资源

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

4> 获得中断资源:以key1为例:

1》 int key1_n = EXYNOS4_GPX3(2); //获得GPIO编号

2》 gpio_to_irq(key1_n); //将GPIO号转换为中断号

3》request_irq( );
//注册中断

4》free_irq( ); //释放中断资源
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: