团队成员、您好!
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.
团队成员、您好!
您好 Nisarg:
感谢您的耐心。
请提供 API 详细信息等、以配置 MCU-GPIO 的去抖时间。
请参阅 第 6.1.2节 I/O 去抖控制寄存器 了解有关配置去抖控制寄存器的详细信息。
请参阅 表6-1. 去抖周期值 了解可以配置的去抖周期值。
此致、
Tushar
Tushar、您好!
根据您的建议、我们确定了以下 API、用于根据文档配置和设置去抖时间。 请查看以下 API 流程、如果有任何缺失、请告知我们。 如果需要在以下详细信息和 API 详细信息中进行任何更正、请告知我。
==============================================================================================
/* MCU_PADCONFIG16 (MCU_GPIO0_16)物理地址为0x04084040 (MCU_PADCFG_CTRL0_CFG0_PADCONFIG16)*/
readDinDataValue = HW_RD_REG32 (0x4084040);
/*在中配置 MCU_CTRL_MMR_DBOUNCHE_CFG1寄存器
对于 MCU_GPIO0_16为* MCU_PADCFG_CTRL0_CFG0_PADCONFIG16。
* MCU_CTRL_MMR_DBOUNCHE_CFG1寄存器包含
*用于焊盘的去抖周期 PADCONFIGx [13–11]去抖_SEL 字段设置为1h .*/
configureDebounceRegValue = readDinDataValue | 0x800;
HW_WR_REG32 (0x4084040、configureDebounceRegValue);
/*在 MCU_CTRL_MMR_DBOUNCHE_CFG1 (0x04504084)寄存器中为*/设置去抖周期值
/* 2表示2.93毫秒内的去抖周期 */
HW_WR_REG32 (0x04504084、2);
==============================================================================================




我们使用物理地址来读取和写入使用的寄存器 HW_RD_REG32 () 和 HW_WR_REG32 () API。
是否是正确的方法? 请提供确认。
谢谢!
Nisarg
您好 Nisarg:
是否是正确的方法? 请提供确认。
是的、以上流程似乎可以。
您可以 在 CCS 窗口的"Memory Browser"中查看相同的内容。 值是否正确更新?
此致、
Tushar
尊敬的 Tushar:
我们在以下代码中尝试配置的去抖 10ms 的 MCU_GPIO0_16 ( MCU_PADCONFIG16 或者会与 物理地址 正弦值 0x04084040 )
并尝试生成的继续在该引脚上执行输入中断 ( MCU_GPIO0_16 ) 消息流 1kHz 输入信号 (占空比为50%)(使用函数发生器生成输入信号)、但我们观察到并非每个生成 ISR 10ms 但获取 ISR 457ms、根据去抖时间设置、这是不正确的。
1kHz = 1毫秒持续时间
代码片段:-
/*Set Debounce-Time for DIN Pin */
uint8_t setDINDebounceTime(uint8_t time)
{
uint8_t retValue = SUCCESS;
uint32_t configureDebounceRegValue = 0;
uint32_t readDinDataValue = 0;
/* MCU_PADCONFIG16 (MCU_GPIO0_16) Physical Address is 0x04084040 */
readDinDataValue = HW_RD_REG32(DIN_PHY_ADDRESS);
/* Configure MCU_CTRL_MMR_DBOUNCE_CFG1 register in the
* MCU_PADCFG_CTRL0_CFG0_PADCONFIG16 for MCU_GPIO0_16.
* The MCU_CTRL_MMR_DBOUNCE_CFG1 register contains the
* debounce period for pads with PADCONFIGx[13-11] DEBOUNCE_SEL fields set to 1h.*/
configureDebounceRegValue = readDinDataValue | 0x800;
HW_WR_REG32(DIN_PHY_ADDRESS, configureDebounceRegValue);
/*Set Debounce-Period value in MCU_CTRL_MMR_DBOUNCE_CFG1 (0x04504084) registers for */
HW_WR_REG32(MCU_CTRL_MMR_DBOUNCE_CFG1_PHY_ADDR, time); /* time means Debounce-Period in mili-second*/
return retValue;
}
在 ISR 中、切换一个测试 GPIO、并使用该 TEST-GPIO 上的 CRO 捕获以下测试结果。


在上面的 API 代码中添加额外打印内容、在设置去抖时间之前和设置去抖时间(10毫秒去抖时间)之后检查以下寄存器值
/* MCU_GPIO0_16 ( MCU_PADCONFIG16 )*/
#define DIN_PHY_ADDRESS 0x04084040
/* MCU_CTRL_MMR_DBOUNCHE_CFG1 PHY 地址*/
#define MCU_CTRL_MMR_DBOUNCHE_CFG1_PHY_ADDR 0x04504084

谢谢
Nisarg
您好 Nisarg:
[报价 userid="598515" url="~/support/processors-group/processors/f/processors-forum/1368738/sk-am62a-lp-how-do-we-configure-mcu-gpio-debounce-time-in-the-mcu-r5-firmware/5303684 #5303684"]1) 1)我们如何设置/更改 GPIO 的频率?
2) 2)如何检查 GPIO 的当前工作频率?
[报价]请参阅 AM62A 器件的时钟树工具、了解与时钟相关的信息和可视化。 请参阅 时钟树。
请参阅下面的屏幕截图。

此致、
Tushar
Tushar、您好!
我们根据提供的链接进行了检查、发现了以下有关 MCU_GPIO0的内容

但我们的问题是: 如何使用 CCS 工具和配置/更改 MCU_GPIO0频率 "example.syscfg" 情况?

我们使用检查了板载 MCU_GPIO0电流时钟相关信息 "k3conf" 命令


