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.

[参考译文] LP-MSPM0G3507:MSPM0G3507

Guru**** 2394305 points
Other Parts Discussed in Thread: MSPM0G3507, LP-MSPM0G3507, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1344493/lp-mspm0g3507-mspm0g3507

器件型号:LP-MSPM0G3507
主题中讨论的其他器件:MSPM0G3507SysConfig

大家好!

目前、我正在深入研究 TI 的 MSPM0G3507 MCU、这是一个我将积极参与的即将开始的项目。 为了方便我理解、我将使用 LP-MSPM0G3507评估套件来熟悉 TI 的 ARM MCU 架构和 IDE 平台。 此外、我将介绍示例项目以深入了解外设。

我从 GPIO 切换输出示例开始、成功观察到输出切换。 随后、我学习了计时器研究、并尝试了" TIMG_32BIT_TIMER_MODE_PWM_EDGE_SLEEP"用于测试使用 mspm0_SDK_1_30_00_03中与计时器相关的示例生成的 PWM 信号的示例。

不过、在 CCS Studio 中构建和调试项目时、我遇到一个问题、代码在"SAFETY_FUNC_CFG 寄存器"表中 Default_Handler 当" DL_TimerG_RESET "函数。

经过进一步调查、我发现 建议TI E2E 设计支持中的信息。 我实施了建议的代码来确定默认处理程序事件的触发、只是发现代码实际上输入了" Hardfault_Handler "。

因此我使用了 SysConfig 添加了默认配置文件、更改了当前 TIMG12 (32位) 计时器进入 TIMA1 (16位) 并将32位 PWM 周期值更改为16位周期值。

然后我重新编译和调试了项目。 但这次、代码没有进入 Hardfault_Handler、但我看不到两个 CCP 通道生成的任何信号、 PA10 PA11 可以访问评估套件中的评估板引脚。

我还尝试了另一个 PWM_EDGE 示例,但结果大致相似。

非常感谢您就此事提供的任何见解或帮助。

 

