不能切换GPIO端口引脚0,1,2,4。
端口0,1,3工作正常。
端口2-3是UART RX引脚,可以作为输入。
物理上引脚是浮动的,没有连接到引脚0,1,2,4
该部件标记为DA14681 01000 1649NCAB,这是QFN部件,因此所有端口都应该可用。
我从测试函数的输出和物理探测中看到了两个问题
1)当引脚状态为1时,主板上的输出仍然为0。我在配置中遗漏了什么。代码位于Body的末尾。
2)为什么引脚内部状态保持0引脚2和4时,代码已运行,以设置它的活动。
测试函数输出:
端口2引脚0状态=1,模式=300,func=0
端口2引脚1状态=1,模式=300,func=0
端口2引脚2状态=0,模式=300,func=0
端口2引脚3状态=1,模式=0,func=1
端口2引脚4状态=0,模式=300,func=0
Inactive: port 2 pin 0 state=0, mode=300, func=0
Inactive: port 2 pin 1 state=0, mode=300, func=0
Inactive: port 2 pin 2 state=0, mode=300, func=0
Inactive: port 2 pin 3 state=1, mode=0, func=1
Inactive: port 2 pin 4 state=0, mode=300, func=0
Active: port 2 pin 0 state=1, mode=300, func=0
Active: port 2 pin 1 state=1, mode=300, func=0
Active: port 2 pin 2 state=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
Inactive: port 2 pin 0 state=0, mode=300, func=0
Inactive: port 2 pin 1 state=0, mode=300, func=0
Inactive: port 2 pin 2 state=0, mode=300, func=0
Inactive: port 2 pin 3 state=1, mode=0, func=1
Inactive: port 2 pin 4 state=0, mode=300, func=0
静态空白测试(空白)
{
hw_gpio_set_pin_function(0,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 r \ n \”,
HW_GPIO_MODE_OUTPUT、HW_GPIO_FUNC_GPIO HW_GPIO_MODE_INPUT);
(int i = 0;我< 5,我+ +)
{
HW_GPIO_FUNC函数;
HW_GPIO_MODE模式;
hw_gpio_get_pin_status(2,i);
hw_gpio_get_pin_function(2我模式函数);
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模式;
hw_gpio_get_pin_status(2,i);
hw_gpio_get_pin_function(2我模式函数);
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模式;
hw_gpio_get_pin_status(2,i);
hw_gpio_get_pin_function(2我模式函数);
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模式;
hw_gpio_get_pin_status(2,i);
hw_gpio_get_pin_function(2我模式函数);
Printf ("inactive: port 2 pin %d state=%d, mode=%x, func=%x\n\r",i,status, mode,func);
。fflush (stdout);
}
}
你好理查德:
-你是使用对话开发工具包,还是你自己的原型。
有可能使用Dialog Devkit和SDK中的一个项目来测试吗?Yu可以将您的例程添加到项目中并对其进行测试。
谢谢,
TR_DIALOG
我们使用的是PRO开发板。
我使用了freertos_retarget,得到了类似的结果。示波器显示这些引脚上没有过渡。
报告的状态保持为0。即使设置为活动。
同样的结果与两个专业开发委员会。
端口2引脚0状态=0,模式=300,func=0
端口2引脚1 state=0, mode=300, func=0
端口2引脚2状态=0,模式=300,func=0
端口2引脚3状态=1,模式=0,func=1
端口2引脚4状态=0,模式=300,func=0
Inactive: port 2 pin 0 state=0, mode=300, func=0
Inactive: port 2 pin 1 state=0, mode=300, func=0
Inactive: port 2 pin 2 state=0, mode=300, func=0
Inactive: port 2 pin 3 state=1, mode=0, func=1
Inactive: port 2 pin 4 state=0, mode=300, func=0
Active: port 2 pin 0 state=1, mode=300, func=0
Active: port 2 pin 1 state=0, mode=300, func=0
Active: port 2 pin 2 state=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
Inactive: port 2 pin 0 state=0, mode=300, func=0
Inactive: port 2 pin 1 state=0, mode=300, func=0
Inactive: port 2 pin 2 state=0, mode=300, func=0
Inactive: port 2 pin 3 state=1, mode=0, func=1
Inactive: port 2 pin 4 state=0, mode=300, func=0
你好理查德:
让我总结一下这个问题:“你无法切换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
是的,我们从物理上拿走了水晶
已经建立
#定义dg_configUSE_LP_CLK LP_CLK_RCX
我们已经设置
#定义dg_configUSE_USB (0)
我们将P2_4留作SWCLK, P0-6留作SWDIO,但感谢你指出这一点。
我现在可以通过使用USBPAD_EN控制P2_2
空白测试(空白)
{
REG_SET_BIT (CRG_PER USBPAD_REG USBPAD_EN);//使用这个命令允许我使用P2_2作为GPIO结合设置引脚功能。
hw_gpio_set_pin_function(0,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,或者这是最好的方法,我假设这应该在peripher_init中完成。
我将在解决P2_0和P2_1后进行测试。
解决了p2_0,1问题。
标记为2-0和2-1的主板引脚在物理上与子板断开。
如果我探查子板上的水晶垫,就会得到预期的行为。
最接近Y2标记的pad是P2-0。
为了连接子板和主板之间的P2_0和P2_1,必须在子板上的R5和R6处放置两个0欧姆电阻。
USB接口:
我还移除了J6的跳线。从一开始。
所以我在这一点上唯一突出的问题是什么是设置USBPAD_EN的正确方法
你好理查德:
表1(引脚描述)在数据表有以下评论:
注意:在GPIO模式下使用此引脚必须设置USBPAD_REG[USBPAD_EN]。必须仅在V33供应中使用。
在第151页
特殊的I/O考虑
在使用gpio作为
解释如下:
•在GPIO模式下使用P1_1或P2_2,
必须设置USBPAD_REG[USBPAD_EN]。然而,
这个引脚上的允许电平是0v和
V33轨道上的电压。当1.8 V被选为
引脚供电时,负载电流增加150一个,
因为这些引脚没有反驱动保护。
此外,这些别针不应该在睡眠中使用
模式,因为USBPAD_REG将被启动
灭(属于外接电源域)。
您设置USBPAD_EN的方式应该没问题。你有什么担心吗?
我也在内部仔细检查。
谢谢,
TR_DIALOG