@@ -53,47 +53,36 @@ static void syncTCC(Tcc* TCCx) {
53
53
while (TCCx -> SYNCBUSY .reg & TCC_SYNCBUSY_MASK );
54
54
}
55
55
56
- void analogReadResolution ( int res )
56
+ void analogReadResolution (int res )
57
57
{
58
- _readResolution = res ;
59
- if (res > 10 )
60
- {
58
+ _readResolution = res ;
59
+ if (res > 10 ) {
61
60
ADC -> CTRLB .bit .RESSEL = ADC_CTRLB_RESSEL_12BIT_Val ;
62
61
_ADCResolution = 12 ;
63
- }
64
- else if (res > 8 )
65
- {
62
+ } else if (res > 8 ) {
66
63
ADC -> CTRLB .bit .RESSEL = ADC_CTRLB_RESSEL_10BIT_Val ;
67
64
_ADCResolution = 10 ;
68
- }
69
- else
70
- {
65
+ } else {
71
66
ADC -> CTRLB .bit .RESSEL = ADC_CTRLB_RESSEL_8BIT_Val ;
72
67
_ADCResolution = 8 ;
73
68
}
74
69
syncADC ();
75
70
}
76
71
77
- void analogWriteResolution ( int res )
72
+ void analogWriteResolution (int res )
78
73
{
79
- _writeResolution = res ;
74
+ _writeResolution = res ;
80
75
}
81
76
82
- static inline uint32_t mapResolution ( uint32_t value , uint32_t from , uint32_t to )
77
+ static inline uint32_t mapResolution (uint32_t value , uint32_t from , uint32_t to )
83
78
{
84
- if ( from == to )
85
- {
86
- return value ;
79
+ if (from == to ) {
80
+ return value ;
87
81
}
88
-
89
- if ( from > to )
90
- {
91
- return value >> (from - to ) ;
92
- }
93
- else
94
- {
95
- return value << (to - from ) ;
82
+ if (from > to ) {
83
+ return value >> (from - to );
96
84
}
85
+ return value << (to - from );
97
86
}
98
87
99
88
/*
@@ -102,10 +91,10 @@ static inline uint32_t mapResolution( uint32_t value, uint32_t from, uint32_t to
102
91
*
103
92
* Warning : On Arduino Zero board the input/output voltage for SAMD21G18 is 3.3 volts maximum
104
93
*/
105
- void analogReference ( eAnalogReference ulMode )
94
+ void analogReference (eAnalogReference mode )
106
95
{
107
96
syncADC ();
108
- switch ( ulMode )
97
+ switch (mode )
109
98
{
110
99
case AR_INTERNAL :
111
100
case AR_INTERNAL2V23 :
@@ -136,27 +125,25 @@ void analogReference( eAnalogReference ulMode )
136
125
}
137
126
}
138
127
139
- uint32_t analogRead ( uint32_t ulPin )
128
+ uint32_t analogRead (uint32_t pin )
140
129
{
141
130
uint32_t valueRead = 0 ;
142
131
143
- if ( ulPin < A0 )
144
- {
145
- ulPin += A0 ;
132
+ if (pin < A0 ) {
133
+ pin += A0 ;
146
134
}
147
135
148
- pinPeripheral (ulPin , PIO_ANALOG );
136
+ pinPeripheral (pin , PIO_ANALOG );
149
137
150
- if (ulPin == A0 ) // Disable DAC, if analogWrite(A0,dval) used previously the DAC is enabled
151
- {
138
+ if (pin == A0 ) { // Disable DAC, if analogWrite(A0,dval) used previously the DAC is enabled
152
139
syncDAC ();
153
140
DAC -> CTRLA .bit .ENABLE = 0x00 ; // Disable DAC
154
141
//DAC->CTRLB.bit.EOEN = 0x00; // The DAC output is turned off.
155
142
syncDAC ();
156
143
}
157
144
158
145
syncADC ();
159
- ADC -> INPUTCTRL .bit .MUXPOS = g_APinDescription [ulPin ].ulADCChannelNumber ; // Selection for the positive ADC input
146
+ ADC -> INPUTCTRL .bit .MUXPOS = g_APinDescription [pin ].ulADCChannelNumber ; // Selection for the positive ADC input
160
147
161
148
// Control A
162
149
/*
@@ -185,7 +172,7 @@ uint32_t analogRead( uint32_t ulPin )
185
172
ADC -> SWTRIG .bit .START = 1 ;
186
173
187
174
// Store the value
188
- while ( ADC -> INTFLAG .bit .RESRDY == 0 ); // Waiting for conversion to complete
175
+ while (ADC -> INTFLAG .bit .RESRDY == 0 ); // Waiting for conversion to complete
189
176
valueRead = ADC -> RESULT .reg ;
190
177
191
178
syncADC ();
@@ -200,90 +187,88 @@ uint32_t analogRead( uint32_t ulPin )
200
187
// hardware support. These are defined in the appropriate
201
188
// pins_*.c file. For the rest of the pins, we default
202
189
// to digital output.
203
- void analogWrite ( uint32_t ulPin , uint32_t ulValue )
190
+ void analogWrite (uint32_t pin , uint32_t value )
204
191
{
205
- uint32_t attr = g_APinDescription [ulPin ].ulPinAttribute ;
192
+ uint32_t attr = g_APinDescription [pin ].ulPinAttribute ;
206
193
207
- if ( (attr & PIN_ATTR_ANALOG ) == PIN_ATTR_ANALOG )
194
+ if ((attr & PIN_ATTR_ANALOG ) == PIN_ATTR_ANALOG )
208
195
{
209
- if ( ulPin != PIN_A0 ) // Only 1 DAC on A0 (PA02)
210
- {
196
+ // DAC handling code
197
+
198
+ if (pin != PIN_A0 ) { // Only 1 DAC on A0 (PA02)
211
199
return ;
212
200
}
213
201
214
- ulValue = mapResolution (ulValue , _writeResolution , 10 );
202
+ value = mapResolution (value , _writeResolution , 10 );
215
203
216
204
syncDAC ();
217
- DAC -> DATA .reg = ulValue & 0x3FF ; // DAC on 10 bits.
205
+ DAC -> DATA .reg = value & 0x3FF ; // DAC on 10 bits.
218
206
syncDAC ();
219
207
DAC -> CTRLA .bit .ENABLE = 0x01 ; // Enable DAC
220
208
syncDAC ();
221
- return ;
209
+ return ;
222
210
}
223
211
224
- if ( (attr & PIN_ATTR_PWM ) == PIN_ATTR_PWM )
212
+ if ((attr & PIN_ATTR_PWM ) == PIN_ATTR_PWM )
225
213
{
226
214
if (attr & PIN_ATTR_TIMER ) {
227
215
#if !(ARDUINO_SAMD_VARIANT_COMPLIANCE >= 10603 )
228
216
// Compatibility for cores based on SAMD core <=1.6.2
229
- if (g_APinDescription [ulPin ].ulPinType == PIO_TIMER_ALT ) {
230
- pinPeripheral (ulPin , PIO_TIMER_ALT );
217
+ if (g_APinDescription [pin ].ulPinType == PIO_TIMER_ALT ) {
218
+ pinPeripheral (pin , PIO_TIMER_ALT );
231
219
} else
232
220
#endif
233
221
{
234
- pinPeripheral (ulPin , PIO_TIMER );
222
+ pinPeripheral (pin , PIO_TIMER );
235
223
}
236
224
} else {
237
225
// We suppose that attr has PIN_ATTR_TIMER_ALT bit set...
238
- pinPeripheral (ulPin , PIO_TIMER_ALT );
226
+ pinPeripheral (pin , PIO_TIMER_ALT );
239
227
}
240
228
241
- Tc * TCx = 0 ;
242
- Tcc * TCCx = 0 ;
243
- uint8_t Channelx = GetTCChannelNumber ( g_APinDescription [ulPin ].ulPWMChannel ) ;
244
- if ( GetTCNumber ( g_APinDescription [ulPin ].ulPWMChannel ) >= TCC_INST_NUM )
245
- {
246
- TCx = (Tc * ) GetTC ( g_APinDescription [ulPin ].ulPWMChannel ) ;
247
- }
248
- else
249
- {
250
- TCCx = (Tcc * ) GetTC ( g_APinDescription [ulPin ].ulPWMChannel ) ;
229
+ Tc * TCx = NULL ;
230
+ Tcc * TCCx = NULL ;
231
+ uint8_t Channelx = GetTCChannelNumber (g_APinDescription [pin ].ulPWMChannel );
232
+ if (GetTCNumber (g_APinDescription [pin ].ulPWMChannel ) >= TCC_INST_NUM ) {
233
+ TCx = (Tc * ) GetTC (g_APinDescription [pin ].ulPWMChannel );
234
+ } else {
235
+ TCCx = (Tcc * ) GetTC (g_APinDescription [pin ].ulPWMChannel );
251
236
}
252
237
253
238
// Enable clocks according to TCCx instance to use
254
- switch ( GetTCNumber ( g_APinDescription [ulPin ].ulPWMChannel ) )
239
+ switch (GetTCNumber (g_APinDescription [pin ].ulPWMChannel ) )
255
240
{
256
241
case 0 : // TCC0
257
242
case 1 : // TCC1
258
243
// Enable GCLK for TCC0 and TCC1 (timer counter input clock)
259
- GCLK -> CLKCTRL .reg = (uint16_t ) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID ( GCM_TCC0_TCC1 )) ;
260
- break ;
244
+ GCLK -> CLKCTRL .reg = (uint16_t ) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID (GCM_TCC0_TCC1 )) ;
245
+ break ;
261
246
262
247
case 2 : // TCC2
263
248
case 3 : // TC3
264
249
// Enable GCLK for TCC2 and TC3 (timer counter input clock)
265
- GCLK -> CLKCTRL .reg = (uint16_t ) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID ( GCM_TCC2_TC3 )) ;
266
- break ;
250
+ GCLK -> CLKCTRL .reg = (uint16_t ) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID (GCM_TCC2_TC3 )) ;
251
+ break ;
267
252
268
253
case 4 : // TC4
269
254
case 5 : // TC5
270
255
// Enable GCLK for TC4 and TC5 (timer counter input clock)
271
- GCLK -> CLKCTRL .reg = (uint16_t ) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID ( GCM_TC4_TC5 ));
272
- break ;
256
+ GCLK -> CLKCTRL .reg = (uint16_t ) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID (GCM_TC4_TC5 ));
257
+ break ;
273
258
274
259
case 6 : // TC6 (not available on Zero)
275
260
case 7 : // TC7 (not available on Zero)
276
261
// Enable GCLK for TC6 and TC7 (timer counter input clock)
277
- GCLK -> CLKCTRL .reg = (uint16_t ) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID ( GCM_TC6_TC7 ));
278
- break ;
262
+ GCLK -> CLKCTRL .reg = (uint16_t ) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID (GCM_TC6_TC7 ));
263
+ break ;
279
264
}
280
265
281
- while ( GCLK -> STATUS .bit .SYNCBUSY == 1 ) ;
266
+ while (GCLK -> STATUS .bit .SYNCBUSY == 1 ) ;
282
267
283
- ulValue = mapResolution (ulValue , _writeResolution , 8 );
268
+ value = mapResolution (value , _writeResolution , 8 );
284
269
285
270
// Set PORT
286
- if ( TCx )
271
+ if (TCx )
287
272
{
288
273
// -- Configure TC
289
274
@@ -295,7 +280,7 @@ void analogWrite( uint32_t ulPin, uint32_t ulValue )
295
280
// Set TCx as normal PWM
296
281
TCx -> COUNT8 .CTRLA .reg |= TC_CTRLA_WAVEGEN_NPWM ;
297
282
// Set TCx in waveform mode Normal PWM
298
- TCx -> COUNT8 .CC [Channelx ].reg = (uint8_t ) ulValue ;
283
+ TCx -> COUNT8 .CC [Channelx ].reg = (uint8_t ) value ;
299
284
syncTC_8 (TCx );
300
285
// Set PER to maximum counter value (resolution : 0xFF)
301
286
TCx -> COUNT8 .PER .reg = 0xFF ;
@@ -314,29 +299,26 @@ void analogWrite( uint32_t ulPin, uint32_t ulValue )
314
299
TCCx -> WAVE .reg |= TCC_WAVE_WAVEGEN_NPWM ;
315
300
syncTCC (TCCx );
316
301
// Set TCx in waveform mode Normal PWM
317
- TCCx -> CC [Channelx ].reg = (uint32_t )ulValue ;
302
+ TCCx -> CC [Channelx ].reg = (uint32_t )value ;
318
303
syncTCC (TCCx );
319
304
// Set PER to maximum counter value (resolution : 0xFF)
320
305
TCCx -> PER .reg = 0xFF ;
321
306
syncTCC (TCCx );
322
307
// Enable TCCx
323
- TCCx -> CTRLA .reg |= TCC_CTRLA_ENABLE ;
308
+ TCCx -> CTRLA .reg |= TCC_CTRLA_ENABLE ;
324
309
syncTCC (TCCx );
325
310
}
326
311
327
- return ;
312
+ return ;
328
313
}
329
314
330
315
// -- Defaults to digital write
331
- pinMode ( ulPin , OUTPUT ) ;
332
- ulValue = mapResolution (ulValue , _writeResolution , 8 );
333
- if ( ulValue < 128 )
334
- {
335
- digitalWrite ( ulPin , LOW ) ;
336
- }
337
- else
338
- {
339
- digitalWrite ( ulPin , HIGH ) ;
316
+ pinMode (pin , OUTPUT );
317
+ value = mapResolution (value , _writeResolution , 8 );
318
+ if (value < 128 ) {
319
+ digitalWrite (pin , LOW );
320
+ } else {
321
+ digitalWrite (pin , HIGH );
340
322
}
341
323
}
342
324
0 commit comments