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.

[参考译文] TMS320F280025:将2行代码从 DriverLib 模式转换为位字段/寄存器级模式

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1493886/tms320f280025-convert-2-lines-of-code-from-driverlib-mode-to-bit-field-register-level-mode

器件型号:TMS320F280025
主题:C2000WARE 中讨论的其他器件

工具/软件:

您好:

我在 DriverLib 模式下编写了2行代码、如下所示:

    GPIO_setPinConfig (GPIO_4_GPIO4);
    GPIO_writePin (4、0);

如果它们在  位字段/寄存器级模式中被重新写入、那么它们会是什么?

谢谢!

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

    以下行在 DriverLib 模式下写入:

       GPIO_setPinConfig (GPIO_4_GPIO4);
       GPIO_setPinConfig (GPIO_5_GPIO5);
       GPIO_setPinConfig (GPIO_6_GPIO6);
       GPIO_setPinConfig (GPIO_7_GPIO7);
       GPIO_writePin (4、0);
       GPIO_writePin (5、0);
       GPIO_writePin (6、0);
       GPIO_writePin (7、0);

    我  使用 HWREGH 宏将上述行转换为寄存器模式、但在上述行中的工作方式不同:

       EALLOW;
       //将 GPIO4–GPIO7配置为 GPIO (清除 GPAMUX1中的相应位)
       HWREGH (0x00007C42)&=~μ H (0xFF << 8);//清除位15-8 (GPIO4–GPIO7)

       //将 GPIO4–GPIO7设置为输出(设置 GPADIR 中的位4–7)
       HWREGH (0x00007C4A)|=(0xF << 4);//设置位4–7
       EDIS;

       //将 GPIO4–GPIO7输出设置为低电平(清除 GPACLEAR 中的位4–7)
       HWREGH (0x00007C2A)=(0xF << 4);

    请建议等效 位字段/寄存器级模式代码是什么。   谢谢!

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

    是否有应用手册或文章提供将 DriverLib 代码转换为位域代码的分步指导?

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

    您好:

    以下是我建议如何在特定 GPIO 上进行写入:

    //
    //在 GPIO6上启用 GPIO 输出、将其设置为高电平
    //
    GpioCtrlRegs.GPAPUD.bit.GPIO6 = 0;//启用 GPIO6上的上拉电阻
    GpioDataRegs.GPASSET.bit.GPIO6 = 1;//负载输出锁存
    GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0;// GPIO6 = GPIO6
    GpioCtrlRegs.GPADIR.bit.GPIO6 = 1;// GPIO6 =输出

    您可以参阅 C2000ware for C2000Warexx\device_support\f28002x\examples\GPIO 以查找一些示例。

    此致、

    Masoud

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

    谢谢。 请参阅以下内容:

    1. 是否有应用手册或文章提供将 DriverLib 代码转换为位域代码的分步指导?
    2. 如何将以下行转换为位字段模式、以便 GPIO4、5、6和7同时设置为0?

       GPIO_setPinConfig (GPIO_4_GPIO4);
       GPIO_setPinConfig (GPIO_5_GPIO5);
       GPIO_setPinConfig (GPIO_6_GPIO6);
       GPIO_setPinConfig (GPIO_7_GPIO7);
       GPIO_writePin (4、0);
       GPIO_writePin (5、0);
       GPIO_writePin (6、0);
       GPIO_writePin (7、0);

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

    您好 Quentin、

    要回答您的第一个问题、很遗憾、我们没有任何涵盖 DriverLib 到位域代码转换的应用手册或文章。 但是、您可以在同一文件中包含并使用 DriverLib 和 BIT 字段代码以充分利用这两个 API。 有关设置此方法的详细信息、请参阅位于 C:/ti/c2000/C2000Ware_的文件中的第2.3节 /device_support/f28002x/docs/F28002x_FRM_EX_UG.pdf

    为了将 DriverLib 代码转换为您正在请求的位域代码、我建议使用该GpioCtrlRegs.GPAxxx.all 方法。 请参阅以下代码:

    // Enable pullup on GPIO 4-7
    GpioCtrlRegs.GPAPUD.all &= ~((1 << 4) | (1 << 5) | (1 << 6) | (1 << 7));
    
    // Clear Data Regs for GPIO 4-7
    GpioDataRegs.GPACLEAR.all |= (1 << 4) | (1 << 5) | (1 << 6) | (1 << 7);
    
    // Set up mux for GPIO 4-7 and set GPIO 4-7 to output
    GpioCtrlRegs.GPAMUX1.all |= (1 << 4) | (1 << 5) | (1 << 6) | (1 << 7);
    GpioCtrlRegs.GPADIR.all |= (1 << 4) | (1 << 5) | (1 << 6) | (1 << 7);

    此致、

    Ryan

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

    您好、Ryan、

    非常感谢您推荐的代码! 我将它们添加到我的项目中、但编译失败  、并显示错误"Error #20:identifier "GpioCtrlRegs" is undefined"

    我是否应该包含一些库文件来解决此问题?  什么库文件及其在哪里?

    谢谢、

    Quentin

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

    我已经按照   位于 C:/ti/c2000/C2000Ware_文件的第2.3节中的说明进行了操作 /device_support/f28002x/docs/F28002x_FRM_EX_UG.pdf、如下所示:

    =====================

    添加 Bitfield 支持
    1.将以下 include 目录路径添加到项目中:
    device_supportnf28002xnheadersninclude
    2.在工程主源文件中包含以下头文件:
    device_supportnf28002xnheadersnincludenf28002x_device.h
    3.将 f28002x_globalvariabledefs.c 文件添加或链接到工程。 文件位置:
    device_supportnf28002xnheadersnsource
    4.将 f28002x_headers_nonbios.cmd 文件添加或链接到工程。 文件位置:
    device_supportnf28002xnheadersncmd
    ======================

    但它在编译时仍然失败、并显示以下错误:

     错误#20:标识符"GpioCtrlRegs"未定义

    错误#20:标识符"GpioDataRegs"未定义

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

    尊敬的 Quentin:

    只是为了进行确认、在代码顶部、main.c 文件中应该有一行代码、读取结果为

    #include "f28002x_device.h"

    这将需要包含"C:/ti/c2000/C2000Ware_" /device_support/f28002x/f28002x"/headers/include、在工程的编译器包含选项(在工程属性中设置)。

    此外、请确认"f28002x_globalvariablesdefs.c"位于工程文件夹中并包含在构建中。  我要求进行这些检查、因为这两种方法目前是我重新创建编译错误的唯一方法。

    此致、

    Ryan

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

    您好、Ryan、

    感谢您的更新。 我按照您的说明进行了   操作、并确保在我的.c 主文件中添加了"#include "f28002x_device.h"、在我的工程文件夹中添加了"f28002x_globalvariablesdefs.c"。 请查看下面的 CCS 屏幕截图:

    但编译仍然失败、并出现以下错误:

    ===========

    >>编译失败
    subdir_rules.mk:9:目标'epwm.obj '的配方失败
    "../epwm.c"、第2146行:警告#190-D:枚举类型与另一种类型混合
    "../epwm.c"、第2177行:警告#190-D:枚举类型与另一种类型混合
    "../epwm.c"、第2199行:警告#190-D:枚举类型与另一种类型混合
    "../epwm.c"、第2224行:警告#190-D:枚举类型与另一种类型混合
    "../epwm.c"、第2547行:错误#20:标识符"GpioCtrlRegs"未定义
    "../epwm.c"、第2550行:错误#20:标识符"GpioDataRegs"未定义
    在编译"../epwm.c"时检测到2个错误。

    >>编译失败
    subdir_rules.mk:9:目标'QT2_AC_SIDE.obj'的配方失败
    "C:/ti/c2000/C2000Ware_3_01_00_00/device_support/f28002x/headers/include/f28002x_lin.h "、第236行:错误#41:需要一个标识符
    "C:/ti/c2000/C2000Ware_3_01_00_00/device_support/f28002x/headers/include/f28002x_lin.h、第236行:错误#80:需要一个类型说明符
    "C:/ti/c2000/C2000Ware_3_01_00_00/device_support/f28002x/headers/include/f28002x_lin.h "、第236行:错误#170:此处不允许函数类型
    "C:/ti/c2000/C2000Ware_3_01_00_00/device_support/f28002x/headers/include/f28002x_lin.h "、第236行:警告#109-D:长度为1的有符号位字段
    在编译"../QT2_AC_SIDE.c"时检测到3个错误。

    ==========

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

    Quentin、

    我认为 f28002x_device.h 文件不应该位于您的工程文件夹中、而应该从 C2000WARE/device_support 文件夹路径中获取。 尝试仅从工程文件夹中删除"f28002x_device.h"文件、并查看这是否对您的编译错误有帮助。

    此致、

    Ryan

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

    您好、Ryan、

    按照您的说明、 从工程文件夹中删除了 f28002x_device.h。 请查看下面的屏幕截图:

    但仍然存在如下所示的相同编译错误:

    ===========================

    >>编译失败
    subdir_rules.mk:9:目标'epwm.obj '的配方失败
    "../epwm.c"、第2146行:警告#190-D:枚举类型与另一种类型混合
    "../epwm.c"、第2177行:警告#190-D:枚举类型与另一种类型混合
    "../epwm.c"、第2199行:警告#190-D:枚举类型与另一种类型混合
    "../epwm.c"、第2224行:警告#190-D:枚举类型与另一种类型混合
    "../epwm.c"、第2547行:错误#20:标识符"GpioCtrlRegs"未定义
    "../epwm.c"、第2550行:错误#20:标识符"GpioDataRegs"未定义
    在编译"../epwm.c"时检测到2个错误。

    >>编译失败
    subdir_rules.mk:9:目标'QT2_AC_SIDE.obj'的配方失败
    "C:\ti\c2000\C2000Ware_3_01_00_00\device_support\f28002x\headers\include\f28002x_lin.h"、第236行:错误#41:需要一个标识符
    "C:\ti\c2000\C2000Ware_3_01_00_00\device_support\f28002x\headers\include\f28002x_lin.h"、第236行:错误#80:需要一个类型说明符
    "C:\ti\c2000\C2000Ware_3_01_00_00\device_support\f28002x\headers\include\f28002x_lin.h"、第236行:错误#170:此处不允许使用函数类型
    "C:\ti\c2000\C2000Ware_3_01_00_00\device_support\f28002x\headers\include\f28002x_lin.h"、第236行:警告#109-D:长度为1的有符号位字段
    在编译"../QT2_AC_SIDE.c"时检测到3个错误。

    ===========================

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

    尊敬的 Quentin:

    您是否尝试过将代码移至新的位域工程? 我想象一下、您的项目设置中有一个小设置未正确设置、将您的现有代码移植到已知良好的位字段项目可能会更有用。

    尝试导入一个新的位字段工程、如 GPIO 或 led 示例(从 "C:/ti/c2000/C2000Ware_ /device_support/f28002x/examples/")复制到您的 CCS 工作区、并将现有代码从 QT2_AC_SIDE 工程复制到这个新工程中。 确保  从编译中排除或完全删除包含 main 函数的原始示例工程源文件(例如 gpio_ex1_setup.c 或 led_ex1_blinky.c)、以防止函数名称发生冲突。

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

    您好、Ryan、

    我  从 C:\ti\c2000\C2000Ware_3_01_00_00\device_support\f28002x\examples\gpio 导入了一个示例工程 gpio_ex1_setup、但由于下面的编译错误、失败:

    >>编译失败
    subdir_rules.mk:16:目标"gpio_ex1_setup.obj"的配置失败
    "../gpio_ex1_setup.c"、第55行:致命错误#1965:无法打开源文件"f28x_project.h"
    1在编译"../gpio_ex1_setup.c"时检测到灾难性错误。
    编译已终止。
    gmake:***[gpio_ex1_setup.obj] Error 1

    如何解决此问题? 还是有更好的示例工程我应该导入?

    谢谢、

    Quentin

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

    Quentin、

    我刚从 C2000Ware 3.01.00.00中从头开始、遇到了相同的问题。 所有 f28x_project.h 执行的操作包括:

    #include "f28002x_device.h"         // f28002x Headerfile Include File
    #include "f28002x_examples.h"       // f28002x Examples Include File

    这似乎是由 f28002x/common/include 文件夹周围的更大基础问题未正确包含所导致的。 请转到工程属性并选择"CCS Build"。 在"环境"选项卡下、使用添加... 配置。 名称应为 COM_TI_C2000WARE_INSTALL_DIR、值为 ${COM_TI_C2000WARE_software_package_install_DIR}(如果复制粘贴失败、您可以使用 Variables 按钮进行选择)。 选中"Add to all configurations"以应用于所有构建配置。 按"OK"之前、您的输入/窗口应该如下图所示。

    这可能是由使用 C2000Ware 版本3.01.00.00 (2020年发布的较旧版本和第一个3.x 版本)引起的。 作为参考、我没有注意到版本5.04.00.00 (最新版本)的相同问题、这是我使用最初提供的位域代码测试编译时使用的问题。

    可以通过更新到 C2000Ware 5.04来修复此包含问题。  尽管这会导致当前代码的兼容性问题、但更新到3.04可以解决问题、而不会导致兼容性问题。

    此致、

    Ryan

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

    您好、Ryan、

    非常感谢您的指示!  我向示例工程 gpioCtrlRegs code 添加了"gpioCtrlRegs code"  、可以正常编译。 但是、这是在与"QT2_AC_SIDE"工程不同的 CCS 会话中完成的、因为 "QT2_AC_SIDE"工程的 CCS 与 GIT 绑定、我需要非常小心、以免被破坏。

    因此、 "QT2_AC_SIDE"工程的 CCS 中似乎存在一些设置问题。 如何找到两个 CCS 之间的 CCS 设置差异?

    Quentin

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

    您好、Ryan、

    我今天上午更新了这个案例、但没有收到电子邮件通知。 再次更新、以防您错过我之前的更新。

    谢谢、

    Quentin

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

    尊敬的 Quentin:

    根据我的理解、如果不使用两个 CCS 实例比较窗口中的设置、人类无法用一种非常容易理解的方法来直接比较设置。 您可以尝试与.settings 文件夹中的文件进行基于文本的比较、但这不是一种人类可读的方法。

    要尝试应用到目前为止我们发现的内容,假设我们在位域示例中发现的问题在 Git 工程中是相同的,那么请尝试应用相同的修复。 正如您提到的、您担心现有工程设置的问题、可以将鼠标悬停在工程的 Properties>CCS Build>C2000 Compiler>Include Options 中每个 Include dir 旁边的三个点上、检查 include 设置中是否发生了相同的问题。

    如果 C2000WARE_COMMON_include 在弹出窗口("C:/ti/c2000/C2000Ware_3_01_00_00/...")中没有列出完整的目录、我们在位字段示例中之前使用的修复 可能会解决该问题。 请参见下面的图片作为修复后的错误目录列表(第一个图像)和良好的目录列表(第二个图像)的示例:

    此致、

    Ryan

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

    您好、Ryan、

    非常感谢您如此清晰和详细的阐述! 请参阅 下面的"包含选项"和"选择变量"、我只有 COM_TI_C2000WARE_software_package_install_DIR 指向 C:\ti\c2000\C2000Ware_4_01_00_00、而不是 C:\ti\c2000\C2000Ware_3_01_00_00。  您的变量为  COM_TI_C2000WARE_software_package_include_path、它与我的变量不同。

    1. 如何添加变量 COM_TI_C2000WARE_software_package_include_path?
    2. 你会给我什么其他建议来修复我的 "包括选项"和"选择变量"  

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

    您好、Ryan、再一次、我在进行之前的更新后没有收到电子邮件通知、恐怕您也没有收到电子邮件通知。

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

    尊敬的 Quentin:

    无需担心我会收到电子邮件通知。 我还在让他们站在我身边。

    若要直接回答您的问题:

    1. 您可以通过工程的 Properties > CCS Build 部分中的 Variables 选项卡添加变量。 请注意、我不认为您需要包含 COM_TI_C2000WARE_software_package_include_path、除非有引用它的 include 目录。  
    2. 我的主要建议如下:
      1. 我建议将 C2000WARE_DLIB_ROOT 和/或 COM_TI_C2000WARE_software_packw_install_DIR 更改为 C:\ti\c2000\C2000Ware_3_01_00_00、因为 底部第二个包含方向(指向4.01标头/包含)与顶部第二个方向(指向3.01标头/包含)之间的差异也可能是导致您出现其他问题的原因。
      2. 如果这不起作用、请尝试在"C:/ti/c2000/C2000Ware_3_01_00_00/device_support/f28002x/common/include "
        #include "f28x_project.h"
        中添加一个 include 目录、尤其是在代码中时。 您可以在 Properties>CCSBuild>C2000 Compiler>Include Options 的 Include Options 页面中直接添加带有绿色加号的小页面的 Include dir

    此致、

    Ryan

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

    您好、Ryan、

    非常感谢您的建议! 我按照这两个指示进行了以下操作:

    1. 将 COM_TI_C2000WARE_software_package_install_DIR 更改为 C:\ti\c2000\C2000Ware_3_01_00_00
    2. 将 include 目录添加到"C:/ti/c2000/C2000Ware_3_01_00_00/device_support/f28002x/common/include

    请查看以下屏幕截图:

    但仍然存在如下编译错误:

    >>编译失败
    subdir_rules.mk:9:目标'isr.obj'的配方失败
    "C:/Users/Xiaoquan/Documents/JX_CCS_git/JX_DS3_280025gitRepository/QT2_AC_side/device/driverlib.h "、第63行:致命错误#1965:无法打开源文件"ERAD .h"
    1在编译"../isr.c"时检测到灾难性错误。
    编译已终止。

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

    尊敬的 Quentin:

    如果其他编译问题已消除、我们有望最后完全解决这个问题!

    似乎只有在版本 C2000Ware v4.x 之后、erad.h 才会包含在 C2000Ware 中 因此、要解决该问题、请转换所有对"C:/ti/c2000/C2000Ware_3_01_00_00/..."的引用 并将 dirs 添加到"C:/ti/c2000/C2000Ware_4_01_00_00/..."。

    根据我能说的、这需要将 COM_TI_C2000WARE_software_package_install_DIR 更改回原始地址("C:/ti/c2000/C2000Ware_4_01_00_00)、并将新添加的"C:/ti/c2000/C2000Ware_3_01_00_00/device_support/f28002x/common/include "更改为"C:/ti/c2000/C2000Ware_4_01_00_00/device_support/f28002x/common/include "。

    此致、

    Ryan

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

    您好、Ryan、

    感谢您的建议。 我跟踪了它们、但仍然出现了一些编译错误。  

    请在下面查看我的设置:

    但仍存在如下所示的编译错误:

    =============

    >>编译失败
    subdir_rules.mk:9:目标'f28002x_globalvariabledefs.obj'的配方失败
    "../f28002x_globalvariabledefs.c"、第256行:错误#237:变量"DcsmCommon2Regs"是以从未完成的类型声明的
    1在编译"../f28002x_globalvariabledefs.c"时检测到错误。
    gmake:***[f28002x_globalvariabledefs.obj]错误1

    >>编译失败
    subdir_rules.mk:9:目标'epwm.obj '的配方失败
    "../epwm.c"、第2146行:警告#190-D:枚举类型与另一种类型混合
    "../epwm.c"、第2177行:警告#190-D:枚举类型与另一种类型混合
    "../epwm.c"、第2199行:警告#190-D:枚举类型与另一种类型混合
    "../epwm.c"、第2224行:警告#190-D:枚举类型与另一种类型混合
    "../epwm.c"、第2547行:错误#20:标识符"GpioCtrlRegs"未定义
    "../epwm.c"、第2550行:错误#20:标识符"GpioDataRegs"未定义
    在编译"../epwm.c"时检测到2个错误。

    >>编译失败
    subdir_rules.mk:9:目标'QT2_AC_SIDE.obj'的配方失败
    "C:\ti\c2000\C2000Ware_4_01_00_00\device_support\f28002x\headers\include\f28002x_lin.h"、第236行:错误#41:需要一个标识符
    "C:\ti\c2000\C2000Ware_4_01_00_00\device_support\f28002x\headers\include\f28002x_lin.h"、第236行:错误#80:需要一个类型说明符
    "C:\ti\c2000\C2000Ware_4_01_00_00\device_support\f28002x\headers\include\f28002x_lin.h"、第236行:错误#170:此处不允许使用函数类型
    "C:\ti\c2000\C2000Ware_4_01_00_00\device_support\f28002x\headers\include\f28002x_lin.h"、第236行:警告#109-D:长度为1的有符号位字段
    在编译"../QT2_AC_SIDE.c"时检测到3个错误。
    gmake:***[QT2_AC_SIDE.OBJ]错误1
    gmake:由于错误、目标"全部"未重制。

    ****构建完成****

    =============

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

    您好 Quentin、

    鉴于尝试组合位域和 DriverLib 时仍然存在问题、我认为最好恢复到我们知道的之前版本。 我在 HWREGH 宏早期回顾了您的代码、似乎有一些小错误导致代码无法正常工作、并引导我们一开始仅使用 DriverLib。

    我相信您提到该项目保存在版本控制软件下。 如果是、请恢复到已知最早的良好编译版本、并使用以下代码替换您之前拥有的 HWREGH 代码:

    EALLOW;
    // Configure GPIO4–GPIO7 as GPIOs (Clear corresponding bits in GPAMUX1)
    HWREGH(GPIOCTRL_BASE + 0x6) &= ~(0xFF << 8); // Clear bits 15-8 (GPIO4–GPIO7)
    
    // Set GPIO4–GPIO7 as outputs (Set bits 4–7 in GPADIR)
    HWREGH(GPIOCTRL_BASE + 0xA) |= (0xF << 4); // Set bits 4–7
    EDIS;
    
    // Set GPIO4–GPIO7 output to LOW (Clear bits 4–7 in GPACLEAR)
    HWREGH(GPIODATA_BASE + 0x4) |= (0xF << 4);

    现在、仅使用 DriverLib 时应该可以正常工作、并避免了我们在尝试包含位字段时遇到的冲突问题。

    此致、

    Ryan

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

    您好、Ryan、

    感谢您的建议! 但是、我有以下两个问题:

    1.我回到已知最早的良好编译版本,使用以下代码:

    EALLOW;
    //将 GPIO4–GPIO7配置为 GPIO (清除 GPAMUX1中的位8–16)
    HWREG (GPIOCTRL_BASE + 0x06)且= 0xFFFF00FF;
    //将 GPIO4–GPIO7配置为输出(设置 GPADIR 中的位4–7)
    HWREG (GPIOCTRL_BASE + 0x0A)|= 0xF0;
    //将 GPIO4–GPIO7输出设置为低电平(将 GPACLEAR 中的位4–7设置)
    HWREG (GPIODATA_BASE + 0x04)|= 0xF0;
    EDIS;


    并将上面的代码替换为下面建议的代码:


    EALLOW;
    //将 GPIO4–GPIO7配置为 GPIO (清除 GPAMUX1中的相应位)
    HWREGH (GPIOCTRL_BASE + 0x6)&=~μ H (0xFF << 8);//清除位15-8 (GPIO4–GPIO7)

    //将 GPIO4–GPIO7设置为输出(设置 GPADIR 中的位4–7)
    HWREGH (GPIOCTRL_BASE + 0xA)|=(0xF << 4);//设置位4–7
    EDIS;

    //将 GPIO4–GPIO7输出设置为低电平(清除 GPACLEAR 中的位4–7)
    HWREGH (GPIODATA_BASE + 0x4)|=(0xF << 4);


    它确实可以正常编译。 然而、这似乎是有问题的。 例如、要将 GPIO4–GPIO7配置为 GPIO (清除 GPAMUX1中的相应位)、我应该执行"HWREG (GPIOCTRL_BASE + 0x06)&= 0xFFFF00FF "(根据图8-7)。 GPAMUX1寄存器:

    但是、您建议的代码"HWREGH (GPIOCTRL_BASE + 0x6)&=~(0xFF << 8)"等效于" HWREGH (GPIOCTRL_BASE + 0x6)&= 0x000000FF "、这似乎不正确。


    2.最重要的是,我的目标是用位域/寄存器级模式代码替换 HWREGH 代码,如您建议的 GpioDataRegs.GPACLEAR.all 等 我该怎么做?

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

    根据我们的测试、以下代码正确并满足了我们的需求:

       EALLOW;

       //将 GPIO4–GPIO7配置为 GPIO (清除 GPAMUX1中的位8–16)

       HWREG (GPIOCTRL_BASE + 0x06)且= 0xFFFF00FF;

       //将 GPIO4–GPIO7配置为输出(设置 GPADIR 中的位4–7)

       HWREG (GPIOCTRL_BASE + 0x0A)|= 0xF0;

       //将 GPIO4–GPIO7输出设置为低电平(将 GPACLEAR 中的位4–7设置)

       HWREG (GPIODATA_BASE + 0x04)|= 0xF0;

    EDIS;

    上述代码等效于以下代码:

    GPIO_setPinConfig (GPIO_4_GPIO4);
    GPIO_setPinConfig (GPIO_5_GPIO5);
    GPIO_setPinConfig (GPIO_6_GPIO6);
    GPIO_setPinConfig (GPIO_7_GPIO7);
    GPIO_writePin (4、0);
    GPIO_writePin (5、0);
    GPIO_writePin (6、0);
    GPIO_writePin (7、0);

    但我们的 目标是将 HWREGH 代码替换为位字段/寄存器级模式代码、如您建议的 GpioDataRegs.GPACLEAR.ALL 等 我们如何做到这一点?

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

    尊敬的 Quentin:

    使用 HWREG 宏会生成与生成的位字段代码相同的汇编代码。

    请问您为什么要严格使用位字段格式、而不是使用 DriverLib 中已包含的 HWREG 宏?

    此致、

    Ryan