获取硬件资源方法

3900阅读 0评论2015-06-19 lsxuan驱动
分类:嵌入式

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( );   //释放中断资源



上一篇:时间管理 4> 动态定时器
下一篇:ubuntu 内核卸载