命令:-
k3conf 显示设备| grep "MCU_GPIO"
第七十九章
k3conf 转储 parent_clock 79 0
如何使用 CCS 工具和配置/更改 MCU_GPIO0频率 "example.syscfg" 情况? 或提供命令/API 来配置 MCU_GPIO0中去抖支持所需的频率???
谢谢!
Nisarg
您好 Nisarg:
您能告诉我们您的中断需要多长时间处理吗?
这也是延迟的一部分(即~457ms)吗?
您要使用什么方法来捕获上述波形?
您是否在中断服务例程开始时使用 GPIO 切换?
我一直在尝试复制您的用例、但无法看到~457ms 的延迟。
我不使用 GPIO 切换和捕获波形、而是在 ISR 处理一开始就使用时间戳并计算从上次发生时间差。
我每隔1秒写入一次 GPIO1_26引脚(该引脚连接到 MCU_GPIO0_15)、我没有看到花费~457ms 的任何延迟。 您还在计算 ISR 处理时间吗?
请参阅以下代码。
/*
* Copyright (C) 2021-2023 Texas Instruments Incorporated
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the
* distribution.
*
* Neither the name of Texas Instruments Incorporated nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <kernel/dpl/DebugP.h>
#include <kernel/dpl/ClockP.h>
#include <kernel/dpl/CycleCounterP.h>
#include <kernel/dpl/AddrTranslateP.h>
#include <kernel/dpl/HwiP.h>
#include "ti_drivers_config.h"
#include "ti_drivers_open_close.h"
#include "ti_board_open_close.h"
/*
* This example configures a GPIO pin in input mode
* and configures it to generate interrupt on rising edge.
* The application waits for 5 key presses, prints the
* number of times the keys are pressed and exits.
*/
#define GPIO_DIR_INPUT (1U)
#define GPIO_DIR_OUTPUT (0U)
uint32_t gGpioBaseAddr1 = GPIO1_26_BASE_ADDR;
uint32_t gGpioBaseAddr2 = MCU_GPIO0_16_BASE_ADDR;
HwiP_Object gGpioHwiObject;
volatile uint32_t gGpioIntrDone = 0;
static void GPIO_bankIsrFxn(void *args);
extern void Board_gpioInit(void);
extern void Board_gpioDeinit(void);
void Sciclient_gpioIrqSet(uint16_t src_index, uint16_t dst_host_irq);
void Sciclient_gpioIrqRelease(uint16_t src_index, uint16_t dst_host_irq);
extern uint32_t Board_getGpioButtonIntrNum(void);
#if defined(__C7504__)
extern uint32_t Board_getGpioButtonEventId(void);
#endif
extern char* Board_getGpioButtonSwitchNum(void);
#define MCU_GPIO_BASE 0x4201000
void gpio_input_interrupt_main(void *args)
{
int32_t retVal;
uint16_t eventId = HWIP_INVALID_EVENT_ID;
uint32_t waitCount = 5;
HwiP_Params hwiPrms;
Board_gpioInit();
CycleCounterP_reset();
DebugP_log("GPIO Input Interrupt Test Started ...\r\n");
DebugP_log("GPIO Interrupt Configured for Rising Edge ...\r\n");
#if defined(__C7504__)
eventId = Board_getGpioButtonEventId();
#endif
/* Address translate */
gGpioBaseAddr1 = (uint32_t) AddrTranslateP_getLocalAddr(gGpioBaseAddr1);
/* Setup GPIO for interrupt generation */
GPIO_setDirMode(gGpioBaseAddr1, GPIO1_26_PIN, GPIO1_26_DIR);
GPIO_setTrigType(gGpioBaseAddr1, GPIO1_26_PIN, GPIO1_26_TRIG_TYPE);
/* Address translate */
gGpioBaseAddr2 = (uint32_t) AddrTranslateP_getLocalAddr(gGpioBaseAddr2);
/* Setup GPIO for interrupt generation */
GPIO_setDirMode(gGpioBaseAddr2, MCU_GPIO0_16_PIN, MCU_GPIO0_16_DIR);
GPIO_setTrigType(gGpioBaseAddr2, MCU_GPIO0_16_PIN, MCU_GPIO0_16_TRIG_TYPE);
GPIO_bankIntrEnable(gGpioBaseAddr2, GPIO_GET_BANK_INDEX(MCU_GPIO0_16_PIN));
/* Register pin interrupt */
HwiP_Params_init(&hwiPrms);
hwiPrms.intNum = CSLR_MCU_R5FSS0_CORE0_CPU0_INTR_WKUP_MCU_GPIOMUX_INTROUTER0_OUTP_7;
hwiPrms.eventId = eventId;
hwiPrms.isPulse = 1;
hwiPrms.callback = &GPIO_bankIsrFxn;
hwiPrms.args = (void *) MCU_GPIO0_16_PIN;
retVal = HwiP_construct(&gGpioHwiObject, &hwiPrms);
DebugP_assert(retVal == SystemP_SUCCESS );
while(1)
{
GPIO_pinWriteHigh(gGpioBaseAddr1, GPIO1_26_PIN);
ClockP_sleep(1);
GPIO_pinWriteLow(gGpioBaseAddr1, GPIO1_26_PIN);
ClockP_sleep(1);
}
/* Unregister interrupt */
GPIO_bankIntrDisable(gGpioBaseAddr2, GPIO_GET_BANK_INDEX(MCU_GPIO0_16_PIN));
GPIO_setTrigType(gGpioBaseAddr2, MCU_GPIO0_16_PIN, GPIO_TRIG_TYPE_NONE);
GPIO_clearIntrStatus(gGpioBaseAddr2, MCU_GPIO0_16_PIN);
HwiP_destruct(&gGpioHwiObject);
DebugP_log("GPIO Input Interrupt Test Passed!!\r\n");
DebugP_log("All tests have passed!!\r\n");
Board_gpioDeinit();
}
volatile uint32_t time[1000] = {0};
volatile uint32_t itr = 0;
volatile uint32_t prev = 0;
static void GPIO_bankIsrFxn(void *args)
{
uint32_t curr = CycleCounterP_getCount32();
if(itr < 1000 && gGpioIntrDone > 5) /* ignoring first 5 iteration */
{
if(prev < curr)
{
time[itr] = (curr - prev) / 800;
}
else
{
time[itr] = ((0xFFFFFFFF - prev) + curr) / 800;
}
itr++;
}
uint32_t pinNum = (uint32_t) args;
uint32_t bankNum = GPIO_GET_BANK_INDEX(pinNum);
uint32_t intrStatus, pinMask = GPIO_GET_BANK_BIT_MASK(pinNum);
/* Get and clear bank interrupt status */
intrStatus = GPIO_getBankIntrStatus(gGpioBaseAddr2, bankNum);
GPIO_clearBankIntrStatus(gGpioBaseAddr2, bankNum, intrStatus);
/* Per pin interrupt handling */
if(intrStatus & pinMask)
{
gGpioIntrDone++;
}
prev = CycleCounterP_getCount32();
}
我可以看到中断每1秒出现一次 您能否 在设置去抖时间并让我们了解结果后、尝试上述计算时间的方法。
此致、
Tushar
您要使用什么方法来捕获上述波形?
您是否在中断服务例程开始时使用 GPIO 切换?
[报价]Tushar、您好!
void DINTriggerISR(void *args)
{
/*-TESTING ONLY-*/
if(0 == gGpioDioCounter)
{
setGpioValue(MCU_GPIO_CAM_TRIGGER_PIN, GPIO_PIN_HIGH);
gGpioDioCounter = 1;
}
else if(1 == gGpioDioCounter)
{
setGpioValue(MCU_GPIO_CAM_TRIGGER_PIN, GPIO_PIN_LOW);
gGpioDioCounter = 0;
}
}您好 Nisarg:
我们正在处理这一问题。
根据我的理解、我们要将25MHz 时钟馈送到 MCU_GPIO 并在去抖寄存器中配置值10。
通常,GPIO 应等待10个 GPIO 输入时钟周期。 因此、我们可以在25MHz 上等待10GPIO 时钟周期、即0.4 μ s。
然后、大约 GPIO 应该仅在1ms 切换、但没有发生这种情况。
因此、我们从内部团队获取有关如何计算该去抖期的数据。
我最初的怀疑是,这个问题可能是与去抖计算的问题.
此致、
Anil。
Anil、您好!
我们的要求是配置 0至21毫秒 根据我们当前的 MCU-GPIO 工作时钟频率进行去抖范围。 请提供有关如何配置以下寄存器以获得高于毫秒 范围的去抖时间值的详细信息
/* MCU_GPIO0_16 (MCU_PADCONFIG16)(MCU_MCAN1_RX)*/
#define DIN_PHY_ADDRESS 0x04084040
/* MCU_CTRL_MMR_DBOUNCHE_CFG1 PHY 地址*/
#define MCU_CTRL_MMR_DBOUNCHE_CFG1_PHY_ADDR 0x04504084
谢谢!
Nisarg
Nisarg
下面是基于25MHz 源的延迟表。
| DB_cfg_5:0 | GPIO 情况 (32.768MHz (1)) |
EQEP 情况 (25MHz (1)) |
DB_cfg_5:0 | GPIO 情况 (25MHz (1)) |
EQEP 情况 (250MHz (1)) |
||||||
| 12月 | 目标值 | 漂移 | 人员 | 漂移 | 人员 | 12月 | 目标值 | 漂移 | 人员 | 漂移 | 人员 |
| 0 | 000000 | 电容器 | 不适用 | byass | 不适用 | 32. | 100000 | 0.04. | 美国 | 4. | ns |
| 1. | 000001 | 1.95. | ms | 2.56. | 美国 | 33. | 100001 | 0.08. | 美国 | 8. | ns |
| 2. | 000010 | 2.93. | ms | 3.84. | 美国 | 34. | 100010. | 0.12. | 美国 | 12. | ns |
| 3. | 000011 | 3.91. | ms | 5.12. | 美国 | 35. | 100011. | 0.16. | 美国 | 16. | ns |
| 4. | 000100 | 4.88 | ms | 6.40. | 美国 | 36. | 100100 | 0.20. | 美国 | 20. | ns |
| 5. | 000101 | 5.86 | ms | 7.68 | 美国 | 37. | 100101. | 0.24. | 美国 | 24. | ns |
| 6. | 000110 | 6.84. | ms | 8.96. | 美国 | 38. | 100110 | 0.28. | 美国 | 28. | ns |
| 7. | 000111 | 7.81. | ms | 10.24. | 美国 | 39. | 100111. | 0.32. | 美国 | 32. | ns |
| 8. | 001000 | 8.79 | ms | 11.52. | 美国 | 40. | 101000 | 0.36. | 美国 | 36. | ns |
| 9. | 001001 | 9.77 | ms | 12.80 | 美国 | 41. | 101001. | 0.40. | 美国 | 40. | ns |
| 10. | 001010 | 10.74. | ms | 14.08. | 美国 | 42. | 101010 | 0.44. | 美国 | 44. | ns |
| 11. | 001011 | 11.72. | ms | 15.36. | 美国 | 43. | 101011. | 0.48. | 美国 | 48. | ns |
| 12. | 001100 | 12.70 | ms | 16.64 | 美国 | 44. | 101100 | 0.52. | 美国 | 52. | ns |
| 13. | 001101. | 13.67 | ms | 17.92. | 美国 | 45. | 101101. | 0.56. | 美国 | 56. | ns |
| 14. | 001110 | 14.65 | ms | 19.20. | 美国 | 46. | 101110. | 0.60 | 美国 | 60. | ns |
| 15. | 001111 | 15.63. | ms | 20.48. | 美国 | 47. | 101111 | 0.64 | 美国 | 64 | ns |
| 16. | 010000 | 16.60. | ms | 21.76. | 美国 | 48. | 110000 | 0.68 | 美国 | 68 | ns |
| 17. | 010001 | 17.58. | ms | 23.04. | 美国 | 49. | 110001 | 0.72. | 美国 | 72. | ns |
| 18. | 010010 | 18.55. | ms | 24.32. | 美国 | 50. | 110010. | 0.76. | 美国 | 76. | ns |
| 19. | 010011 | 19.53. | ms | 25.60. | 美国 | 51. | 110011. | 0.80 | 美国 | 80 | ns |
| 20. | 010100 | 20.51. | ms | 26.88 | 美国 | 52. | 110100 | 0.84. | 美国 | 84. | ns |
| 21. | 010101. | 21.48. | ms | 28.16. | 美国 | 53. | 110101 | 0.88 | 美国 | 88 | ns |
| 22. | 010110 | 15.63. | ms | 20.48. | 美国 | 54. | 110110 | 20.48. | 美国 | 2.048 | 美国 |
| 23. | 010111. | 31.25. | ms | 40.96. | 美国 | 55. | 110111. | 40.96. | 美国 | 4.096 | 美国 |
| 24. | 011000 | 46.88 | ms | 61.44 | 美国 | 56. | 111000 | 61.44 | 美国 | 6.144. | 美国 |
| 25. | 011001 | 62.50. | ms | 81.92. | 美国 | 57. | 111001. | 81.92. | 美国 | 8.192. | 美国 |
| 26. | 011010 | 78.13. | ms | 102.40. | 美国 | 58. | 111010. | 102.40. | 美国 | 10.24. | 美国 |
| 27. | 011011 | 93.75 | ms | 122.88 | 美国 | 59. | 111011. | 122.88 | 美国 | 12.288. | 美国 |
| 28. | 011100 | 109.38. | ms | 143.36. | 美国 | 60. | 111100 | 143.36. | 美国 | 14.336. | 美国 |
| 29. | 011101 | 125.00 | ms | 163.84. | 美国 | 61. | 111101. | 163.84. | 美国 | 16.384. | 美国 |
| 30. | 011110 | 140.63. | ms | 184.32. | 美国 | 62. | 111110. | 184.32. | 美国 | 18.432 | 美国 |
| 31. | 011111 | 156.25. | ms | 204.80 | 美国 | 63. | 111111 | 204.80 | 美国 | 20.48. | 美国 |
我还会将其添加到下一版本的 TRM 中
-保罗
| DB_cfg_5:0 | GPIO 情况 (32.768MHz (1)) |
1)根据您提供的信息、-25MHz 表中没有毫秒范围、正确理解吗? 我们可以使用25 MHz GPIO 频率实现毫秒范围(1-21ms)的去抖延迟吗? 请提供对此的说明。
正确、在使用25MHz 源时、提供的表中的值未在您所需的值范围内提供去抖周期。
2)根据您的表格、您已经提到 GPIO 级联-32.768MHz 用于毫秒级去抖时间、 是32.768 MHz 还是32.768 KHz? 请澄清这一点。
下表显示了在使用32.768时、您有20个可能的值可满足您的要求 平均值 供电方。
[报价 userid="598515" url="~/support/processors-group/processors/f/processors-forum/1368738/sk-am62a-lp-how-do-we-configure-mcu-gpio-debounce-time-in-the-mcu-r5-firmware/5367364 #536764"]使用表中定义的20个可能值之一对 MCU_CTRL_MMR_CFG0_DBOUNCE_CFG (n)寄存器的 db_cfg 位字段进行编程。
您可以从10.74ms (001010b)开始。
您还需要 在相应的 PADCFG 寄存器中设置 DEBOUCE_SEL 位字段。 应对位字段进行编程、以选择您选择的 MCU_CTRL_MMR_CFG0_DBOUNCHE_CFG 寄存器、基本上是"n"值。
MCU_CTRL_MMR_CFG0_DBOUNCHE_CFG1 = 1
MCU_CTRL_MMR_CFG0_DBOUNCHE_CFG2 = 2
等等
DEBOUCE_SEL 值0会禁用去抖。 保留值7。 不应使用它。
-保罗
3)另外,我们如何使用提供的 GPIO 外壳频率表范围实现毫秒范围? 如何配置 GPIO-频率32.768kHz? 如果我们将 GPIO 频率配置为32.768kHz、那么它是否会影响 MCU-R5上的 GPIO 高电平或 GPIO 中断性能? 请告诉我们、较低 GPIO 频率配置是否会对性能产生任何其他影响。根据我们的要求、我们希望实现1ms 至21ms 的去抖时间。
使用表中定义的20个可能值之一对 MCU_CTRL_MMR_CFG0_DBOUNCE_CFG (n)寄存器的 db_cfg 位字段进行编程。
您可以从10.74ms (001010b)开始。
您还需要 在相应的 PADCFG 寄存器中设置 DEBOUCE_SEL 位字段。 应对位字段进行编程、以选择您选择的 MCU_CTRL_MMR_CFG0_DBOUNCHE_CFG 寄存器、基本上是"n"值。
MCU_CTRL_MMR_CFG0_DBOUNCHE_CFG1 = 1
MCU_CTRL_MMR_CFG0_DBOUNCHE_CFG2 = 2
等等
DEBOUCE_SEL 值0会禁用去抖。 保留值7。 不应使用它。
Paul、你好!
1)如何配置 "32.768kHz" 上的 GPIO 频率 "MCU_GPIO0" 域 MCU-R5是什么? 它是否会影响任何其他 GPIO 域? 请提供 MCU-R5固件的所有配置详细信息。
2) 2)我们可以配置 GPIO 频率 ("32.768kHz") 电压 MCU-GPIO 一些配置?
3) 3)如果我们进行配置 MCU-GPIO 频率相同 32.768kHz 则它会影响 MCU-GPIO 高电平/低电平转换时间还是 MCU-GPIO -interrupt performance on MCU-R5? 请告诉我们、较低 GPIO 频率配置是否会对性能产生任何其他影响。
谢谢!
Nisarg
Nisarg
我已要求 SDK 团队回答问题1和2的软件方面问题
它是否会影响任何其他 GPIO 域?
去抖只会影响 在各自 PADCFG 寄存器中对 DEBOUCE_SEL 位字段进行了编程的引脚/信号。 该数据表规定了哪些信号支持去抖功能。
3)如果我们进行了配置 MCU-GPIO 频率相同 32.768kHz 则它会影响 MCU-GPIO 高电平/低电平转换时间还是 MCU-GPIO -interrupt performance on MCU-R5? 请告知我们在较低 GPIO 频率配置的情况下是否存在任何其他性能影响。
输入要求将保持在器件数据表中指定的值。
我正在查看去抖电路的延迟影响是什么。
-保罗
您好 Nisarg:
我可以回复一下、将 GPIO 频率更改为以32.768 KHz 的频率运行。
但是、 如果我们将时钟速率更改为32.768kHz、CPU 可能需要更多周期来进行写入和读取操作、因为 I (接口)和 F (功能时钟)与 GPIO 在25MHz 上运行的情况相同。
我真的不知道你上面的问题的任何线索。 GPIO 以25MHz 运行、配置的 GPIO 去抖周期值为10、 为什么您收到的中断的持续时间是455ms、而不是大约1ms。 根据上面提到的 Paul、如果 GPIO 在25MHz 时钟上运行、我们可能无法得到以毫秒为单位的去抖周期。
我正在内部与 Paul 核实并告知您结果。
此致、
Anil。
告诉我们如果低 GPIO 频率配置对性能有何其他影响。
"只有当输入在设定的滤波器持续时间内保持稳定时、信号才被通过"
-保罗
您好 Nisarg:
我在内部向 Paul 进行了检查、确认 GPIO IP 的时钟选择和去抖时钟选择不相同。
我们可以独立配置它们。
因此、请向 GPIO 而不是1KHz 信号提供10Hz、5Hz、3.3Hz、2.5Hz 和2Hz 信号的测试结果、并且不要更改 去抖 周期。
根据上表、您已将去抖配置值配置为10、您可以保持原样、不更改 GPIO IP 时钟选择。 将 GPIO 中断类型配置为上升沿和下降沿。
请分享上述频率信号的测试结果。
根据我对上述输入的分析、您应该会获得正好为10Hz、5Hz、3.3Hz、2.5Hz 和2Hz 的中断。
此致、
Anil。
Anil、您好!
请澄清以下问题。
[报价 userid="525901" url="~/support/processors-group/processors/f/processors-forum/1368738/sk-am62a-lp-how-do-we-configure-mcu-gpio-debounce-time-in-the-mcu-r5-firmware/5385640 #5385640"]我在内部向 Paul 进行了检查、确认 GPIO IP 的时钟选择和去抖时钟选择不相同。
[报价]请提供有关上述信息的更多详细信息。
i) GPIO-IP 的时钟部分是什么?
i) 去抖时钟选择是什么?
III)此时钟选择与32.768KHz 和25 MHz GPIO 情况有何关系?
IV)两者之间的区别是什么 32.768kHz 和 25MHz GPIO 情况?
根据上表、您已将去抖配置值配置为10、可以保留理由且不更改 GPIO IP 时钟选择。 配置 GPIO 中断类型为上升沿和下降沿类型。
10 (去抖配置值为10)值是否适用于25MHz GPIO 情况? 请提供更多详细信息。

