全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

Linux驱动操作寄存器

时间:2023-09-26 16:34

人气:

作者:admin

标签: 驱动  寄存器 

导读:首先在设备树里定义一个节点,例如: uart0: serial@10010000 {    compatible = "sifive,uart0";    reg =  ;    status = "okay"; } @ 符号后面是寄存器的基地址,然后填写 compatible 和 reg 属性,...

首先在设备树里定义一个节点,例如:

uart0:serial@10010000{

compatible="sifive,uart0";

reg=<0x0 0x10010000 0x0 0x1000>;

status="okay";

}

@符号后面是寄存器的基地址,然后填写compatiblereg属性,status属性设置为okay

reg属性中,第二参数为寄存器基址,与@符号后面的地址对应,第四个参数是映射的大小。

驱动中操作:

#defineOFFSET0x60//某个寄存器的偏移地址

staticintmy_probe(structplatform_device*pdev)

{

structresource*res;

void__iomem*base;

u32regval;

res=platform_get_resource(pdev,IORESOURCE_MEM,0);

base=devm_ioremap_resource(&pdev->dev,res);

//寄存器读写

regval=readl(base+OFFSET);//读寄存器

regval|=(1<< 0);//赋值

writel(regval,base+OFFSET);//写寄存器

return0;

}

先调用platform_get_resource获取IORESOURCE_MEM资源,就是获取了设备树中的reg属性,返回的resource结构体中包含了起始地址和结束地址。然后调用devm_ioremap_resource映射这个资源,就能得到一个虚拟地址。后续对该虚拟地址的操作,就等同于对寄存器物理地址的操作。

读写寄存器,可以调用readlwritel函数。先读取寄存器的值放到临时变量中,赋值后,再一次性写入。

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信