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.

MSPM0L1306-Q1: MSPM0L1306 PWM init code debug-初始化PWM的代码

Part Number: MSPM0L1306-Q1
Other Parts Discussed in Thread: SYSCONFIG

1. 用MSPM0L1306-Q1 (VSSOP 28封装)做了一个板子,现在可以开机和运行LED闪烁程序。

2. 正在debug PWM out的程序,用PA14(TIMG1, C0)输出,但是始终没有在示波器上看到PWM波,查过示波器设置没有问题。

3. 下面是PWM的初始化程序,麻烦查一下,看看是哪里的问题,谢谢!

#define GPIO_PWM_PORT                                                         (GPIOA)

#define GPIO_RGB_PWMOUTT_PIN                                          (DL_GPIO_PIN_14)

#define GPIO_IOMUX_RGB_PWMOUTT                                     (IOMUX_PINCM15)

#define GPIO_IOMUX_FUNC_PWMOUTT_PWM                        (IOMUX_PINCM15_PF_TIMG1_CCP0)


static const DL_TimerG_ClockConfig gLIGHTSENSOR_PWM_OUTT_INSTClockConfig = {
.clockSel = DL_TIMER_CLOCK_LFCLK,
.divideRatio = DL_TIMER_CLOCK_DIVIDE_1,
.prescale = 0,
};

static const DL_TimerG_PWMConfig gLIGHTSENSOR_PWM_OUTT_INSTConfig = {
.period = RGB_LED_PERIOD, /* 64Hz PWM signal for visible light */
.pwmMode = DL_TIMER_PWM_MODE_EDGE_ALIGN,
.startTimer = false,
};

void PWMout1_init(void)
{
DL_GPIO_initDigitalOutput(GPIO_IOMUX_RGB_PWMOUTT);

DL_GPIO_clearPins(GPIO_PWM_PORT, GPIO_RGB_PWMOUTT_PIN);

DL_GPIO_enableOutput(GPIO_PWM_PORT, GPIO_RGB_PWMOUTT_PIN);

DL_GPIO_initPeripheralOutputFunction(GPIO_IOMUX_RGB_PWMOUTT, GPIO_IOMUX_FUNC_PWMOUTT_PWM);

///========================================

DL_TimerG_setClockConfig(LIGHTSENSOR_PWM_OUT_INST,
(DL_TimerG_ClockConfig *) &gLIGHTSENSOR_PWM_OUTT_INSTClockConfig);

DL_TimerG_initPWMMode(LIGHTSENSOR_PWM_OUT_INST,
(DL_TimerG_PWMConfig *) &gLIGHTSENSOR_PWM_OUTT_INSTConfig);

/* Configure 50% duty cycle */
DL_TimerG_setCaptureCompareValue(
LIGHTSENSOR_PWM_OUT_INST, PWM_OUTT_PERIOD / 2, DL_TIMER_CC_1_INDEX);

DL_TimerG_clearInterruptStatus(
LIGHTSENSOR_PWM_OUT_INST, DL_TIMER_INTERRUPT_ZERO_EVENT);
DL_TimerG_enableInterrupt(
LIGHTSENSOR_PWM_OUT_INST, DL_TIMER_INTERRUPT_ZERO_EVENT);

DL_TimerG_enableClock(LIGHTSENSOR_PWM_OUT_INST);

DL_TimerG_setCCPDirection(LIGHTSENSOR_PWM_OUT_INST, DL_TIMER_CC1_OUTPUT);

DL_TimerG_startCounter(LIGHTSENSOR_PWM_OUT_INST);

}

  • LIGHTSENSOR_PWM_OUT_INST  定义是  TIMG1

  • Hello Shine,

    You use the PWM channel 0, please check whether the DL_TIMER_CC_1_INDEX and DL_TIMER_CC1_OUTPUT is relative to channel 0, not the channel 1. And you can download the latest version of M0 SDK from ti.com, you can use the PWM example code in the SDK to test the PWM function. The latest TI IDE (CCS) and M0 SDK can be download from ti.com.

    Best Regards,

    Janz Bai

  • 我现在用的就是前几天才从TI官网下载的M0 SDK软件包,用的是KEIL编译器。

    我把DL_TIMER_CC_1_INDEX and DL_TIMER_CC1_OUTPUT 都改为 DL_TIMER_CC_0_INDEX and DL_TIMER_CC0_OUTPUT ,但是还是没有波形出来。

    我补上下面的定义,麻烦看看是否有问题?

    #define  LIGHTSENSOR_PWM_OUT_INST          (TIMG1)

    #define  LIGHTSENSOR_PWM_OUT_INST_IRQHandler         TIMG1_IRQHandler

    #define  LIGHTSENSOR_PWM_OUT_INST_INT_IRQN                  (TIMG1_INT_IRQn)

  • 另外,我看了贵司的PWM例子,没看出PWM初始化代码在哪里,我看的是timx_timer_mode_pwm_center_stop

    但是这个文件的初始化代码实在过于简单,只看到有  

    SYSCFG_DL_INIT();

    DL_TimerG_startCounter(PWM_0_INST); 

    而且我看了TI_MSP_DL_CONFIG.C文件的SYSCFG_DL_INIT()函数,这个函数并没有任何关于PWM初始化的代码,或者请帮忙发个完整的PWM初始化代码,谢谢。

  • 另外,请问MSPM0L 1306的PWM输出是可以直接连接到某个IO口的吧,也就是说初始化之后,在TIMER计数溢出的时候,不需要跳转到中断处理程序去控制GPIO口反转的吧?谢谢。

  • 我的意思是,我没有写一个中断处理程序去控制PA14口反转的。

  • 不需要,PWM计数引发的中断不会影响PWM的正常输出

  • 请问您是否使用过我们TI的Sysconfig, Keil中也是可以集成Sysconfig的,使用Sysconfig就可以图形化配置TIMER-PWM, 不用您手动去写初始化代码。SYSCFG_DL_INIT()这个函数中应该是要包含一个pwm初始化函数的。 

  • 我推荐您从官网下载安装Sysconfig后,根据我们的design flow guide 将Sysconfig导入进Keil, 然后从我们的SDK中导入一个PWM的示例程

    序: timx_timer_mode_pwm_edge_sleep,然后去验证下PWM功能。

    Keil IDE Guide (ti.com)

  • 我的电脑是32位系统,安装不了SYSCONFIG,但是我刚刚调试好PWM了。

    我把  TIMERG_RESET和  TIMERG_ENABLEPOWER这2句加上去,就是打开TIMERG的电源就好了,谢谢。

  • 是的 在PWM初始化中 这两个函数是需要的。

  • OK,  THANK YOU VERY MUCH.