[报价 userid="525901" url="~/support/processors-group/processors/f/processors-forum/1368738/sk-am62a-lp-how-do-we-configure-mcu-gpio-debounce-time-in-the-mcu-r5-firmware/5385640 #5385640"]因此、请向 GPIO 提供10Hz、5Hz、3.3Hz、2.5Hz 和2Hz 信号的测试结果、而不是1KHz 信号、并且不要更改 去抖 周期。
对于上述输入信号、频率-时间表如下所示。 以下输入信号的占空比将是多少?
10Hz -> 100ms (毫秒)
5Hz -> 200ms (毫秒)
3.3Hz -> 303.03ms (毫秒)
2.5Hz -> 400ms (毫秒)
2Hz -> 500ms (毫秒)
在这种情况下、是如何实现的 10 (去抖配置值为10) 的去抖工作中的值 10Hz (100毫秒) 的输入信号 25 MHz GPIO-CANETM 请提供更多有关这方面的信息。
我们的最后一个问题是、您是否检查了 的去抖配置值10 (去抖配置值为10) 1kHz (1毫秒) 的输入信号 25MHz GPIO 情况 还是不呢?
谢谢!
Nisarg
i) GPIO-IP 的时钟部分是什么?
i) 去抖时钟选择是什么?
III)此时钟选择与32.768KHz 和25 MHz GPIO 情况有何关系?
IV)两者之间的区别是什么 32.768kHz 和 25MHz GPIO 情况?
[报价]您好 Nisarg:
正如我上面提到的, GPIO IP 时钟和去抖时钟的选择是不同的。
目前,在 MCU+SDK 中,GPIO IP 以25MHz 运行。 您可以通过调用 SCI 客户端并获取响应来确认。
SOC 在 GPIO 寄存器上写入数据或读取数据时。 GPIO 应以特定频率运行。
请看 下面的评论。 可通过以下配置选择 GPIO 时钟频率。
请勿更改除25MHz 之外的 GPIO IP 时钟、因为 I 和 F 时钟是相同的、因此该时钟会影响 GPIO 性能。
[报价 userid="16414" url="~/support/processors-group/processors/f/processors-forum/1368738/sk-am62a-lp-how-do-we-configure-mcu-gpio-debounce-time-in-the-mcu-r5-firmware/5305478 #5305478"]请参阅 AM62A 器件的时钟树工具、了解与时钟相关的信息和可视化。 请参阅 时钟树。
请参阅下面的屏幕截图。
[报价]根据 Paul 的上述评论、去抖配置值可以配置为0到63个值。
将0配置为31个值时、SOC 会自动为去抖时钟选择32.76KHz 时钟、GPIO 仍在25MHz 下运行。
当您将32个值配置为63个值时、SOC 会自动选择一个25MHz 时钟来对时钟进行去抖、GPIO 以25MHz 运行。
去抖时钟选择是用户的黑盒。 仅用户可以根据这些值配置0到63的值内部 SOC 去抖模块选择独立于 GPIO IP 的时钟选择、用户不能配置去抖时钟。
[报价 userid="598515" url="~/support/processors-group/processors/f/processors-forum/1368738/sk-am62a-lp-how-do-we-configure-mcu-gpio-debounce-time-in-the-mcu-r5-firmware/5389343 #5389343"]10 (去抖配置值为10)值是否适用于25MHz GPIO 情况? 请提供更多详细信息。
[报价]
当您选择10时、去抖 时钟选择为32.768kHz、GPIO 仍在25MHz 下运行、对 GPIO 性能没有影响。
[报价 userid="598515" url="~/support/processors-group/processors/f/processors-forum/1368738/sk-am62a-lp-how-do-we-configure-mcu-gpio-debounce-time-in-the-mcu-r5-firmware/5389343 #5389343"]对于上述输入信号、频率-时间表如下所示。 以下输入信号的占空比将是多少?
[/报价]我们的最后一个问题是、您是否检查了 的去抖配置值-10 (去抖配置值是10) 1kHz (1毫秒) 的输入信号 25MHz GPIO 情况 或不?
请尝试50%占空比信号并分享测试结果。
实际上、您已经配置了一个10毫秒的 去抖 周期 、并 向 GPIO 提供了一个1毫秒的信号。
这不是 验证 去抖 周期的有效测试用例。
为了 正确测试去抖周期、馈送信号时间周期应比 去抖周期长 。
根据我的分析、您获得455ms 的时间 Ton/Toff 似乎没问题。
为了确认我的分析、我让您测试上述频率并分享测试结果。
问题分析点:
1ms 信号提供 给 GPIO、 去抖 周期为10ms。
SoC 在10ms 后检测/捕获信号。
我们假设 SOC 在10毫秒后检测到第一个高电平信号 ,然后在10毫秒后检测到下一个 高电平信号 ,再次 SOC 检测到高电平信号,而不检测到低电平。
SoC 检测到相同的高信号直到455ms。 由于此 Ton 周期 、大约为~455ms
在455ms 后的某个时刻、SOC 检测到 低电平信号 直到922ms。 因此、您将获得922毫秒的总时间周期。
这是我的分析是否正确的原因、以确认我要求您在50%占空比下将馈送时钟频率更改为上述建议的频率并 分享 测试结果。
此致、
Anil。
Anil、您好!
根据您的要求、我们已捕获的结果 10Hz、5Hz 和2Hz I 向 GPIO 发送 nPUT 信号(占空比为50%时生成中断)并配置了去抖配置值 10. 将其放电。
i) 黄色信号是输入信号(GPIO 输入中断)(屏幕截图中的第1个波形)
ii)霓虹粉色信号表示来自 ISR 的 O/P 切换 GPIO 信号(屏幕截图中的第二个波形)
1) 1) 10Hz 去抖十进制值的输入信号配置为10


