当前位置: 首页 > news >正文

网站网站制作价格建站网站专业网站建设总结

网站网站制作价格建站网站,专业网站建设总结,jquery制作简单的网页,google搜索引擎一、 ioremap() 函数基础概念 几乎每一种外设都是通过读写设备上的寄存器来进行的#xff0c;通常包括控制寄存器、状态寄存器和数据寄存器三大类#xff0c;外设的寄存器通常被连续地编址。根据CPU体系结构的不同#xff0c;CPU对IO端口的编址方式有两种#xff1a; a -- … 一、 ioremap() 函数基础概念 几乎每一种外设都是通过读写设备上的寄存器来进行的通常包括控制寄存器、状态寄存器和数据寄存器三大类外设的寄存器通常被连续地编址。根据CPU体系结构的不同CPU对IO端口的编址方式有两种 a -- I/O 映射方式I/O-mapped 典型地如X86处理器为外设专门实现了一个单独的地址空间称为I/O地址空间或者I/O端口空间CPU通过专门的I/O指令如X86的IN和OUT指令来访问这一空间中的地址单元。 b -- 内存映射方式Memory-mapped RISC指令系统的CPU如ARM、PowerPC等通常只实现一个物理地址空间外设I/O端口成为内存的一部分。此时CPU可以象访问一个内存单元那样访问外设I/O端口而不需要设立专门的外设I/O指令。 但是这两者在硬件实现上的差异对于软件来说是完全透明的驱动程序开发人员可以将内存映射方式的I/O端口和外设内存统一看作是I/O内存资源。 一般来说在系统运行时外设的I/O内存资源的物理地址是已知的由硬件的设计决定。但是CPU通常并没有为这些已知的外设I/O内存资源的物理地址预定义虚拟地址范围驱动程序并不能直接通过物理地址访问I/O内存资源而必须将它们映射到核心虚地址空间内通过页表然后才能根据映射所得到的核心虚地址范围通过访内指令访问这些I/O内存资源。 Linux在io.h头文件中声明了函数ioremap用来将I/O内存资源的物理地址映射到核心虚地址空间3GB4GB中这里是内核空间原型如下 1、ioremap函数 ioremap宏定义在asm/io.h内 #define ioremap(cookie,size)           __ioremap(cookie,size,0) __ioremap函数原型为(arm/mm/ioremap.c) void __iomem * __ioremap(unsigned long phys_addr, size_t size, unsigned long flags); 参数 phys_addr要映射的起始的IO地址 size要映射的空间的大小 flags要映射的IO空间和权限有关的标志 该函数返回映射后的内核虚拟地址(3G-4G). 接着便可以通过读写该返回的内核虚拟地址去访问之这段I/O内存资源。 2、iounmap函数 iounmap函数用于取消ioremap所做的映射原型如下 void iounmap(void * addr); 二、 ioremap() 相关函数解析 在将I/O内存资源的物理地址映射成核心虚地址后理论上讲我们就可以象读写RAM那样直接读写I/O内存资源了。为了保证驱动程序的跨平台的可移植性我们应该使用Linux中特定的函数来访问I/O内存资源而不应该通过指向核心虚地址的指针来访问。 读写I/O的函数如下所示 a -- writel() writel()往内存映射的 I/O 空间上写数据wirtel()  I/O 上写入 32 位数据 (4字节)。 原型void writel (unsigned char data , unsigned short addr ) b -- readl() readl() 从内存映射的 I/O 空间上读数据,readl 从 I/O 读取 32 位数据 ( 4 字节 )。   原型unsigned char readl (unsigned int addr ) 变量    addr  是 I/O 地址。 返回值 从 I/O 空间读取的数值。 具体定义如下 [cpp] view plaincopy #define readb __raw_readb   #define readw(addr) __le16_to_cpu(__raw_readw(addr))   #define readl(addr) __le32_to_cpu(__raw_readl(addr))   #ifndef __raw_readb   static inline u8 __raw_readb(const volatile void __iomem *addr)   {       return *(const volatile u8 __force *) addr;   }   #endif       #ifndef __raw_readw   static inline u16 __raw_readw(const volatile void __iomem *addr)   {       return *(const volatile u16 __force *) addr;   }   #endif       #ifndef __raw_readl   static inline u32 __raw_readl(const volatile void __iomem *addr)   {       return *(const volatile u32 __force *) addr;   }   #endif       #define writeb __raw_writeb   #define writew(b,addr) __raw_writew(__cpu_to_le16(b),addr)   #define writel(b,addr) __raw_writel(__cpu_to_le32(b),addr)   三、使用实例还是拿我们写PWM驱动的实例来解析 1、这里我们先定义了一些寄存器这里使用的地址均是物理地址 [cpp] view plaincopy #define GPD0CON       0x114000a0     #define TIMER_BASE    0x139D0000                #define TCFG0         0x0000                    #define TCFG1         0x0004                                 #define TCON          0x0008                  #define TCNTB0        0x000C               #define TCMPB0        0x0010    2、为了使用内存映射我们需先定义指针用来保存内存映射后的地址 [cpp] view plaincopy static unsigned int *gpd0con;     static void *timer_base;     注意这里timer_base 指针指向的类型设为 void, 主要因为上面使用了地址偏移使用void 更有利于我们使用 3、使用ioremap() 函数进行内存映射并将映射的地址赋给我们刚才定义的指针 [cpp] view plaincopy gpd0con  ioremap(GPD0CON,4);     timer_base  ioremap(TIMER_BASE,0x14);    4、得到地址后可以调用 writel() 、readl() 函数进行相应的操作[cpp] view plaincopy writel ((readl(gpd0con)~(0xf0)) | (0x20),gpd0con);     writel ((readl(timer_base TCFG0  )~(0xff0)) | (0xff 0),timer_base TCFG0);      writel ((readl(timer_base TCFG1 )~(0xf0)) | (0x2 0),timer_base TCFG1 );           writel (500, timer_base TCNTB0  );     writel (250, timer_base TCMPB0 );     writel ((readl(timer_base TCON )~(0xf0)) | (0x2 0),timer_base TCON );      可以看到这里先从相应的地址中读取数据修改完毕后再利用writel函数进行数据写入。
http://www.yutouwan.com/news/455910/

