GPIO端口2针的问题

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
8个职位/ 0个新职位
最后一篇
理查德Legault
离线
最后一次露面:3年11个月前
加入:2017-03-01 18:54
GPIO端口2针的问题

无法切换GPIO端口引脚0,1,2,4。

端口0,1,3工作正常。

Port2-3是UART RX引脚,并将正常工作为输入。

Phyly浮动栅格浮动没有连接到销0.1,2,4
零件标记为DA14681 01000 1649NCAB,这是QFN部分,因此所有端口都应可用。

我从测试函数的输出和物理探测中看到了两个问题
1)当引脚状态为1时,主板上的输出仍然为0。我在配置中遗漏了什么。代码位于Body的末尾。
2)为什么当代码运行以将其活动设置为激活时,引脚内部状态为引脚2和4保持0。

测试函数输出:

端口2引脚0状态=1,模式=300,func=0
端口2引脚1状态= 1,MODE = 300,FUNC = 0
端口2引脚2状态=0,模式=300,func=0
端口2引脚3状态= 1,mode = 0,Func = 1
端口2引脚4状态=0,模式=300,func=0
无效:端口2引脚0状态= 0,mode = 300,func = 0
无效:端口2引脚1状态= 0,mode = 300,Func = 0
无效:端口2引脚2状态= 0,mode = 300,func = 0
无效:端口2引脚3状态= 1,mode = 0,func = 1
无效:端口2引脚4状态= 0,MODE = 300,FUNC = 0
活动:端口2引脚0状态= 1,mode = 300,func = 0
Active: port 2 pin 1 state=1, mode=300, func=0
主动:端口2引脚2状态= 0,MODE = 300,FUNC = 0
Active: port 2 pin 3 state=1, mode=0, func=1
Active: port 2 pin 4 state=0, mode=300, func=0
无效:端口2引脚0状态= 0,mode = 300,func = 0
无效:端口2引脚1状态= 0,mode = 300,Func = 0
Inactive: port 2 pin 2 state=0, mode=300, func=0
无效:端口2引脚3状态= 1,mode = 0,func = 1
无效:端口2引脚4状态= 0,MODE = 300,FUNC = 0


静态空隙测试(空隙)
{

hw_gpio_set_pin_function(2,0,hw_gpio_mode_output,hw_gpio_func_gpio);
hw_gpio_set_pin_function(2,1,hw_gpio_mode_output,hw_gpio_func_gpio);
hw_gpio_set_pin_function(2,2,hw_gpio_mode_output,hw_gpio_func_gpio);
//hw_gpio_set_pin_function(2,3, HW_GPIO_MODE_OUTPUT, HW_GPIO_FUNC_GPIO);
hw_gpio_set_pin_function(2,4,hw_gpio_mode_output,hw_gpio_func_gpio);
printf(“hw_gpio_mode_output =%x,hw_gpio_func_gpio =%x,hw_gpio_mode_input =%x \ n \ r”,
HW_GPIO_MODE_OUTPUT、HW_GPIO_FUNC_GPIO HW_GPIO_MODE_INPUT);
(int i = 0;我< 5,我+ +)
{
HW_GPIO_FUNC函数;
hw_gpio_mode模式;
Bool status = hw_gpio_get_pin_status(2,i);
hw_gpio_get_pin_function(2,i和模式,func);
Printf ("port 2 pin %d state=%d, mode=%x, func=%x\n\r",i,status, mode,func);
。fflush (stdout);
}

hw_gpio_set_inactive(2,0);// p2-0.
hw_gpio_set_inactive (2, 1);
hw_gpio_set_inactive(2,2);
hw_gpio_set_inactive(2、4);
(int i = 0;我< 5,我+ +)
{
HW_GPIO_FUNC函数;
hw_gpio_mode模式;
Bool status = hw_gpio_get_pin_status(2,i);
hw_gpio_get_pin_function(2,i和模式,func);
printf("Inactive: port 2 pin %d state=%d, mode=%x, func=%x\n\r",i,status, mode,func);
。fflush (stdout);
}
hw_gpio_set_active(2,0);// p2-0.
hw_gpio_set_active (2, 1);
hw_gpio_set_active (2, 2);
hw_gpio_set_active(2,4);
(int i = 0;我< 5,我+ +)
{
HW_GPIO_FUNC函数;
hw_gpio_mode模式;
Bool status = hw_gpio_get_pin_status(2,i);
hw_gpio_get_pin_function(2,i和模式,func);
printf("Active: port 2 pin %d state=%d, mode=%x, func=%x\n\r",i,status, mode,func);
。fflush (stdout);
}

hw_gpio_set_inactive(2,0);// p2-0.
hw_gpio_set_inactive (2, 1);
hw_gpio_set_inactive(2,2);
hw_gpio_set_inactive(2、4);

(int i = 0;我< 5,我+ +)
{
HW_GPIO_FUNC函数;
hw_gpio_mode模式;
Bool status = hw_gpio_get_pin_status(2,i);
hw_gpio_get_pin_function(2,i和模式,func);
printf(“无效:端口2引脚%d状态=%d,mode =%x,func =%x \ n \ r”,i,status,mode,func);
。fflush (stdout);
}
}

