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.

[参考译文] TMS320F28388D:配置 GPIO 的步骤以及 GPyGMUX1/2对外设的影响

Guru**** 2609955 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1032923/tms320f28388d-steps-to-configure-gpios-and-also-the-impact-of-gpygmux1-2-on-the-peripheral

器件型号:TMS320F28388D

尊敬的 TI:

我对 GPIO 的配置没有什么疑问、因为我在定制板的寄存器设置中看到一些毛刺脉冲。

我正在使用 f28388D 控制器、并参考 TRM、spruio、使用位域方法而不是 GPIO 功能来配置 GPIO。

我只是配置 GPyMUX 和 GPyDIR 寄存器。 我是否还需要使用其他处于默认状态的寄存器。

例如、对于输入鉴定寄存器、TRM 会显示"默认情况下、所有鉴定都与采样周期等于 PLLSYSCLK 同步"。 那么、我们还需要进行默认配置吗?

您能否告诉我 GPyGMUX 的使用、因为它仅是 TRM 状态、用于外设混合。 因为、我认为不需要配置 GPIO、但在配置外设时很有用。

我需要对此有一些想法。 这将如何影响外设。

此外、我检查了一个文档、其中将提供配置 GPIO 的步骤:

void main (void)
{...

// GPIO 配置
EALLOW;//禁用上拉
GpioCtrlRegs.GPxPUD.bit.GPIOx = 1;//禁用开漏模式
GpioCtrlRegs.GPxODR.bit.GPIOx = 0;//之前将 GPIO 设置为驱动静态0
//启用输出
GpioDataRegs.GPxCLEAR.bit.GPIOx= 1;
EDIS;
(笑声)

//应用程序代码
(笑声)

//要驱动0,请将 GPIO 方向设置为输出
GpioCtrlRegs.GPxDIR.bit.GPIOx = 1;

//要对 GPIO (逻辑1)进行三态处理,请将 GPIO 设置为输入
GpioCtrlRegs.GPxDIR.bit.GPIOx = 0;

这是配置 GPIO 的最佳方法吗?

请根据通用 I/O 的配置、仅突出显示 GPyGMUX 和 GPYSEL 寄存器。

谢谢

Gurusha

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

    Gurusha、

    如果您看一下我们的 driverlib 示例、GPIO 和 pinmux 配置代码、一切都变得清晰。

    使用 GPyGMUX 和 GPxMUX 来选择 GPIO 是处于 GPIO 模式还是其他外设正在驱动它。

    2.您的 GPIO 处于输入模式、可以进行限定、同步或在异步模式下使用。 您可以根据应用程序设置来决定。

    NIMA

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

    你(们)好、Nima
    但是、如果我们已经有外设多路复用器(GPyMUX)、为什么我们需要组多路复用(GPyGMUX)。

    我提出这个问题的原因是、当我使用 driverlib 函  数时、即使函数"GpioSetupPinMux"负责组复用、但我无法在 GPyGMUX 寄存器中看到它针对 SCI C 进行配置、因此我的 UART 不会出现。

    GpioSetupPinMux (107、GPIO_MASTER_MUX_CPU1、GPIO_PER_MUX_index_2);
    GpioSetupPinMux (106、GPIO_MASTER_MUX_CPU1、GPIO_PER_MUX_index_2);
    GpioSetupPinOptions (107、GPIO_DIR_INPUT、GPIO_FLAG_ASYNC|GPIO_FLAG_PULLUP);
    GpioSetupPinOptions (106、GPIO_DIR_OUTPUT、GPIO_FLAG_ASYNC|GPIO_FLAG_PULLUP);

    但是、当我使用位域配置时、由于这很简单、它直接设置 GPyGMUX 寄存器、而我的 SCI C 已启动

    GpioCtrlRegs.GPDMUX1.bit.GPIO107 = 2;
    GpioCtrlRegs.GPDMUX1.bit.GPIO106 = 2;

    GpioCtrlRegs.GPDGMUX1.bit.GPIO107 = 1;
    GpioCtrlRegs.GPDGMUX1.bit.GPIO106=1;

    GpioCtrlRegs.GPDQSEL1.bit.GPIO107 = 3;
    GpioCtrlRegs.GPDQSEL1.bit.GPIO106 = 3;

    GpioCtrlRegs.GPDPUD.bit.GPIO107 = 0;
    GpioCtrlRegs.GPDPUD.bit.GPIO106 = 0;

    请问有什么不同、或者如果有、我在 driverlib 函数设置中缺失了什么?

    谢谢、此致

    Gurusha

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

    GMUX + MUX 支持多达16个选项。

    EALLOW 保护禁用/启用?

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

    是的、也使用 EALLOW/EDIS 保护。

    我可以看到、通过这些设置、107和106的 GPDGMUX1未更新

    GpioSetupPinMux (107、GPIO_MASTER_MUX_CPU1、GPIO_PER_MUX_index_2);
    GpioSetupPinMux (106、GPIO_MASTER_MUX_CPU1、GPIO_PER_MUX_index_2);
    GpioSetupPinOptions (107、GPIO_DIR_INPUT、GPIO_FLAG_ASYNC|GPIO_FLAG_PULLUP);
    GpioSetupPinOptions (106、GPIO_DIR_OUTPUT、GPIO_FLAG_ASYNC|GPIO_FLAG_PULLUP);

    如果您看到寄存器转储、右侧是上述功能设置、您可以在其中看到 GPDGMUX1的 GPIO 控制寄存器。

    您将了解差异。

    e2e.ti.com/.../registerdump.pdf

    由于这种不寻常的变化、SCI C 没有上升

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

    此外、

    我检查了 gpio106和107的组多路复用器寄存器、方法是在运行时手动将 GPDMUX1设置为1 (GPDMUX1值变为0x00505500)

    我看到 SCI C 正在上升。

    驱动程序库函数确实存在一些问题。

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

    似乎问题完全是 EALLOW 未被激活。 您所使用的并非完全是 driverlib。 Driverlib 根本不使用位字段。

    您正在使用 bitfield 的辅助驱动程序函数。

    我建议您单步完成配置并找到问题。 这将是代码中的一个简单错误。