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 difine pin42 as EPWM8A mode and set the registers ?

hello everyone,

I want to define Pin42 as a PWM output Pin for my application ,and I  pick lab13e for test .  

I try to set the Epwm registers , but  no reaction . I think there‘s something wrong with my code or miss something .

here is my own code. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
//step1 in hal.c
void HAL_setupGpios(HAL_Handle handle)
{
//......
 
// PWM8
  GPIO_setMode(obj->gpioHandle,GPIO_Number_42,GPIO_42_Mode_EPWM8A);
//......
}
//step2 in hal_obj.h
typedef struct _HAL_Obj_
{
//......
  PWM_Handle    pwmHandle[9];     //<! the PWM handles
//......
}
//step3 in hal.c
HAL_Handle HAL_init(void *pMemory,const size_t numBytes)
{
  //......
  obj->pwmHandle[8] = PWM_init((void *)PWM_ePWM8_BASE_ADDR,sizeof(PWM_Obj));
  //......
}
//step4 in hal.c
void HAL_setupPwms(HAL_Handle handle,
                   const uint_least16_t systemFreq_MHz,
                   const float_t pwmPeriod_usec,
                   const uint_least16_t numPwmTicksPerIsrTick)
{
  //......
  PWM_setOneShotTrip(obj->pwmHandle[PWM_Number_8]);
  PWM_setCounterMode(obj->pwmHandle[PWM_Number_8],PWM_CounterMode_Up);
  PWM_setPeriod(obj->pwmHandle[PWM_Number_8],2000);
  PWM_disableCounterLoad(obj->pwmHandle[PWM_Number_8]);
  PWM_setPhase(obj->pwmHandle[PWM_Number_8],0);
  PWM_setCount(obj->pwmHandle[PWM_Number_8],0);
  PWM_setHighSpeedClkDiv(obj->pwmHandle[PWM_Number_8],PWM_HspClkDiv_by_2);
  PWM_setClkDiv(obj->pwmHandle[PWM_Number_8],PWM_ClkDiv_by_2);
  PWM_setShadowMode_CmpA(obj->pwmHandle[PWM_Number_8],PWM_ShadowMode_Shadow);
  PWM_setShadowMode_CmpB(obj->pwmHandle[PWM_Number_8],PWM_ShadowMode_Shadow);
  PWM_setLoadMode_CmpA(obj->pwmHandle[PWM_Number_8],PWM_LoadMode_Zero);
  PWM_setLoadMode_CmpB(obj->pwmHandle[PWM_Number_8],PWM_LoadMode_Zero);
  PWM_write_CmpA(obj->pwmHandle[PWM_Number_8],50);
  PWM_write_CmpB(obj->pwmHandle[PWM_Number_8],50);
  PWM_setActionQual_Zero_PwmA(obj->pwmHandle[PWM_Number_8],PWM_ActionQual_Set);
  PWM_setActionQual_CntUp_CmpA_PwmA(obj->pwmHandle[PWM_Number_8],PWM_ActionQual_Clear);
  PWM_setActionQual_Zero_PwmB(obj->pwmHandle[PWM_Number_8],PWM_ActionQual_Set);
  PWM_setActionQual_CntUp_CmpB_PwmB(obj->pwmHandle[PWM_Number_8],PWM_ActionQual_Clear);
  PWM_setIntMode(obj->pwmHandle[PWM_Number_8],PWM_IntMode_CounterEqualZero);
  PWM_enableInt(obj->pwmHandle[PWM_Number_8]);
  PWM_setIntPeriod(obj->pwmHandle[PWM_Number_8],PWM_IntPeriod_ThirdEvent);
  PWM_setPhaseDir(obj->pwmHandle[PWM_Number_8],PWM_PhaseDir_CountUp);
  PWM_setCount(obj->pwmHandle[PWM_Number_8],0);
  //......
}
//step5 in hal.h
static inline void HAL_enablePwm(HAL_Handle handle)
{
PWM_clearOneShotTrip(obj->pwmHandle[PWM_Number_8]);
}

so ,anyone know where is the problem ? please help~~~~ 

  • Stefan,

    You need to add this line in the hal.c in the setup clocks function @ line 1153

    CLK_enablePwmClock(obj->clkHandle,PWM_Number_8);

    Function:

    void HAL_setupPeripheralClks(HAL_Handle handle)
    
    ...
    
    CLK_enablePwmClock(obj->clkHandle,PWM_Number_1);
      CLK_enablePwmClock(obj->clkHandle,PWM_Number_2);
      CLK_enablePwmClock(obj->clkHandle,PWM_Number_3);
      CLK_enablePwmClock(obj->clkHandle,PWM_Number_4);
      CLK_enablePwmClock(obj->clkHandle,PWM_Number_5);
      CLK_enablePwmClock(obj->clkHandle,PWM_Number_6);
      CLK_enablePwmClock(obj->clkHandle,PWM_Number_7);
    
       CLK_enablePwmClock(obj->clkHandle,PWM_Number_8);
    
    

  • MatthewPate,

    Thanks for your reply. yes, you are right, I miss the CLK_enablePwmClock(), and I add it as you said .

    But it still no any waveform output, so something else must be wrong that I haven't found yet ,

    did I set  the registers right ?

  • teffible mistake (= =)!...
    //step2 in hal_obj.h
    typedef struct _HAL_Obj_
    {
    //......
    PWM_Handle pwmHandle[8]; //<! the PWM handles
    //......
    }
    //step3 in hal.c
    HAL_Handle HAL_init(void *pMemory,const size_t numBytes)
    {
    //......
    obj->pwmHandle[7] = PWM_init((void *)PWM_ePWM8_BASE_ADDR,sizeof(PWM_Obj));
    //......
    }
  • Good catch Stefan, glad you were able to find the problem.