Skip to content

Commit 83c5e15

Browse files
committed
DM: PWM fixes
1 parent 902d525 commit 83c5e15

File tree

7 files changed

+327
-356
lines changed

7 files changed

+327
-356
lines changed

cores/arduino/WVariant.h

Lines changed: 59 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -70,18 +70,29 @@ typedef enum _ETCChannel
7070
TCC0_CH3 = (0<<8)|(3),
7171
TCC0_CH4 = (0<<8)|(4),
7272
TCC0_CH5 = (0<<8)|(5),
73-
TCC0_CH6 = (0<<8)|(6),
74-
TCC0_CH7 = (0<<8)|(7),
7573
TCC1_CH0 = (1<<8)|(0),
7674
TCC1_CH1 = (1<<8)|(1),
7775
TCC1_CH2 = (1<<8)|(2),
7876
TCC1_CH3 = (1<<8)|(3),
79-
TCC1_CH4 = (1<<8)|(0),
80-
TCC1_CH5 = (1<<8)|(1),
81-
TCC1_CH6 = (1<<8)|(2),
82-
TCC1_CH7 = (1<<8)|(3),
77+
TCC2_CH0 = (2<<8)|(0),
78+
TCC2_CH1 = (2<<8)|(1),
79+
TCC2_CH2 = (2<<8)|(2),
80+
TCC2_CH3 = (2<<8)|(3),
81+
TC0_CH0 = (3<<8)|(0),
82+
TC0_CH1 = (3<<8)|(1),
83+
TC1_CH0 = (4<<8)|(0),
84+
TC1_CH1 = (4<<8)|(1),
85+
TC2_CH0 = (5<<8)|(0),
86+
TC2_CH1 = (5<<8)|(1),
87+
TC3_CH0 = (6<<8)|(0),
88+
TC3_CH1 = (6<<8)|(1),
8389
} ETCChannel ;
8490

91+
typedef ETCChannel EPWMChannel;
92+
extern const uint32_t GCLK_CLKCTRL_IDs[TCC_INST_NUM+TC_INST_NUM];
93+
94+
#define NOT_ON_PWM NOT_ON_TIMER
95+
8596
#else
8697
// Definitions for TC channels
8798
typedef enum _ETCChannel
@@ -110,6 +121,39 @@ typedef enum _ETCChannel
110121
TC5_CH0 = (5<<8)|(0),
111122
TC5_CH1 = (5<<8)|(1),
112123
} ETCChannel ;
124+
125+
// Definitions for PWM channels
126+
typedef enum _EPWMChannel
127+
{
128+
NOT_ON_PWM=-1,
129+
PWM0_CH0=TCC0_CH0,
130+
PWM0_CH1=TCC0_CH1,
131+
PWM0_CH2=TCC0_CH2,
132+
PWM0_CH3=TCC0_CH3,
133+
PWM0_CH4=TCC0_CH4,
134+
PWM0_CH5=TCC0_CH5,
135+
PWM1_CH0=TCC1_CH0,
136+
PWM1_CH1=TCC1_CH1,
137+
PWM1_CH2=TCC1_CH2,
138+
PWM1_CH3=TCC1_CH3,
139+
PWM2_CH0=TCC2_CH0,
140+
PWM2_CH1=TCC2_CH1,
141+
PWM2_CH2=TCC2_CH2,
142+
PWM2_CH3=TCC2_CH3,
143+
PWM3_CH0=TC3_CH0,
144+
PWM3_CH1=TC3_CH1,
145+
PWM4_CH0=TC4_CH0,
146+
PWM4_CH1=TC4_CH1,
147+
PWM5_CH0=TC5_CH0,
148+
PWM5_CH1=TC5_CH1,
149+
#if defined(__SAMD21J18A__)
150+
PWM6_CH0=TC6_CH0,
151+
PWM6_CH1=TC6_CH1,
152+
PWM7_CH0=TC7_CH0,
153+
PWM7_CH1=TC7_CH1,
154+
#endif // __SAMD21J18A__
155+
} EPWMChannel ;
156+
113157
#endif
114158

115159
extern const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM] ;
@@ -118,68 +162,6 @@ extern const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM] ;
118162
#define GetTCChannelNumber( x ) ( (x) & 0xff )
119163
#define GetTC( x ) ( g_apTCInstances[(x) >> 8] )
120164