2) 2) 去抖十进制值为10的5Hz 输入信号


3) 3) 2Hz 配置去抖十进制值为10的输入信号


中断 ISR 逻辑
void DINTriggerISR(void *args)
{
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
uint32_t statusRegister = 0;
xTaskNotifyIndexedFromISR(TaskP_getHndl(&triggerDINTaskObj),
0,
statusRegister,
eNoAction,
&xHigherPriorityTaskWoken);
#if 1 /*-TESTING ONLY-*/
if (getGpioValue(MCU_GPIO_DIN_PIN))
{
setGpioValue(MCU_GPIO_CAM_TRIGGER_PIN, GPIO_PIN_HIGH);
}
else
{
setGpioValue(MCU_GPIO_CAM_TRIGGER_PIN, GPIO_PIN_LOW);
}
#endif
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
}

在上述所有结果中、我们观察到我们已配置去抖值 10 (10.74毫秒) 但我们正在得到一个延迟 14毫秒 b/w 输入信号检测到从 ISR 切换到 GPIO。 我们已经在上升沿和下降沿配置了中断。
当去抖配置为10时、为什么我们得到14毫秒延迟的 b/w 2信号? 是预期行为吗? 请提供更多相关信息。
[报价 userid="525901" url="~/support/processors-group/processors/f/processors-forum/1368738/sk-am62a-lp-how-do-we-configure-mcu-gpio-debounce-time-in-the-mcu-r5-firmware/5389611 #5389611"]我们假设 SOC 在10毫秒后检测到第一个高电平信号 ,然后在10毫秒后检测到下一个 高电平信号 ,再次 SOC 检测到高电平信号,而不检测到低电平。
SoC 检测到相同的高信号直到455ms。 由于此 Ton 周期 、大约为~455ms
在455ms 后的某个时刻、SOC 检测到 低电平信号 直到922ms。 因此、您得到的总时间周期为922ms
[报价]请更加明确地说明当去抖值配置为10时、哪个基极 SoC 检测到上述1KHz 输入信号。 它如何检测455毫秒的 Ton 周期? 需要有关这方面的更多信息。
谢谢!
Nisarg
在上述所有结果中、我们观察到我们已配置去抖值 10 (10.74毫秒) 但我们正在得到一个延迟 14毫秒 b/w 输入信号检测到从 ISR 切换到 GPIO。 我们已经在上升沿和下降沿配置了中断。
当去抖配置为10时、为什么我们得到14毫秒延迟的 b/w 2信号? 是预期行为吗? 请提供更多相关信息。
[报价]您好 Nisarg:
由于去抖 周期与实际输入不匹配、此处存在不同的问题。
我不确定您的测试设置、它似乎在您的测试设置中包含了许多外设/应用。
如果在测试设置中包含了许多外设、则在关键段期间可能会禁用中断、一旦这个关键段完成、中断就会恢复。
由于此延迟、您的 GPIO 中断会延迟、并且需要使用 GPIO 测量时间、因此我们 还需要包含 GPIO 延迟时间。
我建议 删除 除测试应用程序之外的所有应用程序,并切换 GPIO 直接写入 NORTOS 示例中的寄存器。
根据上述结果、我们可以确认 您的结果是否与上述结果相同。
如果 您仍获得上述结果、则表明 去抖表有问题。
根据上述结果、我们需要将去抖 周期配置为始终小于输入频率。
请更清楚地说明当去抖值配置为10时、哪个基底 SoC 检测到上述1KHz 输入信号。 它如何检测455毫秒的 Ton 周期? 需要有关此方面的更多信息。
问题分析点:
1ms 信号提供给 GPIO、并配置为去抖 周期10ms。
SoC 仅在10ms 后检测/捕获信号。

