rk3568 gpio寄存器手册问题

问题描述:
1、看下面两个链接,讲的都是uboot下writel对特定寄存器设置输入输出或者高低电平
https://blog.csdn.net/qinglongzhan/article/details/129836675
https://blog.csdn.net/qq_45147279/article/details/129007286
2、问题
不理解下面两句是怎样得到的,请求详细解释(分别对应上面2篇文章)

1】writel(0xffff4080, 0xFDD6000C);    //设置输出
    writel(0xffff4081, 0xFDD60004);    //设置高电平

       【2】writel(0x00400040,0xfe77000C);//set output mode
         writel(0x00400040,0xfe770004);//

3、举一反三
比如要设置GPIO0_C6 GPIO2_B3 GPIO2_B4为输出高电平,应该怎样写?

【以下回答由 GPT 生成】

对于链接1中的代码:

writel(0xffff4080, 0xFDD6000C);    //设置输出
writel(0xffff4081, 0xFDD60004);    //设置高电平

这两行代码是在uboot下使用writel函数设置寄存器的值来实现GPIO控制。具体解释如下:

  • writel(value, address)用于将value写入到address地址的32位寄存器中。

在这里,0xFDD6000C0xFDD60004是寄存器的物理地址,0xffff40800xffff4081是对应的要写入寄存器的值。

根据链接1中的说明,这两行代码的目的是设置GPIOA29(GPIO0_C5)的配置寄存器。第一行代码将0xffff4080写入到0xFDD6000C地址,即将GPIOA29设置为输出模式;第二行代码将0xffff4081写入到0xFDD60004地址,即将GPIOA29设置为高电平输出。

对于链接2中的代码:

writel(0x00400040, 0xfe77000C);//set output mode
writel(0x00400040, 0xfe770004);

类似地,这两行代码也是在uboot下使用writel函数设置寄存器的值来实现GPIO控制。

这里,0xfe77000C0xfe770004是寄存器的物理地址,0x00400040是对应的要写入寄存器的值。

根据链接2中的说明,这两行代码的目的是设置GPIOB0(GPIO2_A6)的配置寄存器。第一行代码将0x00400040写入到0xfe77000C地址,即将GPIOB0设置为输出模式;第二行代码将0x00400040写入到0xfe770004地址,即将GPIOB0设置为高电平输出。

现在,如果您想要设置GPIO0_C6、GPIO2_B3和GPIO2_B4为输出高电平,可以按照如下代码编写:

// 设置GPIO0_C6为输出模式
writel(0xffff4080, 0xFDD60078);

// 设置GPIO0_C6为高电平
writel(0xffff4081, 0xFDD60070);

// 设置GPIO2_B3为输出模式
writel(0x00400040, 0xfe7100D0);

// 设置GPIO2_B3为高电平
writel(0x00400041, 0xfe7100C8);

// 设置GPIO2_B4为输出模式
writel(0x00400040, 0xfe7100D8);

// 设置GPIO2_B4为高电平
writel(0x00400041, 0xfe7100D0);

以上代码设置GPIO0_C6、GPIO2_B3和GPIO2_B4为输出模式,然后将其设置为高电平输出。具体的物理地址和写入的值根据您的硬件平台和手册的定义进行适配。

希望以上解答能对您有所帮助,如有疑问请及时反馈。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^