跳过主要内容

GPIO配置和输出失败的问题

DA1469x

3个月前

发布的jerryjuan225点 4回复
0的问题

我们正在使用sdk_10.0.10.118,并希望将gpio输出从活动设置为非活动,但失败了。

你能帮我检查一下有什么配置缺失吗?

hw_gpio_set_pin_function(HW_GPIO_PORT_0, HW_GPIO_PIN_12, HW_GPIO_MODE_OUTPUT, HW_GPIO_FUNC_GPIO);
hw_gpio_configure_pin_power (HW_GPIO_PORT_0 HW_GPIO_PIN_12 HW_GPIO_POWER_V33);
hw_gpio_configure_pin(HW_GPIO_PORT_0, HW_GPIO_PIN_12, HW_GPIO_MODE_OUTPUT, HW_GPIO_FUNC_GPIO, true);

hw_gpio_pad_latch_enable (HW_GPIO_PORT_0 HW_GPIO_PIN_12);

OS_DELAY_MS (1000);
hw_gpio_set_inactive (HW_GPIO_PORT_0 HW_GPIO_PIN_12);
OS_DELAY_MS (1000);
hw_gpio_set_active (HW_GPIO_PORT_0 HW_GPIO_PIN_12);
OS_DELAY_MS (1000);
hw_gpio_set_inactive (HW_GPIO_PORT_0 HW_GPIO_PIN_12);

3个月前

jerryjuan 225点

设置引脚高/低后,引脚状态没有相应改变,不确定发生了什么。

3个月前

PM_Dialog

嗨,杰瑞,

P0_12和P0_13是CMAC的SWD。

请参阅数据表40.2.1节可编程引脚分配和表146:特定信号的固定分配。请参阅299页的注释1。

DA1469x数据表://www.xmece.com/sites/default/files/2020-12/da1469x_datasheet_3v2.pdf

默认情况下,CMAC调试器是启用的-参见bsb_debug.h中的dg_configENABLE_CMAC_DEBUGGER。

因此,为了禁用CMAC调试器并使用P0_12或P0_13作为GPIO,请在自定义配置文件(custom_config_XXX.h)中将dg_configENABLE_CMAC_DEBUGGER设置为0。

请参阅下面用于在peripher_init()中切换P0_12和P0_13的代码片段。

在custom_config_XXX.h:

#定义dg_configENABLE_CMAC_DEBUGGER (0)

在periph_init ():

hw_gpio_configure_pin(HW_GPIO_PORT_0, HW_GPIO_PIN_12, HW_GPIO_MODE_OUTPUT, HW_GPIO_FUNC_GPIO, false);hw_gpio_configure_pin(HW_GPIO_PORT_0, HW_GPIO_PIN_13, HW_GPIO_MODE_OUTPUT, HW_GPIO_FUNC_GPIO, false);hw_gpio_pad_latch_enable (HW_GPIO_PORT_0 HW_GPIO_PIN_12);hw_gpio_pad_latch_enable (HW_GPIO_PORT_0 HW_GPIO_PIN_13);hw_clk_delay_usec (100);hw_gpio_set_active (HW_GPIO_PORT_0 HW_GPIO_PIN_12);hw_gpio_set_active (HW_GPIO_PORT_0 HW_GPIO_PIN_13);hw_clk_delay_usec (100);hw_gpio_set_inactive (HW_GPIO_PORT_0 HW_GPIO_PIN_12);hw_gpio_set_inactive (HW_GPIO_PORT_0 HW_GPIO_PIN_13); hw_gpio_pad_latch_disable(HW_GPIO_PORT_0, HW_GPIO_PIN_12); hw_gpio_pad_latch_disable(HW_GPIO_PORT_0, HW_GPIO_PIN_13);

谢谢,PM_Dialog

3个月前

jerryjuan 225点

嗨PM_Dialog,

谢谢你的建议。在配置GPIO之前,我已经禁用了CMAC调试器。
从你的示例代码中,这是否意味着在我将GPIO设置为高之前,我需要启用闩锁?
hw_gpio_pad_latch_enable ()

在我把它调低之前,我需要关闭锁存器?但是我没有看到其他GPIO设置这样做,这是必要的功能,我需要调用它之前,我设置任何GPIO?

接受答案!

3个月前

PM_Dialog

嗨,杰瑞,

当锁定GPIO意味着激活pad并将其连接到数字逻辑。当松开时,它断开pad与数字逻辑的连接,并保持pad状态。我能够使用您提供的代码切换peripher_init()中的GPIO。在代码中您试图切换P0_12的哪里?

为了使用CMAC调试器PADS作为gpio,你应该:

1.按照我之前的回复,关闭CMAC调试器

2.配置pad为GPIOS。

参见下面切换P0_12的示例代码:

hw_gpio_configure_pin(HW_GPIO_PORT_0, HW_GPIO_PIN_12, HW_GPIO_MODE_OUTPUT, HW_GPIO_FUNC_GPIO, false);hw_gpio_pad_latch_enable (HW_GPIO_PORT_0 HW_GPIO_PIN_12);hw_clk_delay_usec (100);hw_gpio_set_active (HW_GPIO_PORT_0 HW_GPIO_PIN_12);hw_clk_delay_usec (100);hw_gpio_set_inactive (HW_GPIO_PORT_0 HW_GPIO_PIN_12);hw_gpio_pad_latch_disable (HW_GPIO_PORT_0 HW_GPIO_PIN_12);

谢谢,PM_Dialog