0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux驱动操作寄存器

麦辣鸡腿堡 来源:嵌入式Linux充电站 作者:Vincent 2023-09-26 16:34 次阅读

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

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函数。先读取寄存器的值放到临时变量中,赋值后,再一次性写入。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    30

    文章

    5037

    浏览量

    117765
  • 驱动
    +关注

    关注

    11

    文章

    1718

    浏览量

    84357
  • Linux
    +关注

    关注

    87

    文章

    10992

    浏览量

    206744
收藏 人收藏

    评论

    相关推荐

    寄存器是什么?怎么操作寄存器点亮LED灯?

    寄存器,是集成电路中非常重要的一种存储单元,通常由触发器组成。在集成电路设计中,寄存器可分为电路内部使用的寄存器和充当内外部接口的寄存器这两类。
    的头像 发表于 07-21 16:59 2982次阅读
    <b class='flag-5'>寄存器</b>是什么?怎么<b class='flag-5'>操作</b><b class='flag-5'>寄存器</b>点亮LED灯?

    寄存器操作

    [table=98%][tr][td]寄存器操作 一, 寄存器的设置和操作特性1,一个寄存器的每个位有其不同的意义,进行不同的设置会使硬件产
    发表于 10-23 18:23

    寄存器操作方法_对寄存器操作的通用方法总结

    本文主要详解寄存器操作方法以及对寄存器操作的通用方法总结,具体的跟随小编来了解一下。
    的头像 发表于 05-22 15:53 2.1w次阅读

    ATMEL SAMC21的ADC驱动寄存器操作寄存器程序合集免费下载

    本文档的主要内容详细介绍的是ATMEL SAMC21的ADC驱动寄存器操作寄存器程序合集免费下载。
    发表于 06-20 08:00 28次下载
    ATMEL SAMC21的ADC<b class='flag-5'>驱动</b><b class='flag-5'>寄存器</b><b class='flag-5'>操作</b>和<b class='flag-5'>寄存器</b>程序合集免费下载

    ATMEL SAMC21的DAC驱动寄存器操作寄存器代码免费下载

    本文档的主要内容详细介绍的是ATMEL SAMC21的DAC驱动寄存器操作寄存器代码免费下载。
    发表于 06-20 08:00 23次下载
    ATMEL SAMC21的DAC<b class='flag-5'>驱动</b><b class='flag-5'>寄存器</b><b class='flag-5'>操作</b>和<b class='flag-5'>寄存器</b>代码免费下载

    Atmel SAMC21的I2C驱动寄存器操作寄存器代码免费下载

    本文档的主要内容详细介绍的是Atmel SAMC21的I2C驱动寄存器操作寄存器代码免费下载。
    发表于 06-20 08:00 18次下载

    使用寄存器的逻辑操作指令是什么?

    操作系统中硬件相关的部分集中体现在汇编指令和对寄存器操作中,因此我们对ARM体系结构的介绍也围绕ARMv8-A的汇编指令和寄存器来展开。
    的头像 发表于 06-18 15:49 3449次阅读

    C语言位操作在(单片机)寄存器中的应用

    C语言位操作寄存器中的应用本文参考另一篇博客写成附链接,个人感觉内容过多不便于吸收,就写了这篇博客。整体思想:设置一个位就是设置该位为1,清除就是设置该位为0寄存器操作的要求:特定位
    发表于 11-29 10:06 8次下载
    C语言位<b class='flag-5'>操作</b>在(单片机)<b class='flag-5'>寄存器</b>中的应用

    C语言:寄存器操作

    C语言:寄存器操作
    发表于 01-13 12:56 6次下载
    C语言:<b class='flag-5'>寄存器</b><b class='flag-5'>操作</b>

    STM32的寄存器操作

    STM32的寄存器操作在使用STM32单片机编程时一般都用ST给的库函数编程,库函数编程的底层就是对单片机寄存器操作,库函数就是一系列寄存器
    发表于 01-13 15:43 18次下载
    STM32的<b class='flag-5'>寄存器</b><b class='flag-5'>操作</b>

    RAL寄存器模型操作图鉴

    寄存器模型操作,指的是通过寄存器模型对RTL中寄存器进行读写访问,或者同步寄存器模型与RTL中寄存器
    的头像 发表于 05-17 09:01 561次阅读
    RAL<b class='flag-5'>寄存器</b>模型<b class='flag-5'>操作</b>图鉴

    RAL寄存器模型操作指南

    寄存器模型操作,指的是通过寄存器模型对RTL中寄存器进行读写访问,或者同步寄存器模型与RTL中寄存器
    的头像 发表于 07-12 09:37 707次阅读
    RAL<b class='flag-5'>寄存器</b>模型<b class='flag-5'>操作</b>指南

    Linux应用层操作寄存器

    应用层操作寄存器 驱动操作寄存器,需要先进行映射将物理地址转为虚拟地址。 但如果想在应用层中操作
    的头像 发表于 09-26 16:37 449次阅读

    如何在shell中操作寄存器

    shell 中操作寄存器可以使用 devmem 命令. devmem 命令其实就是上述应用层操作寄存器生成的可执行文件,只不过busybox已经帮我们实现了。 devmem 命令格式:
    的头像 发表于 09-26 16:39 510次阅读

    Linux应用层操作寄存器

    --- > [*] /dev/mem virtual device support Linux应用层操作寄存器 除了直接使用devmem,我们也可以在Linux应用层自己实现一个de
    的头像 发表于 10-08 15:16 588次阅读
    <b class='flag-5'>Linux</b>应用层<b class='flag-5'>操作</b><b class='flag-5'>寄存器</b>