uart9 {
/omit-if-no-ref/
uart9m0_xfer: uart9m0-xfer {
rockchip,pins =
/* uart9_rx_m0 */
<2 RK_PC4 10 &pcfg_pull_up>,
/* uart9_tx_m0 */
<2 RK_PC2 10 &pcfg_pull_up>;
};
这段代码是一个设备树(Device Tree)片段,用于描述一个名为uart9
的UART(通用异步收发传输器)设备的配置信息。设备树是一种数据结构,用于描述硬件设备及其配置,使得操作系统能够了解并管理硬件。
在这个片段中,uart9
节点下有一个子节点uart9m0-xfer
,这个子节点描述了UART9在模式0(m0)下的引脚配置信息。
rockchip,pins
属性用于指定UART9在模式0下所使用的引脚及其配置。<2 RK_PC4 10 &pcfg_pull_up>
表示UART9的接收(RX)引脚配置。这里,2
是引脚功能的索引,RK_PC4
表示引脚位于Rockchip平台的PC4端口,10
是引脚编号,&pcfg_pull_up
是一个引用,指向一个定义了引脚配置(如上拉)的节点。<2 RK_PC2 10 &pcfg_pull_up>
表示UART9的发送(TX)引脚配置,其格式与RX引脚相同。
简单来说,这段代码定义了UART9在模式0下的RX和TX引脚配置,都使用了上拉配置,并且分别位于PC4端口的10号引脚和PC2端口的10号引脚。这样的配置信息对于操作系统正确初始化和使用UART9设备是必要的。
gpio2: gpio@fec30000 {
compatible = "rockchip,gpio-bank";
reg = <0x0 0xfec30000 0x0 0x100>;
interrupts = <GIC_SPI 279 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&cru PCLK_GPIO2>, <&cru DBCLK_GPIO2>;
gpio-controller;
#gpio-cells = <2>;
gpio-ranges = <&pinctrl 0 64 32>;
interrupt-controller;
#interrupt-cells = <2>;
};
这段代码是设备树(Device Tree)的一部分,用于描述硬件设备的配置信息,特别是在Linux系统中用于描述嵌入式或SoC(System on Chip)设备。这里描述的是一个GPIO(General Purpose Input/Output)控制器,它是Rockchip平台上的一个组件。下面是这段代码的具体解释:
-
gpio2: gpio@fec30000 {
:定义了一个名为gpio2
的节点,其基地址为0xfec30000
。这个地址是GPIO控制器在内存中的物理地址。 -
compatible = "rockchip,gpio-bank";
:指定了该设备的兼容性字符串,表明这个GPIO控制器是由Rockchip公司生产的,并且符合gpio-bank
的规范。 -
reg = <0x0 0xfec30000 0x0 0x100>;
:定义了该设备的寄存器地址范围。这里表示从0xfec30000
开始,长度为0x100
字节(256字节)。 -
interrupts = <GIC_SPI 279 IRQ_TYPE_LEVEL_HIGH>;
:指定了该设备使用的中断信息。这里表示使用GIC(Generic Interrupt Controller)的SPI(Shared Peripheral Interrupt)中断号为279,中断类型为高电平触发。 -
clocks = <&cru PCLK_GPIO2>, <&cru DBCLK_GPIO2>;
:定义了该设备使用的时钟源。这里使用了两个时钟,分别是PCLK_GPIO2
和DBCLK_GPIO2
,它们通过&cru
(Clock Reset Unit)节点来引用。 -
gpio-controller;
:表明这个节点是一个GPIO控制器。 -
#gpio-cells = <2>;
:指定了每个GPIO引脚描述所需的单元数,这里是2,意味着每个GPIO配置需要两个32位单元。 -
gpio-ranges = <&pinctrl 0 64 32>;
:定义了GPIO引脚的映射范围。这里表示从pinctrl
节点引用的基地址开始,映射64个GPIO,其中32个是有效的。 -
interrupt-controller;
:表明这个节点也是一个中断控制器。 -
#interrupt-cells = <2>;
:指定了描述每个中断所需的单元数,这里是2,意味着每个中断配置需要两个32位单元。
总的来说,这段代码描述了一个Rockchip平台上的GPIO控制器,包括它的物理地址、中断信息、时钟源、GPIO引脚映射以及中断控制器属性等。这些信息对于操作系统来说非常重要,因为它需要这些信息来正确地初始化和使用这个GPIO控制器。
gpio2: gpio@fec30000 {
compatible = "rockchip,gpio-bank";
reg = <0x0 0xfec30000 0x0 0x100>;
interrupts = <0 279 4>;
clocks = <&cru 127>, <&cru 128>;
gpio-controller;
#gpio-cells = <2>;
gpio-ranges = <&pinctrl 0 64 32>;
interrupt-controller;
#interrupt-cells = <2>;
};
这段代码是一个设备树(Device Tree)片段,用于描述一个名为gpio2
的GPIO(通用输入输出)控制器的硬件信息。设备树是一种数据结构,用于描述硬件设备的组成、属性和它们之间的关系,特别是在嵌入式系统和Linux内核中广泛使用。下面是对这段代码的详细解释:
-
gpio2: gpio@fec30000 { ... }
:定义了一个名为gpio2
的节点,它代表了一个GPIO控制器。@fec30000
指明了这个控制器在物理地址空间中的基地址是0xfec30000
。 -
compatible = "rockchip,gpio-bank";
:指定了这个GPIO控制器兼容的硬件类型是rockchip,gpio-bank
。这通常用于驱动程序匹配,以确保正确的驱动程序被加载以控制这个设备。 -
reg = <0x0 0xfec30000 0x0 0x100>;
:定义了设备的寄存器地址范围。这里,0x0
和0xfec30000
是起始地址,0x0
和0x100
是地址长度,表示这个设备占用从0xfec30000
开始的256字节(0x100字节)地址空间。 -
interrupts = <0 279 4>;
:指定了设备使用的中断信息。这里,0
表示中断类型(例如,SPI中断、GPIO中断等),279
是中断号,4
表示中断的触发类型或模式(例如,边缘触发、电平触发)。 -
clocks = <&cru 127>, <&cru 128>;
:指定了设备使用的时钟源。&cru
是对时钟管理单元(Clock and Reset Unit)的引用,127
和128
是具体的时钟ID,表示这个GPIO控制器可能需要两个时钟源。 -
gpio-controller;
:表明这个节点是一个GPIO控制器。 -
#gpio-cells = <2>;
:指定了每个GPIO引脚描述所需的单元数。这里是2,意味着每个GPIO引脚需要用两个32位单元来描述,通常用于指定引脚号和配置参数。 -
gpio-ranges = <&pinctrl 0 64 32>;
:定义了GPIO控制器管理的GPIO引脚范围。这里,&pinctrl
是对引脚控制器的引用,0
是起始引脚号,64
是引脚总数,32
可能表示这个范围内的某些特定属性或分组。 -
interrupt-controller;
:表明这个GPIO控制器也作为中断控制器使用。 -
#interrupt-cells = <2>;
:指定了描述每个中断所需的单元数。这里是2,意味着每个中断描述需要两个32位单元,通常用于指定中断号和中断类型或配置。
综上所述,这段代码描述了一个位于0xfec30000
地址、具有256字节寄存器空间、使用两个时钟源、能够管理64个GPIO引脚并且也作为中断控制器的GPIO控制器。