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.

[参考译文] TMS320F2800132:配置 CMPSS_LITE 在 PinMux_init ()中发出失败断言

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1289918/tms320f2800132-configuring-cmpss_lite-gives-failing-assertion-in-pinmux_init

器件型号:TMS320F2800132
主题中讨论的其他器件:SysConfigC2000WARE

我正在尝试设置微控制器上的 CMPSS_LITE 模块。 我用 SysConfig 配置引脚和设置——我不想做任何特别的事情,比如让比较器输出触发某些 PWM 信号或任何东西——我只是想能够读取比较器的状态位。 然而,当我运行代码时,由于 driverlib 的 GPIO 模块的 GPIO_setAnalogMode()函数中的一个断言,它在启动时失败。 在我的器件上、我要在 CMPSS_LITE 模块3中配置高电平比较器、以从微控制器的引脚7 (A15/C7/C4/A14)获取正输入、从引脚9 (A5/C2)获取负输入。 但是、它们也分别称为 AIO 引脚233和244。  

在 SysConfig 生成的初始化代码中,函数 PinMux_init ()中有以下行:

//   用于 A15/C7、 C4/A14的模拟引脚多路复用器
GPIO_setPinConfig (GPIO_233_GPIO233);
// AIO ->   已选择模拟模式
GPIO_setAnalogMode (233、GPIO_ANALOG_ENABLED );
但是,在函数 GPIO_setAnalogMode ()中,存在以下断言:
断言(((引脚>= 224U)&&(引脚<= 230U)&&(引脚!= 229U)&&(引脚!= 225U))||
(引脚== 242U)||(引脚== 12U)||(引脚== 13U)||(引脚== 20U)||
(引脚== 21U)||(引脚== 28U));
编号233和244的管脚均无法通过此有效状态、并导致代码终止。
我还下载了示例代码 cmpss_lite_ex1_asynch、并尝试在微控制器上运行它。 我在示例代码中更改的唯一内容是目标配置文件、这样我就可以将程序加载到我现有的微控制器上。 示例代码使用编号为238的引脚、此引脚在相同断言下也会发生故障。
我确信此断言是出于某种原因、它会阻止某人尝试设置非模拟引脚的模拟模式。 但是、根据我的器件、断言的行为似乎不正确。 由于 TI 提供的给定示例也不起作用、因此我倾向于认为问题与我的配置不符。 F2800132的 driverlib 中的此断言是否存在错误? 如果可以、TI 工程师能否向我发送该断言对于我的器件应是什么?
提前感谢您的答复!
如果您需要我提供更多信息、请告诉我!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ben:

    我测试了 示例 cmpss_lite_ex1_asynch、它可以正常工作。

    在这里、您可以看到所有这些引脚都被配置为模拟引脚:

    请使用 C2000ware 和 SysConfig 的最新版本。

    此致、

    哈迪

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

    Hadi、您好!

    我相信我拥有 C2000ware 和 SysConfig 的所有最新版本、因为我在尝试解决此问题时已卸载并重新安装该软件。 您是否在 F2800132上测试过它、我在这是一个微控制器上测试过它?

    导入示例时、我在 Resource Explorer 中转到标有 F280013x 的文件夹、然后点击 cmpss_lite_ex1_asynch、然后点击右上角的红色"Import"按钮。 然后出现一个弹出窗口、要求我选择所使用的器件、然后我单击 F2800132。 奇怪的是、导入项目中的配置文件默认为 F2800137器件、而不是我选择的 F2800132。 我想知道这是否是我问题的根源?

    谢谢!

    ~本

    编辑:我刚刚检查了我的 C2000Ware 版本--它的版本是5.00.00.00。 我不确定在哪里可以找到 SysConfig 版本、但我会继续查找。

    以下是 cmpss_lite_ex1_asynch/device/driverlib/gpio.c 中的 GPIO_setAnalogMode 函数:  

    void
    GPIO_setAnalogMode(uint32_t pin, GPIO_AnalogMode mode)
    {
        volatile uint32_t *gpioBaseAddr;
        uint32_t pinMask;
    
        //
        // Check the arguments.
        //
        ASSERT(((pin >= 224U) && (pin <= 230U) && (pin != 229U) && (pin != 225U)) ||
               (pin == 242U) || (pin == 12U) || (pin == 13U) || (pin == 20U) ||
               (pin == 21U)  || (pin == 28U));
    
        pinMask = (uint32_t)1U << (pin % 32U);
        gpioBaseAddr = (uint32_t *)GPIOCTRL_BASE +
                       ((pin / 32U) * GPIO_CTRL_REGS_STEP);
    
        EALLOW;
    
        //
        // Set the analog mode selection.
        //
        if(mode == GPIO_ANALOG_ENABLED)
        {
            //
            // Enable analog mode
            //
            gpioBaseAddr[GPIO_GPxAMSEL_INDEX] |= pinMask;
            if((pin == 12U)   || (pin == 13U)  || (pin == 20U)  || (pin == 21U)  ||
               (pin == 28U)   || (pin == 224U) || (pin == 226U) || (pin == 227U) ||
               (pin == 228U)  || (pin == 230U) || (pin == 242U))
            {
                //
                // Set AGPIOCTL
                //
                HWREG(ANALOGSUBSYS_BASE + ASYSCTL_O_AGPIOCTRLA +
                       ((pin / 32U) * 2U)) |= (pinMask);
            }
        }
        else
        {
            //
            // Disable analog mode
            //
            gpioBaseAddr[GPIO_GPxAMSEL_INDEX] &= ~pinMask;
            if((pin == 12U)   || (pin == 13U)  || (pin == 20U)  || (pin == 21U)  ||
               (pin == 28U)   || (pin == 224U) || (pin == 226U) || (pin == 227U) ||
               (pin == 228U)  || (pin == 230U) || (pin == 242U))
            {
                //
                // Clear AGPIOCTL
                //
                HWREG(ANALOGSUBSYS_BASE + ASYSCTL_O_AGPIOCTRLA +
                       ((pin / 32U) * 2U)) &= ~(pinMask);
            }
        }
    
        EDIS;
    }

    以下是随示例提供的 SysConfig 文件的屏幕截图:

    F2800132附带的 SysConfig 文件似乎实际上不正确、器件显示的是64引脚 F280013x、而不是我拥有的48引脚。

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

    我尝试通过点击前面屏幕截图中看到的"Switch"按钮并选择48引脚封装来更改软件包、但该工程现在无法生成、并显示以下错误:

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

    在这个屏幕截图中、您可以看到、当我在 F2800132控制器下导入项目时、它会为我提供一个包含 F2800137微控制器的目标配置文件的项目。 这是预期结果吗?

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

    Ben、

    如前所述、driverlib 函数缺少一些引脚、例如233和244。 因此、我们需要将它们添加到 GPIO.c 文件中。

    若要修改  GPIO.c 文件、您需要:

    1) 1)将 C2000ware 目录(C2000Ware_5_00_00_00\driverlib\f280013x\driverlib) 中的 driverlib 工程导入 CCS。

    2) 2)现在、在 CCS 中、打开 GPIO.c 文件并 按如下方式编辑函数 GPIO_setAnalogMode ():

    3) 3)在列表中添加引脚233和244。

    GPIO_setAnalogMode(uint32_t pin, GPIO_AnalogMode mode)
    {
        volatile uint32_t *gpioBaseAddr;
        uint32_t pinMask;
    
        //
        // Check the arguments.
        //
        ASSERT(((pin >= 224U) && (pin <= 230U) && (pin != 229U) && (pin != 225U)) ||
               (pin == 242U) || (pin == 12U) || (pin == 13U) || (pin == 20U) ||
               (pin != 233U) || (pin != 244U) || (pin == 21U)  || (pin == 28U));
    
        pinMask = (uint32_t)1U << (pin % 32U);
        gpioBaseAddr = (uint32_t *)GPIOCTRL_BASE +
                       ((pin / 32U) * GPIO_CTRL_REGS_STEP);
    
        EALLOW;
    
        //
        // Set the analog mode selection.
        //
        if(mode == GPIO_ANALOG_ENABLED)
        {
            //
            // Enable analog mode
            //
            gpioBaseAddr[GPIO_GPxAMSEL_INDEX] |= pinMask;
            if((pin == 12U)   || (pin == 13U)  || (pin == 20U)  || (pin == 21U)  ||
               (pin == 28U)   || (pin == 224U) || (pin == 226U) || (pin == 227U) ||
               (pin == 228U)  || (pin == 230U) || (pin == 242U))
            {
                //
                // Set AGPIOCTL
                //
                HWREG(ANALOGSUBSYS_BASE + ASYSCTL_O_AGPIOCTRLA +
                       ((pin / 32U) * 2U)) |= (pinMask);
            }
        }
        else
        {
            //
            // Disable analog mode
            //
            gpioBaseAddr[GPIO_GPxAMSEL_INDEX] &= ~pinMask;
            if((pin == 12U)   || (pin == 13U)  || (pin == 20U)  || (pin == 21U)  ||
               (pin == 28U)   || (pin == 224U) || (pin == 226U) || (pin == 227U) ||
               (pin == 228U)  || (pin == 230U) || (pin == 242U))
            {
                //
                // Clear AGPIOCTL
                //
                HWREG(ANALOGSUBSYS_BASE + ASYSCTL_O_AGPIOCTRLA +
                       ((pin / 32U) * 2U)) &= ~(pinMask);
            }
        }
    
        EDIS;
    }

    4) 4)保存文件。 右键单击 driverlib 项目并转到"Build Configuration"并选择"Build All"。 现在、driverlib 已更新。

    5) 5)重新编译工程"cmpss_lite_ex1_asynch"。

    就 SysConfig 而言、当您更改封装时、会由于 pinmux 的差异而发生此错误:

    要消除错误、  您需要:

    1) 1)转到 Analog PinMux  

    2) 2)在"用例"中、选择"自定义"

     3)在"使用的引脚"中、选择"A12/C1"和"C8/A9/GPIO227"。

    此致、

    哈迪

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

    很抱歉这么晚才回复、但这个问题解决了我的问题! 非常感谢您的帮助。