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.

[参考译文] 如何将 PWM 配置为输出到 P12并在 ZStack?中对其进行控制

Guru**** 2539500 points
Other Parts Discussed in Thread: CC2530

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/566204/how-to-config-the-pwm-out-to-p12-and-control-it-in-zstack

主题中讨论的其他器件:CC2530

大家好

    我想在 P12,I 时将 PWM 输出设置为通道0、使用 hal_dimer.c API 函数,并像下面:一样进行编码

    

PERCFG |= BV (6);//选择定时器1备用2位置
P1SEL |= BV (2);//将 P1_2设置为外设
P_HalTimer1Init (0);
P_halTimer1SetChannelDuty (HAL_T1_CH0、50); 

    P_HalTimer1Init (0);函数遵循 hal_dimer.c 、并且 它仅 在计时器1中定义通道0

     

void P_HalTimer1Init (halTimerCBack_t cBack)
{
T1CCTL0 = 0;//确保中断被禁用*//
//T1CCTL1 = 0;//确保中断被禁用*//
//T1CCTL2 = 0;//确保中断被禁用*//
T1CCTL3
= 0;*确保中断被禁用*/ T1CCTL4 = 0; /*确保中断被禁用*//

*设置 timer0的预分频和时钟*/
halTimerRecord[HW_TIMER_1].prescale = HAL_Timer1_16_prescale;
halTimerRecord[HW_TIMER_1].clock = HAL_TIMER_32MHz;
halTimerRecord[HW_TIMER_1].prescaleVal = HAL_Timer1_16_prescale_VAL;

//设置 Timer1通道结构*/
halTimer1Channel[0].TxCCTL = TCn_Tch1CCTL;halTimer1Channel[0].TchthalTimer1H_TxCC0].TxCCTxTimer0].TchthalTimer0_TchthalTimer0_TxCCTxCCTL;
halTimer1chTimer0_TchthalTimer0_TchthalTimer0_TxCC0_TchthalTimer0_TxCC0]=
Tcht


= HAL_Timer1_OPMODE_UPDOWN;
halTimerRecord[HW_TIMER_1].channel = 0;
halTimerRecord[HW_TIMER_1].channelMode = 0;
halTimerRecord[HW_TIMER_1].intEnable = false;
halTimerRecord[HW_TIMER_1].callBackFunc = cBack;
Timer1MaxCount = halTimer1SetPeriod (4292);// 233Hz

halTimerSetPrescale (HW_TIMER_1、halTimerRecord[HW_TIMER_1].halcale);halTimer1_channelTimerMode[HW_1


、HW_Chtimer1、channel1、halTimerRecord_channel1 RFIRQ=0、IM=0、切换模式
halTimer1SetChannelCCTL (HAL_T1_CH0、0、0、0、 HAL_Timer1_CH0_CMP_MODE_TOG_ON_COMP、1、HAL_Timer1_CH_CAP_MODE_NO);

//halTimer1SetChannelCCTL (HAL_T1_CH0、0、 1、HAL_Timer1_CH0_CMP_MODE_SET_ON_COMP、1、HAL_Timer1_CH_CAP_MODE_NO);
//halTimer1SetChannelCCTL (HAL_T1_CH1、 0、1、HAL_Timer1_CHN_CMP_MODE_CLR_ON_COMP_SET_ON_0、1、HAL_Timer1_CH_CAP_MODE_NO);
//halTimer1SetChannelCCTL (HAL_T1_CH2、0、1、HAL_Timer1_CHN_CMP_MODE_CLR_ON_COMP_SET_ON_0、1、 HAL_Timer1_CH_CAP_MODE_NO);
//halTimer1SetChannelCCTL (HAL_T1_CH3、0、1、HAL_Timer1_CHN_CMP_MODE_CLR_ON_COMP_SET_ON_0、 1、HAL_Timer1_CH_CAP_MODE_NO);
//halTimer1SetChannelCCTL (HAL_T1_CH4、0、1、 HAL_Timer1_CHN_CMP_MODE_CLR_ON_COMP_SET_ON_0、1、HAL_Timer1_CH_CAP_MODE_NO);

//P_halTimer1SetChannelDuty (HAL_T1_CH1、0);
//P_halTimer1SetChannelDuty (HAL_T1_CH2、0);
//P_halTimer1SetChannelDuty (HAL_T1_CH3、 0);
//P_halTimer1SetChannelDuty (HAL_T1_CH4、0);


//设置定时器1运行模式*/
T1CTL &=~(HAL_Timer1_OPMODE_Bits);
T1CTL |= HAL_Timer1_OPMODE_UPDOWN;

} 

   但 P12中没有任何内容?

    如果   它正常工作,我如何停止和启动它?

巴西!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您打算使用 P1.2作为 PWM 输出、则应使用计时器1 Alt.2来配置 PERCFG。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的

    PERCFG |= BV (6); //选择 Timer 1备用2位置
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否调试并暂停 CC2530以查看 IAR 监视窗口中的 PERCFG 值?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    它的值为0x40

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    让您的应用程序运行一段时间并暂停 IAR 中的应用程序以再次检查 PERCFG、P1SEL 和 P1DIR。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    P1SEL SEL_P12始终被置位
    P1DIR DIR_P12始终置1
    并且 PERCFG 为0x40


    不管怎样,如果工作正常,如何停止 PWM 并启动它?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我测试 P1.2、它是计时器1 alt.2的通道0、不起作用。 我不知道为什么它现在不起作用、但我看到通道1、2、3和4没有问题。 我建议您现在不要使用通道1、除非您能找到驱动程序问题所在。 如果您想停止 PWM、可以将 PxSEL 设置为0。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果我启用 POWERSAVING,是否可以使用 PWM?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、可以使用启用 POWER_SAVY 的 PWM。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    否,禁用 POWERSAVING 时正常

    但是、当 POPERSAVING ON,Ω 时、没有任何 PWM 输出
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当我说您可以使用 power_saving 时,您必须调用"osal_pwrmgr_device ( PWRMGR_always_on );"才能让 CC2530 MCU 继续输出 PWM,并调用"osal_pwrmgr_device ( PWRMGR_battery );"以便在您不需要使用 PWM 后让 MCU 进入睡眠状态。