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.

[参考译文] 如何在 DRA72xx 中将 GPIO 线路配置为输出以驱动 LED 或开关

Guru**** 2595210 points
Other Parts Discussed in Thread: SYSCONFIG

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/587873/how-to-configure-in-dra72xx-a-gpio-line-as-an-output-to-drive-led-or-switch

Thread 中讨论的其他器件:SysConfig

大家好、

我正在尝试通过 DRA72xx 处理器中的 M4内核配置一个 GPIO (GPIO6_11)线路。以下是我执行的步骤、但无法将引脚驱动为高电平。我已附加以下代码和用于配置的步骤。如果我错过了任何内容、请告知我。


#define GPIO_base_regs_6 (0x4805D000u) GPIO 寄存器使用以下覆盖结构进行映射。

typedef 结构{
易失性 uint32修订版;
易失性 UINT8 RSVD0[12];
易失性 UINT32 SysConfig;
易失性 UINT8 RSVD1[12];
易失性 uint32 EOI;
易失性 uint32 IRQSTATUS_RAW_0;
易失性 uint32 IRQSTATUS_RAW_1;
易失性 uint32 IRQSTATUS_0;
易失性 uint32 IRQSTATUS_1;
易失性 uint32 IRQSTATUS_SET_0;
易失性 uint32 IRQSTATUS_SET_1;
易失性 uint32 IRQSTATUS_CLR_0;
易失性 uint32 IRQSTATUS_CLR_1;
易失性 uint32 IRQWAKEN_0;
易失性 uint32 IRQWAKEN_1;
易失性 UINT8 RSVD2[200];
易失性 uint32 SYSSTATUS;
易失性 UINT8 RSVC3[24];
易失性 uint32 CTRL;
易失性 uint32 OE;
易失性 uint32数据主;
易失性 UINT32 DATAOUT;
易失性 UINT32 LEVELDETECT0;
易失性 UINT32 LEVELDETECT1;
易失性 uint32 RISINGDETECT;
易失性 uint32 FLLINGDETECT;
易失性 uint32 DEBOUNCHENABLE;
易失性 uint32 DEBOUNCINGTIME;
易失性 UINT8 RSVD4[56];
易失性 UINT32 CLEARDATAOUT;
易失性 UINT32 SETDATAOUT;
} CSL_GpioRegs;

我要遵循的三个步骤。

设置 GPIO 引脚的复用引脚。

#define GPIO6_11 0x378 //焊盘基址

{GPIO6_11、(IEN | PEN | PTD | WKDIS | FSC | M14)}

IE-18位(GPIO6_11_INPUTENABLE)=1
PEN - 16 (GPIO6_11_PULLUDENABLE 0x0:)=1
PTD - 17 (GPIO6_11_PULLTYPESELECT)=0
WKDIS-24 (GPIO6_11_WAKEUPENABLE)= 0
FSC -19 (GPIO6_11_SLEWCONTROL)= 1.
M14 (GPIO6_11_MUXMODE)= 0xE (0xE:GPIO6_11)

2.设置输出方向。

if (DIO_INPUT =方向)

gpioRegs->OE |=(0x01<Regs.><pin);

否则、如果(DIO_OUTPUT =方向)

gpioRegs->OE &=~(<pin);

使端口线路为真、并在输出引脚中期望3.3V 电压

IF (高)

gpioRegs->SETDATAOUT =(<pin);

其他

gpioRegs->CLEARDATAOUT =(1<<pin);

提前感谢您的支持

此致、

Jeyaseelan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Jeyaseelan、您好!
    您的配置看起来正确。 我已经在电路板上进行了测试、能够打开/关闭 GPIO6_11输出。
    3一般性意见:
    请从寄存器读回这些值、以确保正确设置这些值。
    2.检查 SysConfig (偏移量0x10)寄存器是否明确启用 GPIO6。 我的值是0x1D。
    3.检查 PCB 上的引脚是否连接、是否没有其他 IC 或元件连接到它。

    此致、
    STAN
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Jeyaseelan、您好!

    我已将您的问题转交给 GPIO 专家。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    最初、我也在 PRCM 中启用了该时钟、然后开始执行上一篇文章中提到的其他步骤。

    #define CM_L4PER_GPIO6_CLKCTRL0x4780
    #define DRA72X_PRCM_BASE 0x4A005000

    SR32 (DRA72X_PRCM_BASE + CM_L4PER_GPIO6_CLKCTRL、0、2、1);

    状态= WAIT_OR_CLK_ENABLE (Ctrl_BASE + CM_L4PER_GPIO6_CLKCTRL);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、
    您能否确认我之前的帖子中的第1-3点?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Stilyanov、您是否在测试期间配置了 CM_L4PER_GPIO6_CLKCTRL。是否必须执行?

    我将检查您在帖子中提到的3个要点、并在完成后通知您状态。

    谢谢

    此致、
    Jeyaseelan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Jeyaseelan
    是的、MODULEMODE = 1是获得 GPIO 寄存器访问的必备条件。
    仅当需要去抖功能时、OPTFCLKEN_DBCLK = 1。

    此致、
    STAN
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Stan、

    我已根据您的建议尝试遵循。

    请从寄存器读回这些值、以确保正确设置这些值。

    我已经重新读取了设置寄存器,它起作用了

    if (DIO_INPUT =方向)

    gpioRegs->OE |=(0x01<Regs.><pin);
    while (!(gpioRegs->OE &)(<pin)))
    {}

    否则、如果(DIO_OUTPUT =方向)

    gpioRegs->OE &=~(<pin);
    while ((gpioRegs->OE &)(<pin)))
    {}

    2.检查 SysConfig (偏移量0x10)寄存器是否明确启用 GPIO6。 我的值是0x1D。

    该值仅为0x1D。GPIO 线路中仍然没有输出。

    3.检查 PCB 上的引脚是否连接、是否没有其他 IC 或元件连接到它。

    从 Jacinto、这是另一侧的开放式连接。

    我的 PCB 设计人员要求使用 GPIO4_12线路、因此 为此我使用了以下、CLK_CTRL 和引脚多路复用器。 请验证以下配置是否也 适用于电路板上的 GPIO4_12线路。

    #define CM_L4PER_GPIO4_CLKCTRL 0x4770

    {VIN2A_D11、(IEN | PEN | PTD | WKDIS | FSC | M14)}

    非常感谢您的帮助。

    此致、

    Jeyaseelan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我建议您在控制台中打印寄存器值或通过调试器读取这些值。 您可能写入了错误的地址或错误的 GPIO 编号或 smth。 类似。

    对于 GPIO4_12、我已经使用 OMAPCONF 工具设置了以下寄存器:
    1.CTRL_CORE_PAD_VIN2A_D11.MUXMODE = 0xE //选择 GPIO4_12
    CM_L4PER_GPIO4_CLKCTRL = 0x101 //启用 GPIO4
    GPIO_OE = 0xFFFFFFF //引脚12设置为输出模式
    GPIO_DATAOUT = 0x1000 //引脚12设置为高电平状态

    GPIO4_12为3.3V、电压表读数为