Skip to content

Commit 908d103

Browse files
committed
updating PWM pins/channels to allow more to be used simultaneously
1 parent e6c3ff1 commit 908d103

File tree

2 files changed

+42
-36
lines changed

2 files changed

+42
-36
lines changed

Diff for: cores/arduino/WVariant.h

+34-28
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,20 @@ typedef enum _EAnalogChannel
3232
typedef enum _ETCChannel
3333
{
3434
NOT_ON_TIMER=-1,
35-
TC3_CH0 = (3<<8)|(0),
36-
TC3_CH1 = (3<<8)|(1),
37-
TCC0_CH0 = (0<<8)|(0),
38-
TCC0_CH1 = (0<<8)|(1),
39-
TCC0_CH4 = (0<<8)|(4),
40-
TCC0_CH5 = (0<<8)|(5),
41-
TCC0_CH6 = (0<<8)|(6),
42-
TCC0_CH7 = (0<<8)|(7),
43-
TCC1_CH0 = (1<<8)|(0),
44-
TCC1_CH1 = (1<<8)|(1),
45-
TCC2_CH0 = (2<<8)|(0),
46-
TCC2_CH1 = (2<<8)|(1)
35+
TC3_CH0 = (3<<8)|(0),
36+
TC3_CH1 = (3<<8)|(1),
37+
TCC0_CH0 = (0<<8)|(0),
38+
TCC0_CH1 = (0<<8)|(1),
39+
TCC0_CH2 = (0<<8)|(2),
40+
TCC0_CH3 = (0<<8)|(3),
41+
TCC0_CH4 = (0<<8)|(4),
42+
TCC0_CH5 = (0<<8)|(5),
43+
TCC0_CH6 = (0<<8)|(6),
44+
TCC0_CH7 = (0<<8)|(7),
45+
TCC1_CH0 = (1<<8)|(0),
46+
TCC1_CH1 = (1<<8)|(1),
47+
TCC2_CH0 = (2<<8)|(0),
48+
TCC2_CH1 = (2<<8)|(1)
4749
} ETCChannel ;
4850

4951
extern const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM] ;
@@ -56,26 +58,30 @@ extern const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM] ;
5658
typedef enum _EPWMChannel
5759
{
5860
NOT_ON_PWM=-1,
59-
PWM3_CH0=TC3_CH0,
60-
PWM3_CH1=TC3_CH1,
61-
PWM0_CH0=TCC0_CH0,
62-
PWM0_CH1=TCC0_CH1,
63-
PWM0_CH4=TCC0_CH4,
64-
PWM0_CH5=TCC0_CH5,
65-
PWM0_CH6=TCC0_CH6,
66-
PWM0_CH7=TCC0_CH7,
67-
PWM1_CH0=TCC1_CH0,
68-
PWM1_CH1=TCC1_CH1,
69-
PWM2_CH0=TCC2_CH0,
70-
PWM2_CH1=TCC2_CH1
61+
PWM3_CH0=TC3_CH0,
62+
PWM3_CH1=TC3_CH1,
63+
PWM0_CH0=TCC0_CH0,
64+
PWM0_CH1=TCC0_CH1,
65+
PWM0_CH2=TCC0_CH2,
66+
PWM0_CH3=TCC0_CH3,
67+
PWM0_CH4=TCC0_CH4,
68+
PWM0_CH5=TCC0_CH5,
69+
PWM0_CH6=TCC0_CH6,
70+
PWM0_CH7=TCC0_CH7,
71+
PWM1_CH0=TCC1_CH0,
72+
PWM1_CH1=TCC1_CH1,
73+
PWM2_CH0=TCC2_CH0,
74+
PWM2_CH1=TCC2_CH1,
75+
PWM7_CH0=TC7_CH0,
76+
PWM7_CH1=TC7_CH1
7177
} EPWMChannel ;
7278

7379
typedef enum _EPortType
7480
{
75-
NOT_A_PORT=-1,
76-
PORTA=0,
77-
PORTB=1,
78-
PORTC=2,
81+
NOT_A_PORT=-1,
82+
PORTA=0,
83+
PORTB=1,
84+
PORTC=2,
7985
} EPortType ;
8086

8187
typedef enum _EExt_Interrupts

Diff for: variants/arduino_zero/variant.cpp