相关文章:

  • 网站开发是指微信运营商电话
  • 百度网站的优化方案百度seo优化培训
  • 怎么在工商网站做实名认证宁波seo外包sem
  • 做网站用哪种代码比较好推广网站建设先进个人总结
  • 建立网站大概需要多长时间电脑网页游戏推荐
  • 绿色配色的网站微信怎么做一个小程序
  • 网站推广优化趋势竞价关键词排名软件
  • 沂源网站制作网站推广活动方案
  • 专业建网站服务wordpress tag多条件选择
  • 网站备案地点选择好看网站的浏览器
  • 做网站设计工作的报告注册城乡规划师备考
  • 建设简单网站的图纸合肥手机网站制作建设
  • wordpress网站响应时间太长给漫画网站做推广
  • 做资源网站 文件能存储到云盘吗国家企业信用信息查询平台
  • 关于设计的网站wordpress首页出现恶意链接
  • 湘潭网站建设 多少费用磐石网络广州酒店网站制作
  • 广东专业网站定制换友情链接的网站
  • 平台设计网站公司电话号码音乐网站答辩
  • 网站建设人员岗位要求编程猫的网站是什么
  • 用 htmi5做网站做直播网站用什么程序
  • 济宁百度网站建设网站建设优化建站
  • 网站建设优化文章公司网站修改方案
  • 济南建设网站公司合肥网站建设新闻营销
  • jsp网站开发标准海口网站建设兼职
  • 做网站做论坛赚钱吗百度灰色词优化排名
  • 网络营销导向网站建设的基础是什么微信群运营
  • 网站 空间转移网站logo怎么做动态
  • 织梦网站地图样式济南住房与城乡建设官网
  • 网站经常被挂马江门seo外包公司
  • seo咨询茂名新网站该如何做网站优化呢