工具/软件:Linux
您好!
我已通过函数"GPIO_SET_VALUE (GPIO、val)"将 u-boot 板文件中的 GPIO 引脚设置为"高电平"
这在内核启动期间达到内核消息"Initializing cgroup Subsys IO"之前正常工作。
之后、GPIO 引脚为"低电平"。
如何避免 IO 复位?
BR
Stefan
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Linux
您好!
我已通过函数"GPIO_SET_VALUE (GPIO、val)"将 u-boot 板文件中的 GPIO 引脚设置为"高电平"
这在内核启动期间达到内核消息"Initializing cgroup Subsys IO"之前正常工作。
之后、GPIO 引脚为"低电平"。
如何避免 IO 复位?
BR
Stefan
nm_nico 也面临同样的问题: e2e.ti.com/.../2040522
到目前为止还没有解决办法
您好!
您能否尝试在 arch/arm/mach-omap2/omap_hwmod_33xx_43xx_ipblock_data.c 文件中将以下行添加到 am33xx_epwms0_hwmod 和 am33xx_epwmss1_hwmod 结构中:
flags = HWMOD_INIT_NO_RESET、
与您的其他参考帖子之一引用的承诺类似(http://arago-project.org/git/projects/?p=linux-am33x.git;a=commit;h=0c2a044c5368a0ba37d103bb56cc841cc12fb63a)。
Jason Reeder
您好!
关于 EHRPWM1引脚的 I/O 复位的说明。 我使用 BBB 上的配置测试了这一点、探测了 P9_14 (EHRPWM1A)。 以下是我的修改:
1. U-boot 修改:
-in board/ti/am335x/mux.c:
静态结构 MODULE_PIN_mux uart5_PIN_mux[]={
{offset (LCD_data9)、(mode (4)| PULLUP_EN | RXACTIVE)}、/* UART5_RXD *
{offset (LCD_data8)、(mode (4)| PULLUUDEN)}、/* UART5_TXD *
{-1}、
};
+静态结构 MODULE_PIN_mux GPIO0_20_PIN_mux[]={
+{offset (xdma_event_intr1)、(mode (7)| PULLUDEN)}、//与 PULLUP_EN 良好配合使用、使用 PULLUDEN 进行测试
+{-1}、
+};
+静态结构 module_pin_mux ehrpwm1_pin_mux[]={
+{offset (GPMC_A2)、(MODE (6)| PULLUG_EN)}、
+{-1}、
+};
===========
CONFIG_MODULE_PIN_mux (uart3_PIN_mux);
}
+ void enable_ehrpwm1_pin_mux (void)
+{
+ CONFIG_MODULE_PIN_mux (ehrpwm1_PIN_mux);
+}
+ void enable_GPIO0_20_pin_mux (void)
+{
+ CONFIG_MODULE_PIN_mux (GPIO0_20_PIN_mux);
+}
===========
CONFIG_MODULE_PIN_mux (mmc0_PIN_mux);
+ CONFIG_MODULE_PIN_mux (GPIO0_20_PIN_mux);
+ CONFIG_MODULE_PIN_mux (ehrpwm1_PIN_mux);
-in board/ti/am335x/board.c:
void set_UART_mux_conf (void)
{
+ ENABLE_GPIO0_20_PIN_mux ();
+ enable_ehrpwm1_pin_mux ();
2. Linux 内核修改:
-在 arch/arm/boot/dts/AM335x-bone-common.dtsi 中:
am33xx_pinmux{(am33xx_pinmux)}
pinctrl-names ="default";
+ pinctrl-0 =<&GPIO0_PINs>;
===========
+ GPIO0_Pins:GPIO0_Pins{
+ pinctrl-single、pins =<
+ 0x1b4 (PIN_OUTPUT 上拉| MUX_MODE7)
+>;
+};
+ ehrpwm1_pins:ehrpwm1_pins{
+ pinctrl-single、pins =<
+ 0x48 (PIN_OUTPUT | MUX_MODE6)/* P9_14、U14 */
+ 0x4C (PIN_OUTPUT | MUX_MODE6)/* P9_16、T14 */
+>;
+};
===========
+ epwms1{(&E)
+ STATUS ="确定";
+ ehrpwm1:PWM@48302200{
+ STATUS ="确定";
+ pinctrl-names ="default";
+ pinctrl-0 =<&ehrpwm1_PINs>;
+};
+};
正如我说过的、我使用示波器探测 P9_14 (EHRPWM1A)、并且在整个启动过程(u-boot 和 Linux 内核)中引脚一直处于低电平状态。 为了确保这些设置已经生效、我在两个阶段都检查了寄存器值:
U-boot:
=> MD 0x44E10848
44e10848:00000006 //=>conf_GPMC_A2设置为 MUXMODE6、禁用 PULLUPDOWN。
内核:
root@AM335x-EVM:~# devmem2 0x44E10848
/dev/mem 已打开。
映射到地址 bb6f37000的内存。
在地址0x44E10848 (bb6f37848)读取:0x0000000E //==>conf_GPMC_A2设置为 MUXMODE6、启用 PULLUPDOWN
选择//下拉
我将按照 Jason 的建议、使用.flags = HWMOD_INIT_NO_RESET 进行检查、以验证寄存器是否也未复位。
此致、
Yordan
您好 Stefan、
您监控的寄存器:
pwmss_ctrl (0x44E1_0664):0x00000000
CM_PER_EPWMSS0_CLKCTRL (0x44E0_00D4):0x00030000
CM_PER_EPWMSS1_CLKCTRL (0x44E0_00CC):0x00030000
不是 pwmss 寄存器。 第一个 PWMS_CTRL 属于控制模块、以下两个寄存器 CM_PER_EPWMSS0_CLKCTRL 和 CM_PER_EPWMSS1_CLKCTRL 是 PRCM 的一部分、因此我认为这是为什么在 OMAP-HW33mod_hw33xx_ip块 的 PWMSS 结构中使用.flags = HWMOD_INIT_NO_RESET 不会影响上述数据块的原因。
根据我的经验、PRCM 寄存器设置为 MODULEMODE = 0x2 (ENABLE:模块被显式启用)=> 0x00030002、仅当您从 sysfs 启动 pwmss 时。 如果您没有在 EHRPWM1A/EHRPWM1B 引脚上输出 PWM 脉冲、模块将保持禁用状态。
编辑:如果 在 u-boot 中设置了 CTRL_MODULE 寄存器、pwmss_ctrl (0x44E1_0664)应保留其状态。 您是否在 u-boot 中的任何位置配置 PWMSS_CTRL 寄存器?
此致、
Yordan
Stefan、
还有一件事要尝试。 能否将以下两个属性添加到 epwms0和 epwms1设备树节点:
TI、无空闲启动;
TI、no-reset-on-init;
例如
epwms0:epwmss@48300000{
(笑声)
ti、hwmonds ="epwmss0";
TI、无空闲启动;
TI、no-reset-on-init;
(笑声)
STATUS ="禁用";
(笑声)
}
与我们的内核开发人员交谈后、您应该能够撤消对 OMAP-hwmod_33xx_43xx_ipblock_data.c 文件的修改、并使用这些属性来实现相同的目标。
为了确保我们在同一页上、您在 u-boot 期间配置 PWMSS 外设以生成 PWM 信号、而在内核启动时、您会看到 PWM 信号停止工作、对吧? 哪个看起来是由于内核禁用了到外设的时钟?
Jason Reeder