+8-8
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,16 @@
2828
* | 3 | ~3 | PA09 | | EIC/EXTINT[9] ADC/AIN[17] PTC/X[1] SERCOM0/PAD[1] SERCOM2/PAD[1] *TCC0/WO[1] TCC1/WO[3]
2929
* | 4 | ~4 | PA14 | | EIC/EXTINT[14] SERCOM2/PAD[2] SERCOM4/PAD[2] TC3/WO[0] *TCC0/WO[4]
3030
* | 5 | ~5 | PA15 | | EIC/EXTINT[15] SERCOM2/PAD[3] SERCOM4/PAD[3] TC3/WO[1] *TCC0/WO[5]
31-
* | 6 | ~6 | PA20 | | EIC/EXTINT[4] PTC/X[8] SERCOM5/PAD[2] SERCOM3/PAD[2] TC7/WO[0] *TCC0/WO[6]
32-
* | 7 | ~7 | PA21 | | EIC/EXTINT[5] PTC/X[9] SERCOM5/PAD[3] SERCOM3/PAD[3] TC7/WO[1] *TCC0/WO[7]
31+
* | 6 | ~6 | PA20 | | EIC/EXTINT[4] PTC/X[8] SERCOM5/PAD[2] SERCOM3/PAD[2] *TC7/WO[0] TCC0/WO[6]
32+
* | 7 | ~7 | PA21 | | EIC/EXTINT[5] PTC/X[9] SERCOM5/PAD[3] SERCOM3/PAD[3] *TC7/WO[1] TCC0/WO[7]
3333
* +------------+------------------+--------+-----------------+------------------------------
3434
* | | Digital High | | |
3535
* +------------+------------------+--------+-----------------+------------------------------
3636
* | 8 | ~8 | PA06 | | EIC/EXTINT[6] PTC/Y[4] ADC/AIN[6] AC/AIN[2] SERCOM0/PAD[2] *TCC1/WO[0]
3737
* | 9 | ~9 | PA07 | | EIC/EXTINT[7] PTC/Y[5] DC/AIN[7] AC/AIN[3] SERCOM0/PAD[3] *TCC1/WO[1]
38-
* | 10 | ~10 | PA18 | | EIC/EXTINT[2] PTC/X[6] SERCOM1/PAD[2] SERCOM3/PAD[2] *TC3/WO[0] TCC0/WO[2]
38+
* | 10 | ~10 | PA18 | | EIC/EXTINT[2] PTC/X[6] SERCOM1/PAD[2] SERCOM3/PAD[2] TC3/WO[0] *TCC0/WO[2]
3939
* | 11 | ~11 | PA16 | | EIC/EXTINT[0] PTC/X[4] SERCOM1/PAD[0] SERCOM3/PAD[0] *TCC2/WO[0] TCC0/WO[6]
40-
* | 12 | ~12 | PA19 | | EIC/EXTINT[3] PTC/X[7] SERCOM1/PAD[3] SERCOM3/PAD[3] *TC3/WO[1] TCC0/WO[3]
40+
* | 12 | ~12 | PA19 | | EIC/EXTINT[3] PTC/X[7] SERCOM1/PAD[3] SERCOM3/PAD[3] TC3/WO[1] *TCC0/WO[3]
4141
* | 13 | ~13 | PA17 | LED | EIC/EXTINT[1] PTC/X[5] SERCOM1/PAD[1] SERCOM3/PAD[1] *TCC2/WO[1] TCC0/WO[7]
4242
* | 14 | GND | | |
4343
* | 15 | AREF | PA03 | | *DAC/VREFP PTC/Y[1]
@@ -116,13 +116,13 @@ const PinDescription g_APinDescription[]=
116116
{ PORTA, 9, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM0_CH1, TCC0_CH1, EXTERNAL_INT_9 }, // TCC0/WO[1]
117117
{ PORTA, 14, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM0_CH4, TCC0_CH4, EXTERNAL_INT_14 }, // TCC0/WO[4]
118118
{ PORTA, 15, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM0_CH5, TCC0_CH5, EXTERNAL_INT_15 }, // TCC0/WO[5]
119-
{ PORTA, 20, PIO_TIMER_ALT, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM0_CH6, TCC0_CH6, EXTERNAL_INT_4 }, // TCC0/WO[6]
120-
{ PORTA, 21, PIO_TIMER_ALT, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM0_CH7, TCC0_CH7, EXTERNAL_INT_5 }, // TCC0/WO[7]
119+
{ PORTA, 20, PIO_TIMER_ALT, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM7_CH0, TC7_CH0, EXTERNAL_INT_4 }, // TC7/WO[0]
120+
{ PORTA, 21, PIO_TIMER_ALT, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM7_CH1, TC7_CH1, EXTERNAL_INT_5 }, // TC7/WO[1]
121121
{ PORTA, 6, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM1_CH0, TCC1_CH0, EXTERNAL_INT_4 }, // TCC1/WO[0]
122122
{ PORTA, 7, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM1_CH1, TCC1_CH1, EXTERNAL_INT_5 }, // TCC1/WO[1]
123-
{ PORTA, 18, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM3_CH0, TC3_CH0, EXTERNAL_INT_2 }, // TC3/WO[0]
123+
{ PORTA, 18, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM0_CH2, TCC0_CH2, EXTERNAL_INT_2 }, // TCC0/WO[2]
124124
{ PORTA, 16, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM2_CH0, TCC2_CH0, EXTERNAL_INT_0 }, // TCC2/WO[0]
125-
{ PORTA, 19, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM3_CH1, TC3_CH1, EXTERNAL_INT_3 }, // TC3/WO[1]
125+
{ PORTA, 19, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM0_CH3, TCC0_CH3, EXTERNAL_INT_3 }, // TCC0/WO[3]
126126

127127
// 13 (LED)
128128
{ PORTA, 17, PIO_PWM, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM2_CH1, NOT_ON_TIMER, EXTERNAL_INT_1 }, // TCC2/WO[1]

0 commit comments

Comments
 (0)