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.

how to config the PWM out to P12 and control it in zstack?

Other Parts Discussed in Thread: CC2530

Hi all

     i want to set the PWM output to the channel 0 at P12,i using the hal_timer.c API function , and coding as like below:

    

  PERCFG |= BV(6);  // Select Timer 1 Alternative 2 location
  P1SEL |= BV(2);   // Set P1_2 as peripheral 
  P_HalTimer1Init(0);
  P_halTimer1SetChannelDuty(HAL_T1_CH0,50);

      P_HalTimer1Init(0); function is follow the hal_timer.c  ,And  it only  define the channel 0 In timer 1

     

void P_HalTimer1Init (halTimerCBack_t cBack)
{
  T1CCTL0 = 0;    /* Make sure interrupts are disabled */
  //T1CCTL1 = 0;    /* Make sure interrupts are disabled */
  //T1CCTL2 = 0;    /* Make sure interrupts are disabled */
  //T1CCTL3 = 0;    /* Make sure interrupts are disabled */
  //T1CCTL4 = 0;    /* Make sure interrupts are disabled */

  /* Setup prescale & clock for 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;

  /* Setup Timer1 Channel structure */
  halTimer1Channel[0].TxCCTL =  TCHN_T1CCTL;
  halTimer1Channel[0].TxCCL =   TCHN_T1CCL;
  halTimer1Channel[0].TxCCH =   TCHN_T1CCH;

  halTimerRecord[HW_TIMER_1].configured    = TRUE;
  halTimerRecord[HW_TIMER_1].opMode        = 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].prescale);
  halTimerSetChannelMode (HW_TIMER_1, halTimerRecord[HW_TIMER_1].channelMode);

  // CHANNEL O, RFIRQ=0, IM=0, TOGGLE MODE
  halTimer1SetChannelCCTL(HAL_T1_CH0, 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);


    /* set timer 1 operating mode */
  T1CTL &= ~(HAL_TIMER1_OPMODE_BITS);
  T1CTL |= HAL_TIMER1_OPMODE_UPDOWN;

}

    But  there is nothing out in the P12 ?

    and  how could i  stop and start  it if it work ?

BR!