设备:
tr_dialog.
离线
最后一次露面:2个月2周以前
职员
加入:2014-06-30 23:52
嗨理查德:

嗨理查德:

-你是使用对话开发工具包,还是你自己的原型。

有可能使用Dialog Devkit和SDK中的一个项目来测试吗?Yu可以将您的例程添加到项目中并对其进行测试。

谢谢,

tr_dialog.

理查德Legault
离线
最后一次露面:3年11个月前
加入:2017-03-01 18:54
我们使用的是PRO开发

我们正在使用Pro Dev Board。

我使用了freertos_retarget,结果类似。示波器显示在那些引脚上没有过渡。
报告的状态保持为0。即使设置为活动。
同样的结果与两个专业开发委员会。

端口2引脚0状态= 0,MODE = 300,FUNC = 0
端口2引脚1状态= 0,MODE = 300,FUNC = 0
端口2引脚2状态=0,模式=300,func=0
端口2引脚3状态= 1,mode = 0,Func = 1
端口2引脚4状态=0,模式=300,func=0
无效:端口2引脚0状态= 0,mode = 300,func = 0
无效:端口2引脚1状态= 0,mode = 300,Func = 0
无效:端口2引脚2状态= 0,mode = 300,func = 0
无效:端口2引脚3状态= 1,mode = 0,func = 1
无效:端口2引脚4状态= 0,MODE = 300,FUNC = 0
活动:端口2引脚0状态= 1,mode = 300,func = 0
主动:端口2引脚1状态= 0,MODE = 300,FUNC = 0
主动:端口2引脚2状态= 0,MODE = 300,FUNC = 0
Active: port 2 pin 3 state=1, mode=0, func=1
Active: port 2 pin 4 state=0, mode=300, func=0
无效:端口2引脚0状态= 0,mode = 300,func = 0
无效:端口2引脚1状态= 0,mode = 300,Func = 0
Inactive: port 2 pin 2 state=0, mode=300, func=0
无效:端口2引脚3状态= 1,mode = 0,func = 1
无效:端口2引脚4状态= 0,MODE = 300,FUNC = 0

tr_dialog.
离线
最后一次露面:2个月2周以前
职员
加入:2014-06-30 23:52
嗨理查德:

嗨理查德:

让我总结一下这个问题:“你无法切换P2_0, P2_1, P2_2, P2_4。”这是正确的吗?

P2_0和P2_1用于XTAL32连接。如果你想使用它们作为GPIO,你必须选择和使用内部RCX作为睡眠时钟的源。你做过这个吗?

