电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

使用IO内存控制硬件点亮LED灯

使用IO内存控制硬件点亮LED灯_第1页
1/20
使用IO内存控制硬件点亮LED灯_第2页
2/20
使用IO内存控制硬件点亮LED灯_第3页
3/20
Linux 中控制 GPIO 点亮 LED 的方法有好几种。一种是使用内核提供的专门用来控制GPIO 的函数来点亮 LED,如:s3c2410_gpio_cfgpin(led_table[i], led_cfg_table[i]); s3c2410_gpio_setpin(led_table[i], 0);一种是通过 IO 内存猎取硬件地址从而控制 GPIO 来点亮 LED,如:void *ioremap(unsigned long phys_addr, unsigned long size);void ioumap(void *addr);这里主要介绍第二种点亮 LED 方式。1. 理论支撑1.1 IO 内存分配和映射1.1.1 在使用 IO 内存之前首先分配 IO 内存区域。分配和撤销 IO 内存区域使用的函数如下: #include struct resource *request_mem_region(unsigned long start,unsigned long len,char *name);参数说明:start 分配内存起始地址 len 分配内存长度 返回 成功非 NULL,否则返回 NULL。相应的释放函数: void release_mem_region(unsigned long start,unsigned long len); 1.1.2 在 linux 中不能使用实际的物理地址,要对指定的物理地址进行操作必须先将物理地址映射到虚拟地址中。下面的函数就是实现物理地址到虚拟地址的映射:#include void *ioremap(unsigned long phys_addr, unsigned long size);参数说明:phys_addr 需要访问的物理内存(寄存器)的首地址 size 内存区域大小返回与该段物理地址对应的虚拟地址 相应的撤销映射关系的函数是:void ioumap(void *addr); 1.1.3 使用 IO 内存时,request_mem_region 函数并不是必须的,该函数只是在内核中标志该内存区域已经分配出去,不能再进行分配出去。但是,这不不是说别的驱动不能再使用该 IO 内存。至于能不能使用,分下面 2 种情况: 1. 两个驱动都用 request_mem_region 分配相同的 IO 内存,则两个驱动只能有一个驱动可以使用。 2. 两个驱动只有一个使用了 request_mem_region 函数,那么这两个驱动可以同时使用,并可以同时访问该 IO 内存。 1.2 访问 IO 内存 ioremap 函数的返回值可以直接当做指针(指向对应的物理内存(寄存器)地址)使用,但是这种使用方式不具有可移植性。使用下面的访问 IO 内存的专用函数符合可移植性要求。 从 I/O 内存读取, 使用下列函数之一: unsigned int ioread8(void *addr); unsigned int ioread16(void *addr); unsigned int ioread32(void *addr);参数:addr 是从...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

使用IO内存控制硬件点亮LED灯

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部