提前感谢您抽出宝贵的时间并提供您的帮助。

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

    您好,

    PA10和 PA11保留为通过 EVM 板上的 XDS-110与 PC 进行 UART 通信端口。 您需要更改 J25和 J26上的跳线位置、或仅使用其他引脚输出 PWM 信号。  

    此致、

    现金豪

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

    大家好、Cash Hao11:

    非常感谢您的回复。 我尝试了使用其他引脚 PB26、PB27、PA17、PA18。 仍然没有 PWM 信号。

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

    您好!

    这是异常的。 您能将您的代码发送到这里、以便我进行测试吗?  

    此致、

    现金豪

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

    大家好、Cash Hao11:

    非常感谢您的迅速响应。

    请查看我使用的项目。

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

    您好!

    您能否在这里直接共享您的代码、而不是通过驱动器? 驱动器可能被公司阻止。

    此致、

    现金豪

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

    当然、Cash Hao11、如果您需要更多信息、请告诉我。 再次感谢您的及时响应和帮助。

    TIMG_32BIT_TIMER_MODE_PWM_EDGE_sleep.c

    #include "ti_msp_dl_config.h"
    /*
    * These are traps for debugging when you find that your code
    * ends up in the default handler for some unknown reason.
    * To keep the compiler from complaining, comment out the ones
    * below if you already have a working handler for that vector.
    *
    */
    void NMI_Handler(void){ __BKPT(0);}
    void HardFault_Handler(void){ __BKPT(0);}
    void SVC_Handler(void){ __BKPT(0);}
    void PendSV_Handler(void){ __BKPT(0);}
    void SysTick_Handler(void){ __BKPT(0);}
    void GROUP0_IRQHandler(void){ __BKPT(0);}
    void GROUP1_IRQHandler(void){ __BKPT(0);}
    void TIMG8_IRQHandler(void){ __BKPT(0);}
    void UART3_IRQHandler(void){ __BKPT(0);}
    void ADC0_IRQHandler(void){ __BKPT(0);}
    void ADC1_IRQHandler(void){ __BKPT(0);}
    void CANFD0_IRQHandler(void){ __BKPT(0);}
    void DAC0_IRQHandler(void){ __BKPT(0);}
    void SPI0_IRQHandler(void){ __BKPT(0);}
    void SPI1_IRQHandler(void){ __BKPT(0);}
    void UART1_IRQHandler(void){ __BKPT(0);}
    void UART2_IRQHandler(void){ __BKPT(0);}
    void UART0_IRQHandler(void){ __BKPT(0);}
    void TIMG0_IRQHandler(void){ __BKPT(0);}
    void TIMG6_IRQHandler(void){ __BKPT(0);}
    void TIMA0_IRQHandler(void){ __BKPT(0);}
    void TIMA1_IRQHandler(void){ __BKPT(0);}
    void TIMG7_IRQHandler(void){ __BKPT(0);}
    void TIMG12_IRQHandler(void){ __BKPT(0);}
    void I2C0_IRQHandler(void){ __BKPT(0);}
    void I2C1_IRQHandler(void){ __BKPT(0);}
    void AES_IRQHandler(void){ __BKPT(0);}
    void RTC_IRQHandler(void){ __BKPT(0);}
    void DMA_IRQHandler(void){ __BKPT(0);}
    
    int main(void)
    {
        SYSCFG_DL_init();
    
        DL_TimerG_startCounter(PWM_0_INST);
    
        while (1) {
            __WFI();
        }
    }

    TI_msp_dl_config.c

    /*
     *  ============ ti_msp_dl_config.c =============
     *  Configured MSPM0 DriverLib module definitions
     *
     *  DO NOT EDIT - This file is generated for the MSPM0G350X
     *  by the SysConfig tool.
     */
    
    #include "ti_msp_dl_config.h"
    
    DL_TimerA_backupConfig gPWM_0Backup;
    
    /*
     *  ======== SYSCFG_DL_init ========
     *  Perform any initialization needed before using any board APIs
     */
    SYSCONFIG_WEAK void SYSCFG_DL_init(void)
    {
        SYSCFG_DL_initPower();
        SYSCFG_DL_GPIO_init();
        /* Module-Specific Initializations*/
        SYSCFG_DL_SYSCTL_init();
        SYSCFG_DL_PWM_0_init();
        /* Ensure backup structures have no valid state */
    	gPWM_0Backup.backupRdy 	= false;
    
    }
    /*
     * User should take care to save and restore register configuration in application.
     * See Retention Configuration section for more details.
     */
    SYSCONFIG_WEAK bool SYSCFG_DL_saveConfiguration(void)
    {
        bool retStatus = true;
    
    	retStatus &= DL_TimerA_saveConfiguration(PWM_0_INST, &gPWM_0Backup);
    
        return retStatus;
    }
    
    
    SYSCONFIG_WEAK bool SYSCFG_DL_restoreConfiguration(void)
    {
        bool retStatus = true;
    
    	retStatus &= DL_TimerA_restoreConfiguration(PWM_0_INST, &gPWM_0Backup, false);
    
        return retStatus;
    }
    
    SYSCONFIG_WEAK void SYSCFG_DL_initPower(void)
    {
        DL_GPIO_reset(GPIOA);
        DL_GPIO_reset(GPIOB);
        DL_TimerA_reset(PWM_0_INST);
    
        DL_GPIO_enablePower(GPIOA);
        DL_GPIO_enablePower(GPIOB);
        DL_TimerA_enablePower(PWM_0_INST);
        delay_cycles(POWER_STARTUP_DELAY);
    }
    
    SYSCONFIG_WEAK void SYSCFG_DL_GPIO_init(void)
    {
    
        DL_GPIO_initPeripheralOutputFunction(GPIO_PWM_0_C0_IOMUX,GPIO_PWM_0_C0_IOMUX_FUNC);
        DL_GPIO_enableOutput(GPIO_PWM_0_C0_PORT, GPIO_PWM_0_C0_PIN);
        DL_GPIO_initPeripheralOutputFunction(GPIO_PWM_0_C1_IOMUX,GPIO_PWM_0_C1_IOMUX_FUNC);
        DL_GPIO_enableOutput(GPIO_PWM_0_C1_PORT, GPIO_PWM_0_C1_PIN);
    
    }
    
    
    
    SYSCONFIG_WEAK void SYSCFG_DL_SYSCTL_init(void)
    {
    
    	//Low Power Mode is configured to be SLEEP0
        DL_SYSCTL_setBORThreshold(DL_SYSCTL_BOR_THRESHOLD_LEVEL_0);
    
        DL_SYSCTL_setSYSOSCFreq(DL_SYSCTL_SYSOSC_FREQ_BASE);
    	/* Set default configuration */
    	DL_SYSCTL_disableHFXT();
    	DL_SYSCTL_disableSYSPLL();
    
    }
    
    
    /*
     * Timer clock configuration to be sourced by  / 1 (32000000 Hz)
     * timerClkFreq = (timerClkSrc / (timerClkDivRatio * (timerClkPrescale + 1)))
     *   32000000 Hz = 32000000 Hz / (1 * (0 + 1))
     */
    static const DL_TimerA_ClockConfig gPWM_0ClockConfig = {
        .clockSel = DL_TIMER_CLOCK_BUSCLK,
        .divideRatio = DL_TIMER_CLOCK_DIVIDE_1,
        .prescale = 0U
    };
    
    static const DL_TimerA_PWMConfig gPWM_0Config = {
        .pwmMode = DL_TIMER_PWM_MODE_EDGE_ALIGN,
        .period = 65535,
        .isTimerWithFourCC = true,
        .startTimer = DL_TIMER_STOP,
    };
    
    SYSCONFIG_WEAK void SYSCFG_DL_PWM_0_init(void) {
    
        DL_TimerA_setClockConfig(
            PWM_0_INST, (DL_TimerA_ClockConfig *) &gPWM_0ClockConfig);
    
        DL_TimerA_initPWMMode(
            PWM_0_INST, (DL_TimerA_PWMConfig *) &gPWM_0Config);
    
        DL_TimerA_setCaptureCompareValue(PWM_0_INST, 16383, DL_TIMER_CC_0_INDEX);
        DL_TimerA_setCaptureCompareOutCtl(PWM_0_INST, DL_TIMER_CC_OCTL_INIT_VAL_LOW,
    		DL_TIMER_CC_OCTL_INV_OUT_DISABLED, DL_TIMER_CC_OCTL_SRC_FUNCVAL,
    		DL_TIMERA_CAPTURE_COMPARE_0_INDEX);
    
        DL_TimerA_setCaptCompUpdateMethod(PWM_0_INST, DL_TIMER_CC_UPDATE_METHOD_IMMEDIATE, DL_TIMERA_CAPTURE_COMPARE_0_INDEX);
    
        DL_TimerA_setCaptureCompareValue(PWM_0_INST, 32767, DL_TIMER_CC_1_INDEX);
        DL_TimerA_setCaptureCompareOutCtl(PWM_0_INST, DL_TIMER_CC_OCTL_INIT_VAL_LOW,
    		DL_TIMER_CC_OCTL_INV_OUT_DISABLED, DL_TIMER_CC_OCTL_SRC_FUNCVAL,
    		DL_TIMERA_CAPTURE_COMPARE_1_INDEX);
    
        DL_TimerA_setCaptCompUpdateMethod(PWM_0_INST, DL_TIMER_CC_UPDATE_METHOD_IMMEDIATE, DL_TIMERA_CAPTURE_COMPARE_1_INDEX);
    
        DL_TimerA_enableClock(PWM_0_INST);
    
    
        
        DL_TimerA_setCCPDirection(PWM_0_INST , DL_TIMER_CC0_OUTPUT | DL_TIMER_CC1_OUTPUT );
    
    }

    ti_msp_dl_config.h

    /*
     *  ============ ti_msp_dl_config.h =============
     *  Configured MSPM0 DriverLib module declarations
     *
     *  DO NOT EDIT - This file is generated for the MSPM0G350X
     *  by the SysConfig tool.
     */
    #ifndef ti_msp_dl_config_h
    #define ti_msp_dl_config_h
    
    #define CONFIG_MSPM0G350X
    
    #if defined(__ti_version__) || defined(__TI_COMPILER_VERSION__)
    #define SYSCONFIG_WEAK __attribute__((weak))
    #elif defined(__IAR_SYSTEMS_ICC__)
    #define SYSCONFIG_WEAK __weak
    #elif defined(__GNUC__)
    #define SYSCONFIG_WEAK __attribute__((weak))
    #endif
    
    #include <ti/devices/msp/msp.h>
    #include <ti/driverlib/driverlib.h>
    #include <ti/driverlib/m0p/dl_core.h>
    
    #ifdef __cplusplus
    extern "C" {
    #endif
    
    /*
     *  ======== SYSCFG_DL_init ========
     *  Perform all required MSP DL initialization
     *
     *  This function should be called once at a point before any use of
     *  MSP DL.
     */
    
    
    /* clang-format off */
    
    #define POWER_STARTUP_DELAY                                                (16)
    
    
    
    #define CPUCLK_FREQ                                                     32000000
    
    
    
    /* Defines for PWM_0 */
    #define PWM_0_INST                                                         TIMA1
    #define PWM_0_INST_IRQHandler                                   TIMA1_IRQHandler
    #define PWM_0_INST_INT_IRQN                                     (TIMA1_INT_IRQn)
    #define PWM_0_INST_CLK_FREQ                                             32000000
    /* GPIO defines for channel 0 */
    #define GPIO_PWM_0_C0_PORT                                                 GPIOA
    #define GPIO_PWM_0_C0_PIN                                         DL_GPIO_PIN_17
    #define GPIO_PWM_0_C0_IOMUX                                      (IOMUX_PINCM39)
    #define GPIO_PWM_0_C0_IOMUX_FUNC                     IOMUX_PINCM39_PF_TIMA1_CCP0
    #define GPIO_PWM_0_C0_IDX                                    DL_TIMER_CC_0_INDEX
    /* GPIO defines for channel 1 */
    #define GPIO_PWM_0_C1_PORT                                                 GPIOA
    #define GPIO_PWM_0_C1_PIN                                         DL_GPIO_PIN_18
    #define GPIO_PWM_0_C1_IOMUX                                      (IOMUX_PINCM40)
    #define GPIO_PWM_0_C1_IOMUX_FUNC                     IOMUX_PINCM40_PF_TIMA1_CCP1
    #define GPIO_PWM_0_C1_IDX                                    DL_TIMER_CC_1_INDEX
    
    
    
    /* clang-format on */
    
    void SYSCFG_DL_init(void);
    void SYSCFG_DL_initPower(void);
    void SYSCFG_DL_GPIO_init(void);
    void SYSCFG_DL_SYSCTL_init(void);
    void SYSCFG_DL_PWM_0_init(void);
    
    bool SYSCFG_DL_saveConfiguration(void);
    bool SYSCFG_DL_restoreConfiguration(void);
    
    #ifdef __cplusplus
    }
    #endif
    
    #endif /* ti_msp_dl_config_h */

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

    您好!

    你们的代码在我这边工作。 我可以在这些引脚上获得 PWM 信号。  

    此致、

    现金豪

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

    大家好、Cash Hao11:

    为了从这些引脚生成输出、我需要研究 LP-MSPM0G3507 EVK 的任何跳线配置吗?

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

    大家好、Cash Hao11:

    我有另一个 LP-MSPM0G3507 EVK、我也在这上面试用了它。 但我得到相同的结果。

    供您参考、


    绿色=> PA18

    黄色=> PA17

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

    大家好、Cash Hao11:

    我忘了提及这一点。 每当我尝试调试时、都会在 IDE 中收到此弹出窗口。

    但我仍然可以在程序员确定后运行调试函数。

    这是一个问题吗?

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

    大家好、Cash Hao11:

    我想向您提供有关我遇到的问题的最新信息。 因为我的同事目前正在将微控制器用于其中一个项目。 我拿了一个具有 MCU 的 PCBA 并在它上运行相同的项目。 在此方面、我可以轻松观察 PWM 输出、而不会遇到任何问题。

    但是、我确实注意到了一个差异。 在实际 PCBA 上尝试将代码闪存到 G3507 MCU 时、我没有看到我刚才提到的弹出窗口。

    由此我推断、当前评估套件上的 MCU 可能不支持最新的 SDK。 因此、我计划购买新的评估套件。 不过、我很想知道是否有任何解决方法来解决此问题。

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

    您好!

    很抱歉回复延迟。 因为在这里的假期,刚刚回到办公室。

    您应该知道您能够观察 PWM 输出。  

    IDE 中的该弹出窗口意味着您正在使用 MSPM0 MCU 的早期样片。 通常您可以单击"确定"并 忽略此消息。 不过、早期样片版本和生产版本之间存在一些变化。 类似于计时器模块等。 所以、最好的方法是应用一些新的 EVM 板。  

    此致、

    现金豪