从上表中您可以看到、即使信号为高电平、SOC 也会在第0毫秒时检测到0、因为去抖周期为10ms。
恰好在10ms 时、SOC 检测到高电平。
接下来、输入信号将在接下来的10ms 内从低电平变为高电平并在10个周期内从高电平变为低电平。
恰好在20毫秒时、SOC 也检测到相同的高电平信号。
接下来、输入信号将 在接下来的10ms 内从低电平变为高电平并在10个周期内从高电平变为低电平。
正是在30毫秒后再次,SOC 检测到相同的高信号,等等...
上述测试用例中没有发生 GPIO 转换。
因此、不会触发 GPIO 中断。
在某些时候、GPIO 检测到低电平、表示您收到中断、而 SOC 检测到低电平信号的时间可能为455ms。
同样的行为,低信号也和最后你得到922ms 的周期, 由于上述行为.
实际上、您已经配置了一个10毫秒的去抖周期、并向 GPIO 提供了一个1毫秒的信号。
这不是验证去抖 周期的有效测试用例。
为了 正确测试去抖周期、馈送信号时间周期应比去抖周期更长 。
此致、
Anil。
您好 Nisarg:
由于去抖 周期与实际输入不匹配、此处存在不同的问题。
我不确定您的测试设置、它似乎在您的测试设置中包含了许多外设/应用。
如果在测试设置中包含了许多外设、则在关键段期间可能会禁用中断、一旦这个关键段完成、中断就会恢复。
由于此延迟、您的 GPIO 中断会延迟、并且需要使用 GPIO 测量时间、因此我们 还需要包含 GPIO 延迟时间。
我建议 删除 除测试应用程序之外的所有应用程序,并切换 GPIO 直接写入 NORTOS 示例中的寄存器。
根据上述结果、我们可以确认 您的结果是否与上述结果相同。
如果 您仍获得上述结果、则表明 去抖表有问题。
[报价]Anil、您好!
感谢这些详细信息、但我们已在无去抖配置下检查了相同的代码设置、并且我们发现 从哪个引脚到 GPIO 切换没有延迟 b/w 输入信号检测 ISR . ( 在 MCU-R5 FreeRTOS 上运行的应用)
1) 10Hz 输入信号、GPIO 输入中断引脚上具有无去抖配置。

