获取硬件资源
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( ); //释放中断资源
硬件: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( ); //释放中断资源
相关文章推荐
- asp 调用 vb(activex dll) ,参数传递(传引用)需要注意
- easyUI datagrid 查询方法
- Android中的Handler01
- SVN老是清理失败,显示清理乱码
- SVN老是清理失败,显示清理乱码
- linux ddns client ddclient
- oracle 在操作blob该字段是否会产生很多redo
- asp <----> vb(com,dll) <---> c 来回的调用,生命在于折腾
- 社説 20150618 18歳選挙権 若者の政治参加を促進したい
- HTTP/1.1 100 Continue - I 服了 You
- 升级到OpenCms 9.5.1后原来的xmlpage类型文档不能操作解决
- 社説 20150618 党首討論 岡田氏は米艦防護を拒むのか
- 报错 No resource identifier found for attribute '****' in package '***.***'解决办法
- 期末实验单下载
- 研究HttpClient的使用(黏贴复制的,仅作学习记录)
- java 并发信号量和普通锁的区别
- Android 代码性能优化小技巧
- 日经社説 20150618 安保法案の修正協議をためらうな
- 项目错误总结
- C和C++混合编译