动态映射之结构体方式操作寄存器
2017-01-24 13:34
260 查看
动态映射之结构体方式操作寄存器
仿效真实驱动中,用结构体封装的方式来进行单次多个寄存器的地址映射。即代替文章《随笔–Linux字符设备驱动开发基础》中动态映射操作LED一节的基础动态映射方式#include <linux/io.h> #include <linux/ioport.h> ...... typedef struct GPJ0REG { volatile unsigned int gpj0con; volatile unsigned int gpj0dat; }gpj0_reg_t; //#define GPJ0CON_PA 0xe0200240 //#define GPJ0DAT_PA 0xe0200244 #define GPJ0_REGBASE 0xe0200240 //unsigned int *pGPJ0CON; //指针类型才能接受ioremap返回的地址 //unsigned int *pGPJ0DAT; gpj0_reg_t *pGPJ0REG; ... // 模块安装函数 static int __init chrdev_init(void) { //注册字符设备驱动 ... #if 0 // 使用动态映射的方式来操作寄存器 if (!request_mem_region(GPJ0CON_PA, 4, "GPJ0CON")) return -EINVAL; if (!request_mem_region(GPJ0DAT_PA, 4, "GPJ0DAT")) return -EINVAL; pGPJ0CON = ioremap(GPJ0CON_PA, 4); pGPJ0DAT = ioremap(GPJ0DAT_PA, 4); *pGPJ0CON = 0x11111111; *pGPJ0DAT = ((0<<3) | (0<<4) | (0<<5)); // 亮 #endif // 2步完成映射 if (!request_mem_region(GPJ0_REGBASE, sizeof(gpj0_reg_t), "GPJ0REG")) return -EINVAL; pGPJ0REG = ioremap(GPJ0_REGBASE, sizeof(gpj0_reg_t)); // 映射之后用指向结构体的指针来进行操作 // 指针使用->结构体内元素 的方式来操作各个寄存器 pGPJ0REG->gpj0con = 0x11111111; pGPJ0REG->gpj0dat = ((0<<3) | (0<<4) | (0<<5)); // 亮 ... } // 模块卸载函数 static void __exit chrdev_exit(void) { ... // 解除映射 #if 0 iounmap(pGPJ0CON); iounmap(pGPJ0DAT); release_mem_region(GPJ0CON_PA, 4); release_mem_region(GPJ0DAT_PA, 4); #endif iounmap(pGPJ0REG); release_mem_region(GPJ0_REGBASE, sizeof(gpj0_reg_t)); ... //注销字符设备驱动 ... }
动态映射结构体方式操作寄存器:在结构体中添加相应成员就可以,不用像之前的那么麻烦
相关文章推荐
- 字符设备驱动高级篇5——静态映射表、动态映射结构体方式操作寄存器
- Linux驱动中建立动态映射来实现操作寄存器
- 关于C中struct结构体的动态malloc和memcpy的指针操作
- Linux内核访问外设I/O资源的方式-动态映射(ioremap)与静态映射(map_desc)方式
- STM32F1学习-寄存器地址映射以及位带操作
- STM32寄存器操作方式学习-时钟配置
- STM32寄存器操作方式学习-通用定时/计数器之影子寄存器
- 【Demo 0114】内存映射方式打开操作大文件
- Linux内核访问外设I/O资源的方式(设备物理地址和设备虚拟地址),静态映射和动态映射
- arm9的操作模式,寄存器,寻址方式
- [原创].菜农M0助学板PDMA读取ADC样本小练(寄存器操作方式)
- Itext操作word文档动态生成数学试卷及Latex转mathML公式处理方式
- 【连载】【FPGA黑金开发板】NIOS II那些事儿--NIOS II下关于无法进行寄存器方式操作PIO的问题解析(十四)
- 寄存器映射与直接操作寄存器
- 驱动学习7--led动态映射与结构体
- 动态单链表的传统存储方式和10种常见操作-C语言实现
- [笔记].菜农M0助学板之GPIO按键之边沿检测小练(寄存器操作方式)
- [原创].菜农M0助学板PWM呼吸灯小练(寄存器操作方式)
- Linux内核访问外设I/O资源的方式(设备物理地址和设备虚拟地址),静态映射和动态映射
- STM32寄存器操作方式学习-GPIO