2) 5Hz 输入信号、GPIO 输入中断引脚上具有无去抖配置。

3) 2) 2Hz 输入信号、GPIO 输入中断引脚上具有无去抖配置。

请查看上述详细信息、并告知我们 是否仍需要更改测试设置。
谢谢!
Nisarg
尊敬的 Anil:
在上次测试期间、我们使用10Hz 输入信号捕获了以下不同的去抖时间结果。
1) 1)去抖十进制值为15的10Hz 输入信号配置(15.63ms)

2) 2) 10Hz 去抖十进制值的输入信号 配置为21 (21.48ms)

请使用 a 查看上述不同的去抖时间结果 10Hz 输入信号。
如果您需要更多详细信息、请告知我们。 我们正在等待您的回复。
谢谢!
Nisarg
Anil、您好!
当前状态是什么?
[报价]我们正在等待 TI 探讨如何实现在 MCU 上配置的精确去抖时间。
[/quote]您如何在应用程序中实施去抖?
[报价]我们的要求仅是实现硬件去抖时间、因此在提供有关根本原因的信息之前、我们会被阻止。
[报价 userid="525901" url="~/support/processors-group/processors/f/processors-forum/1368738/sk-am62a-lp-how-do-we-configure-mcu-gpio-debounce-time-in-the-mcu-r5-firmware/5425267 #5425267"]
目前这个问题时间比较长、 我也在跟设计团队进行探讨。
我的建议是、如果您目前陷入困境、请根据您的要求将去抖周期配置为1ms 至20ms、并检查结果。
然后分析输出与实际去抖配置之间的误差。之后、将错误合并到软件中。 需要使用更多的 样本来确认这一测试、而不仅仅是一个样本。
[报价]我们需要与客户沟通此问题的根本原因、然后我们就上述建议的实施做出决定。 因此、请提供根本原因、无论这是硬件缺陷还是我们的配置不正确。 如果这是硬件缺陷、请提供 MCU 处理器当前支持的正确表格信息。
谢谢!
Nisarg
您好 Nisarg:
感谢您提供以上信息。
在内部与硬件专家讨论、他们确认去抖验证测试可能存在问题。
因此、我们不提供频率信号、而是发送需要更改的脉冲宽度、并且请查看 Paul 评论。
请尝试使用 Paul 的建议并分享测试结果、并在10、15和21 去抖 配置下进行相同的测试。
最好的测试方法是改变输入脉冲宽度、并搜索经过去抖电路时边沿上或被去抖电路阻断的宽度。 它们可能从非常短的脉冲开始、这些脉冲应始终被阻断并增加、直到看到通过;也可能从长脉冲开始、然后降低、直到被阻断。 这是测试去抖电路和验证延迟而不担心延迟的最佳方法。
此致、
Anil。
Anil、您好!
感谢您的答复!!!
[报价 userid="525901" url="~/support/processors-group/processors/f/processors-forum/1368738/sk-am62a-lp-how-do-we-configure-mcu-gpio-debounce-time-in-the-mcu-r5-firmware/5427811 #5427811"]感谢您提供以上信息。
在内部与硬件专家讨论、他们确认去抖验证测试可能存在问题。
因此、我们不提供频率信号、而是发送需要更改的脉冲宽度、并且请查看 Paul 评论。
请尝试使用 Paul 的建议并分享测试结果、并在10、15和21 去抖 配置下进行相同的测试。
[报价]请提供以上各点的更多详情。 频率信号还 根据占空比包含一定的导通/关断周期脉冲宽度。 请就 上述 问题提供更多的说明。 我们将相应地进行检查/测试并收集数据。
我们已检查了 具有不同去抖值的输入频率信号、并已将结果与您共享。 我们正在等待您的回复。
[报价 userid="598515" url="~/support/processors-group/processors/f/processors-forum/1368738/sk-am62a-lp-how-do-we-configure-mcu-gpio-debounce-time-in-the-mcu-r5-firmware/5403237 #5403237"]尊敬的 Anil:
在上次测试期间、我们使用10Hz 输入信号捕获了以下不同的去抖时间结果。
1) 1)去抖十进制值为15的10Hz 输入信号配置(15.63ms)

