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.

EVM3730 GPTimer10 and PWM

Other Parts Discussed in Thread: SYSCONFIG

platform: EVM 3730
os:wince 6.0
BSP:BSP BSP_WINCE_ARM_A8 1.01.00.03

Now I want to generate a PWM Signal with the GPTimer10 and output it over the GPIO-PAD GPMC_nCS5 in muxmode 3.
but no pwm signal was generated, who can give  an  advice to me ?

My code listings as follows.


BOOL  EnableDeviceClocks(UINT devId, BOOL bEnable)
{
    OMAP_CM_REGS* pCmRegs;
  
    ......
   
    switch (devId)
        {

  case OMAP_DEVICE_GPTIMER10: 
   pCmRegs = OALPAtoUA(OMAP_PRCM_WKUP_CM_REGS_PA);
   if (bEnable)
    {               
    SETREG32(&pCmRegs->CM_FCLKEN_xxx, CM_CLKEN_GPT10);
    SETREG32(&pCmRegs->CM_ICLKEN_xxx, CM_CLKEN_GPT10); 
    while (INREG32(&pCmRegs->CM_IDLEST1_xxx) & CM_IDLEST_ST_GPT10);
    }
   else
    {
    CLRREG32(&pCmRegs->CM_FCLKEN1_xxx, CM_CLKEN_GPT10);
    CLRREG32(&pCmRegs->CM_ICLKEN1_xxx, CM_CLKEN_GPT10);
    }
   break;

      ......
       
    return TRUE;
}

 


void Test_PWM10()
{
 
 
 DWORD tclr = 0;

 OMAP_GPTIMER_REGS *pTimerRegs_10 = OALPAtoUA(OMAP_GPTIMER1_REGS_PA);

 //enable GPTMER10 clock
 EnableDeviceClocks(OMAP_DEVICE_GPTIMER10,TRUE);

 

 // Soft reset GPTIMER and wait until finished
 SETREG32(&pTimerRegs_10->TIOCP, SYSCONFIG_SOFTRESET);
 while ((INREG32(&pTimerRegs_10->TISTAT) & GPTIMER_TISTAT_RESETDONE) == 0);

 

 OUTREG32(&g_pPerfTimer->TIOCP,
 0x200 | SYSCONFIG_SMARTIDLE|SYSCONFIG_ENAWAKEUP|
 SYSCONFIG_AUTOIDLE);

 // Select posted mode
 SETREG32(&pTimerRegs_10->TSICR, GPTIMER_TSICR_POSTED);

 // clear interrupts
 OUTREG32(&pTimerRegs_10->TISR, 0x00000000);

 // Trigger a counter reload by writing   
 OUTREG32(&pTimerRegs_10->TTGR, 0xFFFFFFFF);


 // clear match register
 OUTREG32(&pTimerRegs_10->TMAR, 0xFFFFFFFF);

 

 // enable wakeups
 //OUTREG32(&pTimerRegs_10->TWER, GPTIMER_TWER_MATCH);

 // Set the load register value.
 OUTREG32(&pTimerRegs_10->TLDR, 0xFFFF0000);

 

 tclr |= GPTIMER_TCLR_AR | GPTIMER_TCLR_PT | GPTIMER_TCLR_TRG_OVERFLOW;
 OUTREG32(&pTimerRegs_10->TCLR,  tclr);
 
 //start
 SETREG32(&pTimerRegs_10->TCLR, GPTIMER_TCLR_ST);

}

 

  • Hi,all

      I use the TI BSP_WINCE_ARM_A8_01_00_03  for Windows embedded compact 6 running on an Evaluation Board EVM3530 with the TI Processor DM3730.

    Now I want to generate a PWM Signal with the GPTimer10 and output it over the GPIO-PAD GPMC_nCS5 in muxmode 3.

       who can give me an example to use GPTimer10 as an PWM output? Thank you very much!

  • platform: DM 3730
    os:wince 6.0
    BSP:BSP BSP_WINCE_ARM_A8 1.01.00.03

    Now I want to generate a PWM Signal with the GPTimer10 and output it over the GPIO-PAD GPMC_nCS5 in muxmode 3.
    but no pwm signal was generated, who can give  an  advice to me ?

    My code listings as follows.


    BOOL  EnableDeviceClocks(UINT devId, BOOL bEnable)
    {
        OMAP_CM_REGS* pCmRegs;
      
        ......
       
        switch (devId)
            {

      case OMAP_DEVICE_GPTIMER10: 
       pCmRegs = OALPAtoUA(OMAP_PRCM_WKUP_CM_REGS_PA);
       if (bEnable)
        {               
        SETREG32(&pCmRegs->CM_FCLKEN_xxx, CM_CLKEN_GPT10);
        SETREG32(&pCmRegs->CM_ICLKEN_xxx, CM_CLKEN_GPT10); 
        while (INREG32(&pCmRegs->CM_IDLEST1_xxx) & CM_IDLEST_ST_GPT10);
        }
       else
        {
        CLRREG32(&pCmRegs->CM_FCLKEN1_xxx, CM_CLKEN_GPT10);
        CLRREG32(&pCmRegs->CM_ICLKEN1_xxx, CM_CLKEN_GPT10);
        }
       break;

          ......
           
        return TRUE;
    }

     


    void Test_PWM10()
    {
     
     
     DWORD tclr = 0;

     OMAP_GPTIMER_REGS *pTimerRegs_10 = OALPAtoUA(OMAP_GPTIMER1_REGS_PA);

     //enable GPTMER10 clock
     EnableDeviceClocks(OMAP_DEVICE_GPTIMER10,TRUE);

     

     // Soft reset GPTIMER and wait until finished
     SETREG32(&pTimerRegs_10->TIOCP, SYSCONFIG_SOFTRESET);
     while ((INREG32(&pTimerRegs_10->TISTAT) & GPTIMER_TISTAT_RESETDONE) == 0);

     

     OUTREG32(&g_pPerfTimer->TIOCP, 0x200  |  SYSCONFIG_SMARTIDLE | SYSCONFIG_ENAWAKEUP | SYSCONFIG_AUTOIDLE);

     // Select posted mode
     SETREG32(&pTimerRegs_10->TSICR, GPTIMER_TSICR_POSTED);

     // clear interrupts
     OUTREG32(&pTimerRegs_10->TISR, 0x00000000);

     // Trigger a counter reload by writing   
     OUTREG32(&pTimerRegs_10->TTGR, 0xFFFFFFFF);


     // clear match register
     OUTREG32(&pTimerRegs_10->TMAR, 0xFFFFFFFF);

     

     // enable wakeups
     //OUTREG32(&pTimerRegs_10->TWER, GPTIMER_TWER_MATCH);

     // Set the load register value.
     OUTREG32(&pTimerRegs_10->TLDR, 0xFFFF0000);

     

     tclr |= GPTIMER_TCLR_AR | GPTIMER_TCLR_PT | GPTIMER_TCLR_TRG_OVERFLOW;
     OUTREG32(&pTimerRegs_10->TCLR,  tclr);
     
     //start
     SETREG32(&pTimerRegs_10->TCLR, GPTIMER_TCLR_ST);

    }

     

  • for one thing you are mapping OMAP_GPTIMER1_REG_PA instead of timer 10.

     

    DV

  • Hi,

         Thank you very much! could you tell me how to  carry out PulsPulse-Width Modulation e-Width Modulation Pulse-Width Modulation , i.e. which register  can  I modify, TLDR, TMAR  or  TTGR.