P2_4用于SWCLK。你能确认你没有使用JTAG吗?

P2_2也用于Devkit上的USB。您能否确认您无法调用USB相关软件?

上述问题的答案将有助于确保测试条件是正确的。

谢谢,

tr_dialog.

理查德Legault
离线
最后一次露面:3年11个月前
加入:2017-03-01 18:54
是的,我们确实有

是的,我们身体拆除了水晶和
已经套
#define dg_configuse_lp_clk lp_clk_rcx.

我们已经套了
#定义dg_configUSE_USB (0)

我们将P2_4留作SWCLK, P0-6留作SWDIO,但感谢你指出这一点。

理查德Legault
离线
最后一次露面:3年11个月前
加入:2017-03-01 18:54
我现在可以控制p2_2

我现在可以通过使用USBPAD_EN控制P2_2
空白测试(空白)
{
REG_SET_BIT(CRG_PER,USBPAD_REG,USBPAD_EN);//使用此命令允许我与下面的SET引脚功能一起使用P2_2作为GPIO。
hw_gpio_set_pin_function(2,0,hw_gpio_mode_output,hw_gpio_func_gpio);
hw_gpio_set_pin_function(2,1,hw_gpio_mode_output,hw_gpio_func_gpio);
hw_gpio_set_pin_function(2,2,hw_gpio_mode_output,hw_gpio_func_gpio);
//hw_gpio_set_pin_function(2,3, HW_GPIO_MODE_OUTPUT, HW_GPIO_FUNC_GPIO);/ / UART的处方
//hw_gpio_set_pin_function(2,4, HW_GPIO_MODE_INPUT, HW_GPIO_FUNC_GPIO); //hw_gpio_set_pin_function(2,4, HW_GPIO_MODE_INPUT, HW_GPIO_FUNC_GPIO);/ / SWDIO
......
}

现在,当我设置或清除P2_2时,它表现为GPIO引脚。

我仍然无法切换p2_0或p2_1,我想看看是否有需要清除的模拟设置,这与GPIO FUNC和MODE设置分开。

是否有一种“适当的”方法来调用USBPAD_EN,或者这是最好的方法,我认为这应该在Periph_init中完成。
当我解决p2_0和p2_1时,我会稍后测试。

理查德Legault
离线
最后一次露面:3年11个月前
加入:2017-03-01 18:54
解决了p2_0,1问题。

解决了p2_0,1问题。
标有2-0和2-1标记的主板销与子板上的物理脱节。
如果我探查子板上的水晶垫,就会得到预期的行为。
最接近Y2标记的焊盘是P2-0。

要在子板和主板之间连接P2_0和P2_1,因此必须在子板上的R5和R6放置在r5和r6上的两个0ohm电阻。

USB接口:
我还将跳线删除到J6。从一开始。

因此,我唯一的出色问题是设置USBPAD_EN的正确方法

tr_dialog.
离线
最后一次露面:2个月2周以前
职员
加入:2014-06-30 23:52
嗨理查德:

嗨理查德:

数据表中的表1(引脚描述)具有以下评论:

笔记:在GPIO模式下使用此引脚必须设置USBPAD_REG[USBPAD_EN]。必须是仅用于V33电源。

此外,在第151页:

33.5特殊I / O考虑因素

在使用gpio作为

解释如下:

•在GPIO模式下使用P1_1或P2_2,

必须设置USBPAD_REG[USBPAD_EN]。然而,

这个引脚上的允许电平是0v和

V33轨道上的电压。When 1.8 V is selected as

引脚供应,负载电流增加150一种,

因为这些引脚没有受到后驱动的保护。

而且,这些引脚不应该在睡眠中使用

模式,因为USBPad_reg将被供电

关闭(属于外围电源域)。

您设置USBPAD_EN的方式应该没问题。你有什么担心吗?

我也在内部检查这个。

谢谢,

tr_dialog.