121-
122-
#if defined(__SAMD51__)
123-
124-
typedef enum _EPWMChannel
125-
{
126-
NOT_ON_PWM=-1,
127-
PWM0_CH0=TCC0_CH0,
128-
PWM0_CH1=TCC0_CH1,
129-
PWM0_CH2=TCC0_CH2,
130-
PWM0_CH3=TCC0_CH3,
131-
PWM0_CH4=TCC0_CH4,
132-
PWM0_CH5=TCC0_CH5,
133-
PWM0_CH6=TCC0_CH6,
134-
PWM0_CH7=TCC0_CH7,
135-
PWM1_CH0=TCC1_CH0,
136-
PWM1_CH1=TCC1_CH1,
137-
PWM1_CH2=TCC1_CH2,
138-
PWM1_CH3=TCC1_CH3,
139-
PWM1_CH4=TCC1_CH4,
140-
PWM1_CH5=TCC1_CH5,
141-
PWM1_CH6=TCC1_CH6,
142-
PWM1_CH7=TCC1_CH7,
143-
} EPWMChannel ;
144-
145-
#else //end __SAMD51J19A__
146-
// Definitions for PWM channels
147-
typedef enum _EPWMChannel
148-
{
149-
NOT_ON_PWM=-1,
150-
PWM0_CH0=TCC0_CH0,
151-
PWM0_CH1=TCC0_CH1,
152-
PWM0_CH2=TCC0_CH2,
153-
PWM0_CH3=TCC0_CH3,
154-
PWM0_CH4=TCC0_CH4,
155-
PWM0_CH5=TCC0_CH5,
156-
PWM0_CH6=TCC0_CH6,
157-
PWM0_CH7=TCC0_CH7,
158-
PWM1_CH0=TCC1_CH0,
159-
PWM1_CH1=TCC1_CH1,
160-
PWM1_CH2=TCC1_CH2,
161-
PWM1_CH3=TCC1_CH3,
162-
PWM2_CH0=TCC2_CH0,
163-
PWM2_CH1=TCC2_CH1,
164-
PWM2_CH2=TCC2_CH2,
165-
PWM2_CH3=TCC2_CH3,
166-
PWM3_CH0=TC3_CH0,
167-
PWM3_CH1=TC3_CH1,
168-
PWM4_CH0=TC4_CH0,
169-
PWM4_CH1=TC4_CH1,
170-
PWM5_CH0=TC5_CH0,
171-
PWM5_CH1=TC5_CH1,
172-
#if defined(__SAMD21J18A__)
173-
PWM6_CH0=TC6_CH0,
174-
PWM6_CH1=TC6_CH1,
175-
PWM7_CH0=TC7_CH0,
176-
PWM7_CH1=TC7_CH1,
177-
#endif // __SAMD21J18A__
178-
} EPWMChannel ;
179-
180-
#endif
181-
182-
183165
typedef enum _EPortType
184166
{
185167
NOT_A_PORT=-1,
@@ -255,12 +237,20 @@ typedef enum _EPioType
255237
#define PIN_ATTR_COMBO (1UL<<0)
256238
#define PIN_ATTR_ANALOG (1UL<<1)
257239
#define PIN_ATTR_DIGITAL (1UL<<2)
258-
#define PIN_ATTR_PWM (1UL<<3)
259240
#define PIN_ATTR_TIMER (1UL<<4)
260241
#define PIN_ATTR_TIMER_ALT (1UL<<5)
261242
#define PIN_ATTR_EXTINT (1UL<<6)
262243
#define PIN_ATTR_ANALOG_ALT (1UL<<7)
263244

245+
#if defined(__SAMD51__)
246+
// these correspond to the mux table
247+
#define PIN_ATTR_PWM_E (1UL<<3)
248+
#define PIN_ATTR_PWM_F (1UL<<8)
249+
#define PIN_ATTR_PWM_G (1UL<<9)
250+
#else
251+
#define PIN_ATTR_PWM (1UL<<3)
252+
#endif
253+
264254
/* Types used for the table below */
265255
typedef struct _PinDescription
266256
{

cores/arduino/wiring.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ void init( void )
7979
// PM->APBAMASK.reg |= PM_APBAMASK_EIC ;
8080

8181
#if defined(__SAMD51__)
82-
MCLK->APBAMASK.reg |= MCLK_APBAMASK_SERCOM0 | MCLK_APBAMASK_SERCOM1;
82+
MCLK->APBAMASK.reg |= MCLK_APBAMASK_SERCOM0 | MCLK_APBAMASK_SERCOM1 | MCLK_APBAMASK_TC0 | MCLK_APBAMASK_TC1;
8383

8484
MCLK->APBBMASK.reg |= MCLK_APBBMASK_SERCOM2 | MCLK_APBBMASK_SERCOM3 | MCLK_APBBMASK_TCC0 | MCLK_APBBMASK_TCC1 | MCLK_APBBMASK_TC3 | MCLK_APBBMASK_TC2;
8585

0 commit comments

Comments
 (0)