2) 2) 10Hz 去抖十进制值的输入信号 配置为21 (21.48ms)

请使用 a 查看上述不同的去抖时间结果 10Hz 输入信号。
如果您需要更多详细信息、请告知我们。 我们正在等待您的回复。
谢谢!
Nisarg
[报价]谢谢!
Nisarg
Nisarg
请在上面提供更多详细信息
您应该能够使用与现有设置相同的设置。
1.根据需要配置去抖值。
2.向 GPIO 管脚施加脉冲宽度小于去抖值的输入。 您可以从去抖设置的80%开始。 GPIO 不应出现输入脉冲、不应产生中断、也不应出现输出 GPIO 转换。
3.逐渐增大脉冲宽度直到输出 GPIO 转换。 这意味着输入脉冲已成功通过去抖滤波器并被 GPIO 输入识别。 输入脉冲的宽度应略大于去抖设置。
您可以尝试在选择32KHz 和25MHz 去抖设置时进行此操作。
这是由另一个 保罗提出的。
-保罗
Paul、你好!
[报价 userid="598515" url="~/support/processors-group/processors/f/processors-forum/1368738/sk-am62a-lp-how-do-we-configure-mcu-gpio-debounce-time-in-the-mcu-r5-firmware/5396227 #5396227"]Anil、您好!
感谢这些详细信息、但我们已在无去抖配置下检查了相同的代码设置、并且我们发现 从哪个引脚到 GPIO 切换没有延迟 b/w 输入信号检测 ISR . ( 在 MCU-R5 FreeRTOS 上运行的应用)
1) 10Hz 输入信号、GPIO 输入中断引脚上具有无去抖配置。

