DAC device tree configuration

来自百问网嵌入式Linux wiki
Wiki讨论 | 贡献2020年11月9日 (一) 15:29的版本 →‎References
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

Purpose

本文旨在说明将数模转换器(DAC)[1] 分配给 Linux® 操作系统时如何进行配置, 尤其是:

  • 如何配置和启用DACperipheral
  • 如何配置、DAC通道、基准电压调节器和引脚。

使用设备树机制执行配置[2].

DAC Linux driver使用它在 IIO framework中注册相关信息,例如IIO设备,通道和电压标度。

如果外围设备已分配给另一个执行上下文,请参阅 How to assign an internal peripheral to a runtime context 文章,以获取有关外围设备分配和配置的准则。

DT bindings documentation

带有所有必需或可选属性的“ STM32 DAC设备树绑定”[3] 协议。

DT configuration

该硬件描述是STM32和电路板设备树文件的组合。 有关分割设备树文件的说明,请参见 Device tree

STM32CubeMX可用于生成板卡设备树。 有关更多详细信息,请参考How to configure the DT using STM32CubeMX

DT configuration (STM32 level)

DAC节点在stm32mp157c.dtsi中声明[4]:

  • DT根节点('dac')描述DAC硬件模块参数,例如寄存器区域和时钟。
  • DT子节点('dac1'和'dac2')独立描述DAC通道。
dac: dac@address {
	compatible = "st,stm32h7-dac-core";
	...                                                                            /* common resources in 'dac' root node. */
	dac1: dac@1 {
		compatible = "st,stm32-dac";
		reg = <1>;                                                             /* DAC identifier (e.g. 1 for DAC1) */
		...                                                                    /* private resources in 'dac1' child node. */
	};
	dac2: dac@2 {
		compatible = "st,stm32-dac";
		reg = <2>;                                                             /* DAC identifier (e.g. 2 for DAC2) */
		...                                                                    /* private resources in 'dac2' child node. */
	};
};
Warning.png 该设备树部分与STM32微处理器有关。 它应该保持原样,而不要由最终用户修改。

DT configuration (board level)

请按照以下顺序在板上配置和启用DAC:

  • 通过设置status =“ okay”启用名为'dac'DT根节点
  • 通过 pinctrlpinctrl-0pinctrl-names配置正在使用的引脚。
  • 通过设置vref-supply = <&your_regulator>来配置模拟参考电压稳压器[5]
  • 通过设置status =“ okay”为启用的'dac1'和/或'dac2'通道启用DT子节点
Info.png DAC可以使用内部VREFBUF[6] 或连接到VREF +引脚的任何其他外部稳压器[5]

.

DT configuration example

下面的示例显示如何配置DAC1和DAC2通道:

dac_ch1_pins_a: dac-ch1 {
	pins {
		pinmux = <STM32_PINMUX('A', 4, ANALOG)>;                 /* configure 'PA4' as ANALOG */
	};
};
dac_ch2_pins_a: dac-ch2 {
	pins {
		pinmux = <STM32_PINMUX('A', 5, ANALOG)>;                 /* configure 'PA5' as ANALOG */
	};
};
&dac {
	pinctrl-names = "default";
	pinctrl-0 = <&dac_ch1_pins_a &dac_ch2_pins_a>;                   /* Use PA4 and PA5 pin as ANALOG */
	vref-supply = <&vrefbuf>;                                        /* Example to use VREFBUF (It needs to be enabled as well) */
	status = "okay";                                                 /* Enable the DAC block */
	dac1: dac@1 {
		status = "okay";                                         /* Enable DAC1 */
	};
	dac2: dac@2 {
		status = "okay";                                         /* Enable DAC2 */
	};
};

How to configure the DT using STM32CubeMX

STM32CubeMX 工具可用于配置STM32MPU设备并获取相应的 platform configuration device tree 文件。
STM32CubeMX可能不支持以上 DT bindings documentation 段中描述的所有属性。 如果是这样,该工具会在生成的设备树中插入用户部分。 然后可以编辑这些部分以添加一些属性,并将它们一代一代地保留下来。 有关更多信息,请参见 STM32CubeMX 用户手册。