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.

[参考译文] CCS/TM4C_PINMUX:为什么在生成的代码中没有以任何有用的方式反映引脚名称?

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/575431/ccs-tm4c_pinmux-why-are-my-pin-names-not-reflected-in-any-useful-way-in-the-generated-code

器件型号:TM4C_PINMUX

工具/软件:Code Composer Studio

大家好、我刚刚在 TI 引脚多路复用器工具(离线版本、请参阅下面的内容)中输入了我的项目的引脚分配(使用 TM4C1294NCPT)。 生成的代码很可能会将 I/O 引脚设置为我所需的状态。

但是、我在工具中为每个 I/O 引脚指定了一个有意义的名称、但生成的代码中没有显示这些名称。 我希望在生成的代码中获得一些#defines、以便以后在切换引脚等时可以使用我指定的名称来引用它们。 在围绕每个引脚的初始化代码创建的 doxygen 注释中甚至没有引用它们。这有多愚蠢?

某些竞争对手设法为其工具中定义的每个 GPIO 提供至少一个#define 用于 fancy _name_port 和 fancy _name_PIN、因此可以从代码中轻松引用它。

我是否忽略了某些内容、或者是否真正不会这样做?

Markus

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

    虽然可以为 GPIO 号添加定义、但无法为 GPIO 端口号添加名称。 当为多个 IO 分配了相同的名称并且它们分布在不同的端口时、会出现真正的问题。 工具检查器可能无法按预期工作。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Amit、您好!

    赦免,但“名字的重复”似乎不太可能出现在“真正的问题”状态附近的任何地方——难道不是吗?
    海报看起来最有能力-他的请求看起来(非常)公平和恰当...

    也许像"oj"-我们需要寻找"真正的"杀手 问题...

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

    我只想指出、我简直不能相信任何人会想到在 C 代码中提供客户给出的"别名"。 当它甚至未用于芯片引脚的图形表示时,它也不会显示在输出文件的*ANY*中,这就是您首先需要它们的原因。

    我尽量少地就如何大幅提高此工具的客户价值提出建议。 竞争对手的工具比他们的工具领先...。

    Markus

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

    我不理解这里的问题。 我只需要为该引脚名称和位编号定义 GPIO_base_ADDR。

    因此、假设我在工具中将引脚命名为"REL_OUT_N"、假设它位于端口 PN3上、假设工具需要在头文件中生成:

    #define REL_OUT_N_GPIO_base (GPIO_PORTN_BASE)
    
    #define REL_OUT_N_BIT (GPIO_PIN_3) 

    因此我可以像这样访问它

    GPIOPinWrite (RELAY_OUTP_N_PGPIO_BASE、RELAY_OUTP_N_BIT、0); 

    输出设为低电平。

    这基本上就是我所要求的一切。 不可能真的这么难、或者?

    Markus

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

    定义诸如"#define REL_OUT_N_BIT (GPIO_PIN_3)"之类的内容并不困难。 由于没有字段可供选择、因此基址将变得更加困难。 我们始终可以将_GPIO_base 后缀添加到名称字段。

    更棘手的问题是、当用户以相同的名称输入1个以上的 GPIO 时、可能会跨越端口基址。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Amit Ashara"]由于没有字段,因此基址将变得更加困难。

    Amit、我读过这几次了、但没有真正得到它... 我认为 Markus 的建议是"仅基于文本"的,让 pinmux 创建他建议的输出行似乎没有问题:

    #define REL_OUT_N_GPIO_base (GPIO_PORTN_BASE) 

    一段时间后、这里的每个开发人员都可能为其电路板引脚分配的 HAL 定义创建了自己的"方便方法"。 我确实对 PINMUX 进行了一次防护/使用、但最终放弃了、并返回进行复制/粘贴/编辑、因为该工具不完整。 我的第二个观点是、完整的"确定的"PINMUX 应该是一种有效的方法、这样引脚映射任务就可以在用户和项目之间更加机械和一致。

    布鲁诺

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

    我们已经向工具团队强调了这一事实。 它需要更新引脚多路复用器工具才能处理这种情况。 同时、使用一个名称选择多个端口的复杂性也很高。 我们可以提供索引、但同样、不能保证人们会喜欢相同的索引。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我仍然不知道您所指的"多个同名定义"是什么。 只需检查用户输入的别名的唯一性即可。 问题已解决。

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

    在您粘贴的菜单中、有一个"Number of GPIO Pins (GPIO 引脚数)"条目、默认情况下该条目设置为"1"。 这可以更改为2个或更多、在这种情况下、用户也可以选择不同的端口。 这就是我们在制定解决方案时要解决的问题。 原因是、当我们生成基址定义时、一些用户希望有多个选项、一些用户希望有索引、而另一些用户则认为该工具不适用于他们的用例。 没有一种尺寸适合所有器件。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    老实说、我不知道为什么有人需要为多个引脚分配相同的名称。 这毫无意义。 即使您考虑地址总线、每条总线线路也会有一个诸如"ADDR_0"、"ADDR_1等散射名称。 我真的认为这种多重选择是多余的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Markus、您好!

    当制作一个总线时、也许没有必要将"逻辑"总线映射到同一端口基座。 例如、总线可能有4个用作地址的端口 A 引脚、2个用作控制的端口 B 引脚。 虽然建议将它们用作单独的定义名称、但有些人希望具有相同的定义和索引以覆盖相同的定义。 接下来是索引应该如何工作的问题、因为有些人希望使用 my_bus_port_0_ADDR、有些人希望看到 my_bus_port_ADDR_0。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我明白了。 我仍然认为,如果能按建议进一步生成名称,或许可以检查唯一的名称,那将是一个好的开端。 这非常易于实施、对于我想说的90%的用户来说完全足够了。 如有必要、将其声明为试验性。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Markus

    我同意。 到现在为止、我们可以提供一个单引脚选项、该选项允许将分配的名称前缀为_PIN 和_port、以便生成定义。 同样、将生成的快照为.r.t

    #define SHT_DATA_PORT GPIO_Porth_BASE
    #define SHT_DATA_PIN GPIO_PIN_1

    当使用单个引脚时、类似的东西是否会起作用? 在不更换工具的情况下、这可能易于实施。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这对我来说是完美的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Markus

    您可以尝试以下补丁文件吗?

    替换安装 PinMux V4的目录中附加的文件。 在我的计算机上、它安装在 D:\驱动器下

    D:\ti\pinmux_v4\pinmux\deviceData\TM4C129x\temples\driverlib

    请将文件重命名为 pinout.c.xdt 和 pinout.h.xdt (请注意、这不是正式版本或最终解决方案)

    e2e.ti.com/.../pinout.c.xdte2e.ti.com/.../pinout.h.xdt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    太搞笑了! 这就是我需要的一切! 非常感谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Markus、您好!

    请注意、我已经测试了代码的生成、但没有测试编译或测试行为。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    对我来说、它会编译我的项目。 我现在无法测试行为是否发生了变化、但如果我注意到问题、我会告诉您。

    如果您读取以下内容、则初始化代码的可读性已提高了500%:

    //
    //为 PL7配置 GPIO 引脚多路复用
    器//为 GPIO_PL7配置 GPIO 引脚多路复用器
    //
    map_GPIOPinTypeGPIOOutput (LCD_D15_port、LCD_D15_PIN);
    map_GPIOPinWrite (LCD_D15_port、LCD_D15_PIN、0x0);
    //
    //为 PK4配置 GPIO 引脚多路复用
    器//为 GPIO_PK4
    //
    MAP_GPIOPinTypeGPIOOutput (LCD_CS_N_PORT、LCD_CS_N_PIN);
    MAP_GPIOPinWrite (LCD_CS_N_PORT、LCD_CS_N_PIN、LCD_CS_N_PIN);
    //
    //为 PK5配置 GPIO 引脚多路复用
    器//为 GPIO_PK5
    //
    map_GPIOPinTypeGPIOOutput (LCD_Rs_port、LCD_Rs_PIN);
    map_GPIOPinWrite (LCD_Rs_port、LCD_Rs_PIN、LCD_Rs_PIN);
    //
    //为 PK7配置 GPIO 引脚多路复用
    器//为 GPIO_PK7
    //
    MAP_GPIOPinTypeGPIOOutput (LCD_WR_N_PORT、LCD_WR_N_PIN);
    MAP_GPIOPinWrite (LCD_WR_N_PORT、LCD_WR_N_PIN、LCD_WR_N_PIN);