2) 5Hz 输入信号、GPIO 输入中断引脚上具有无去抖配置。

3) 2) 2Hz 输入信号、GPIO 输入中断引脚上具有无去抖配置。

请查看上述详细信息、并告知我们 是否仍需要更改测试设置。
谢谢!
[报价] [报价 userid="598515" url="~/support/processors-group/processors/f/processors-forum/1368738/sk-am62a-lp-how-do-we-configure-mcu-gpio-debounce-time-in-the-mcu-r5-firmware/5403237 #5403237"]尊敬的 Anil:
在上次测试期间、我们使用10Hz 输入信号捕获了以下不同的去抖时间结果。
1) 1)去抖十进制值为15的10Hz 输入信号配置(15.63ms)

2) 2) 10Hz 去抖十进制值的输入信号 配置为21 (21.48ms)

请使用 a 查看上述不同的去抖时间结果 10Hz 输入信号。
如果您需要更多详细信息、请告知我们。 我们正在等待您的回复。
谢谢!
Nisarg
[报价]我们之前检查了具有不同去抖值的输入频率信号、并 在此论坛中与 TI 团队共享了结果(CRO 捕获的结果)。 请检查以上旧数据结果。 从上面的结果我们可以看到这一点 界限 之间的比较而言很重要。
上述信息是否不足以识别此问题? 如果您需要更多详细信息、请告知我们。 我们正在等待您的回复。
我们需要与客户沟通此问题的根本原因。 因此、请提供根本原因、无论这是硬件缺陷还是我们的配置不正确。 如果这是硬件缺陷、请提供 MCU 处理器当前支持的正确表格信息。
谢谢!
Nisarg