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.
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 ?