Skip to content
Snippets Groups Projects
Commit 156884bc authored by Cristian Maglie's avatar Cristian Maglie
Browse files

Fixed whitespaces, removed some prefixes from variables names

parent 683845e4
No related branches found
No related tags found
No related merge requests found
...@@ -53,47 +53,36 @@ static void syncTCC(Tcc* TCCx) { ...@@ -53,47 +53,36 @@ static void syncTCC(Tcc* TCCx) {
while (TCCx->SYNCBUSY.reg & TCC_SYNCBUSY_MASK); while (TCCx->SYNCBUSY.reg & TCC_SYNCBUSY_MASK);
} }
void analogReadResolution( int res ) void analogReadResolution(int res)
{ {
_readResolution = res ; _readResolution = res;
if (res > 10) if (res > 10) {
{
ADC->CTRLB.bit.RESSEL = ADC_CTRLB_RESSEL_12BIT_Val; ADC->CTRLB.bit.RESSEL = ADC_CTRLB_RESSEL_12BIT_Val;
_ADCResolution = 12; _ADCResolution = 12;
} } else if (res > 8) {
else if (res > 8)
{
ADC->CTRLB.bit.RESSEL = ADC_CTRLB_RESSEL_10BIT_Val; ADC->CTRLB.bit.RESSEL = ADC_CTRLB_RESSEL_10BIT_Val;
_ADCResolution = 10; _ADCResolution = 10;
} } else {
else
{
ADC->CTRLB.bit.RESSEL = ADC_CTRLB_RESSEL_8BIT_Val; ADC->CTRLB.bit.RESSEL = ADC_CTRLB_RESSEL_8BIT_Val;
_ADCResolution = 8; _ADCResolution = 8;
} }
syncADC(); syncADC();
} }
void analogWriteResolution( int res ) void analogWriteResolution(int res)
{ {
_writeResolution = res ; _writeResolution = res;
} }
static inline uint32_t mapResolution( uint32_t value, uint32_t from, uint32_t to ) static inline uint32_t mapResolution(uint32_t value, uint32_t from, uint32_t to)
{ {
if ( from == to ) if (from == to) {
{ return value;
return value ;
} }
if (from > to) {
if ( from > to ) return value >> (from-to);
{
return value >> (from-to) ;
}
else
{
return value << (to-from) ;
} }
return value << (to-from);
} }
/* /*
...@@ -102,10 +91,10 @@ static inline uint32_t mapResolution( uint32_t value, uint32_t from, uint32_t to ...@@ -102,10 +91,10 @@ static inline uint32_t mapResolution( uint32_t value, uint32_t from, uint32_t to
* *
* Warning : On Arduino Zero board the input/output voltage for SAMD21G18 is 3.3 volts maximum * Warning : On Arduino Zero board the input/output voltage for SAMD21G18 is 3.3 volts maximum
*/ */
void analogReference( eAnalogReference ulMode ) void analogReference(eAnalogReference mode)
{ {
syncADC(); syncADC();
switch ( ulMode ) switch (mode)
{ {
case AR_INTERNAL: case AR_INTERNAL:
case AR_INTERNAL2V23: case AR_INTERNAL2V23:
...@@ -136,19 +125,17 @@ void analogReference( eAnalogReference ulMode ) ...@@ -136,19 +125,17 @@ void analogReference( eAnalogReference ulMode )
} }
} }
uint32_t analogRead( uint32_t ulPin ) uint32_t analogRead(uint32_t pin)
{ {
uint32_t valueRead = 0; uint32_t valueRead = 0;
if ( ulPin < A0 ) if (pin < A0) {
{ pin += A0;
ulPin += A0 ;
} }
pinPeripheral(ulPin, PIO_ANALOG); pinPeripheral(pin, PIO_ANALOG);
if (ulPin == A0) // Disable DAC, if analogWrite(A0,dval) used previously the DAC is enabled if (pin == A0) { // Disable DAC, if analogWrite(A0,dval) used previously the DAC is enabled
{
syncDAC(); syncDAC();
DAC->CTRLA.bit.ENABLE = 0x00; // Disable DAC DAC->CTRLA.bit.ENABLE = 0x00; // Disable DAC
//DAC->CTRLB.bit.EOEN = 0x00; // The DAC output is turned off. //DAC->CTRLB.bit.EOEN = 0x00; // The DAC output is turned off.
...@@ -156,7 +143,7 @@ uint32_t analogRead( uint32_t ulPin ) ...@@ -156,7 +143,7 @@ uint32_t analogRead( uint32_t ulPin )
} }
syncADC(); syncADC();
ADC->INPUTCTRL.bit.MUXPOS = g_APinDescription[ulPin].ulADCChannelNumber; // Selection for the positive ADC input ADC->INPUTCTRL.bit.MUXPOS = g_APinDescription[pin].ulADCChannelNumber; // Selection for the positive ADC input
// Control A // Control A
/* /*
...@@ -185,7 +172,7 @@ uint32_t analogRead( uint32_t ulPin ) ...@@ -185,7 +172,7 @@ uint32_t analogRead( uint32_t ulPin )
ADC->SWTRIG.bit.START = 1; ADC->SWTRIG.bit.START = 1;
// Store the value // Store the value
while ( ADC->INTFLAG.bit.RESRDY == 0 ); // Waiting for conversion to complete while (ADC->INTFLAG.bit.RESRDY == 0); // Waiting for conversion to complete
valueRead = ADC->RESULT.reg; valueRead = ADC->RESULT.reg;
syncADC(); syncADC();
...@@ -200,90 +187,88 @@ uint32_t analogRead( uint32_t ulPin ) ...@@ -200,90 +187,88 @@ uint32_t analogRead( uint32_t ulPin )
// hardware support. These are defined in the appropriate // hardware support. These are defined in the appropriate
// pins_*.c file. For the rest of the pins, we default // pins_*.c file. For the rest of the pins, we default
// to digital output. // to digital output.
void analogWrite( uint32_t ulPin, uint32_t ulValue ) void analogWrite(uint32_t pin, uint32_t value)
{ {
uint32_t attr = g_APinDescription[ulPin].ulPinAttribute ; uint32_t attr = g_APinDescription[pin].ulPinAttribute;
if ( (attr & PIN_ATTR_ANALOG) == PIN_ATTR_ANALOG ) if ((attr & PIN_ATTR_ANALOG) == PIN_ATTR_ANALOG)
{ {
if ( ulPin != PIN_A0 ) // Only 1 DAC on A0 (PA02) // DAC handling code
{
if (pin != PIN_A0) { // Only 1 DAC on A0 (PA02)
return; return;
} }
ulValue = mapResolution(ulValue, _writeResolution, 10); value = mapResolution(value, _writeResolution, 10);
syncDAC(); syncDAC();
DAC->DATA.reg = ulValue & 0x3FF; // DAC on 10 bits. DAC->DATA.reg = value & 0x3FF; // DAC on 10 bits.
syncDAC(); syncDAC();
DAC->CTRLA.bit.ENABLE = 0x01; // Enable DAC DAC->CTRLA.bit.ENABLE = 0x01; // Enable DAC
syncDAC(); syncDAC();
return ; return;
} }
if ( (attr & PIN_ATTR_PWM) == PIN_ATTR_PWM ) if ((attr & PIN_ATTR_PWM) == PIN_ATTR_PWM)
{ {
if (attr & PIN_ATTR_TIMER) { if (attr & PIN_ATTR_TIMER) {
#if !(ARDUINO_SAMD_VARIANT_COMPLIANCE >= 10603) #if !(ARDUINO_SAMD_VARIANT_COMPLIANCE >= 10603)
// Compatibility for cores based on SAMD core <=1.6.2 // Compatibility for cores based on SAMD core <=1.6.2
if (g_APinDescription[ulPin].ulPinType == PIO_TIMER_ALT) { if (g_APinDescription[pin].ulPinType == PIO_TIMER_ALT) {
pinPeripheral(ulPin, PIO_TIMER_ALT); pinPeripheral(pin, PIO_TIMER_ALT);
} else } else
#endif #endif
{ {
pinPeripheral(ulPin, PIO_TIMER); pinPeripheral(pin, PIO_TIMER);
} }
} else { } else {
// We suppose that attr has PIN_ATTR_TIMER_ALT bit set... // We suppose that attr has PIN_ATTR_TIMER_ALT bit set...
pinPeripheral(ulPin, PIO_TIMER_ALT); pinPeripheral(pin, PIO_TIMER_ALT);
} }
Tc* TCx = 0 ; Tc* TCx = NULL;
Tcc* TCCx = 0 ; Tcc* TCCx = NULL;
uint8_t Channelx = GetTCChannelNumber( g_APinDescription[ulPin].ulPWMChannel ) ; uint8_t Channelx = GetTCChannelNumber(g_APinDescription[pin].ulPWMChannel);
if ( GetTCNumber( g_APinDescription[ulPin].ulPWMChannel ) >= TCC_INST_NUM ) if (GetTCNumber(g_APinDescription[pin].ulPWMChannel) >= TCC_INST_NUM) {
{ TCx = (Tc*) GetTC(g_APinDescription[pin].ulPWMChannel);
TCx = (Tc*) GetTC( g_APinDescription[ulPin].ulPWMChannel ) ; } else {
} TCCx = (Tcc*) GetTC(g_APinDescription[pin].ulPWMChannel);
else
{
TCCx = (Tcc*) GetTC( g_APinDescription[ulPin].ulPWMChannel ) ;
} }
// Enable clocks according to TCCx instance to use // Enable clocks according to TCCx instance to use
switch ( GetTCNumber( g_APinDescription[ulPin].ulPWMChannel ) ) switch (GetTCNumber(g_APinDescription[pin].ulPWMChannel))
{ {
case 0: // TCC0 case 0: // TCC0
case 1: // TCC1 case 1: // TCC1
// Enable GCLK for TCC0 and TCC1 (timer counter input clock) // Enable GCLK for TCC0 and TCC1 (timer counter input clock)
GCLK->CLKCTRL.reg = (uint16_t) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID( GCM_TCC0_TCC1 )) ; GCLK->CLKCTRL.reg = (uint16_t) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID(GCM_TCC0_TCC1));
break ; break;
case 2: // TCC2 case 2: // TCC2
case 3: // TC3 case 3: // TC3
// Enable GCLK for TCC2 and TC3 (timer counter input clock) // Enable GCLK for TCC2 and TC3 (timer counter input clock)
GCLK->CLKCTRL.reg = (uint16_t) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID( GCM_TCC2_TC3 )) ; GCLK->CLKCTRL.reg = (uint16_t) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID(GCM_TCC2_TC3));
break ; break;
case 4: // TC4 case 4: // TC4
case 5: // TC5 case 5: // TC5
// Enable GCLK for TC4 and TC5 (timer counter input clock) // Enable GCLK for TC4 and TC5 (timer counter input clock)
GCLK->CLKCTRL.reg = (uint16_t) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID( GCM_TC4_TC5 )); GCLK->CLKCTRL.reg = (uint16_t) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID(GCM_TC4_TC5));
break ; break;
case 6: // TC6 (not available on Zero) case 6: // TC6 (not available on Zero)
case 7: // TC7 (not available on Zero) case 7: // TC7 (not available on Zero)
// Enable GCLK for TC6 and TC7 (timer counter input clock) // Enable GCLK for TC6 and TC7 (timer counter input clock)
GCLK->CLKCTRL.reg = (uint16_t) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID( GCM_TC6_TC7 )); GCLK->CLKCTRL.reg = (uint16_t) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID(GCM_TC6_TC7));
break ; break;
} }
while ( GCLK->STATUS.bit.SYNCBUSY == 1 ) ; while (GCLK->STATUS.bit.SYNCBUSY == 1);
ulValue = mapResolution(ulValue, _writeResolution, 8); value = mapResolution(value, _writeResolution, 8);
// Set PORT // Set PORT
if ( TCx ) if (TCx)
{ {
// -- Configure TC // -- Configure TC
...@@ -295,7 +280,7 @@ void analogWrite( uint32_t ulPin, uint32_t ulValue ) ...@@ -295,7 +280,7 @@ void analogWrite( uint32_t ulPin, uint32_t ulValue )
// Set TCx as normal PWM // Set TCx as normal PWM
TCx->COUNT8.CTRLA.reg |= TC_CTRLA_WAVEGEN_NPWM; TCx->COUNT8.CTRLA.reg |= TC_CTRLA_WAVEGEN_NPWM;
// Set TCx in waveform mode Normal PWM // Set TCx in waveform mode Normal PWM
TCx->COUNT8.CC[Channelx].reg = (uint8_t) ulValue; TCx->COUNT8.CC[Channelx].reg = (uint8_t) value;
syncTC_8(TCx); syncTC_8(TCx);
// Set PER to maximum counter value (resolution : 0xFF) // Set PER to maximum counter value (resolution : 0xFF)
TCx->COUNT8.PER.reg = 0xFF; TCx->COUNT8.PER.reg = 0xFF;
...@@ -314,29 +299,26 @@ void analogWrite( uint32_t ulPin, uint32_t ulValue ) ...@@ -314,29 +299,26 @@ void analogWrite( uint32_t ulPin, uint32_t ulValue )
TCCx->WAVE.reg |= TCC_WAVE_WAVEGEN_NPWM; TCCx->WAVE.reg |= TCC_WAVE_WAVEGEN_NPWM;
syncTCC(TCCx); syncTCC(TCCx);
// Set TCx in waveform mode Normal PWM // Set TCx in waveform mode Normal PWM
TCCx->CC[Channelx].reg = (uint32_t)ulValue; TCCx->CC[Channelx].reg = (uint32_t)value;
syncTCC(TCCx); syncTCC(TCCx);
// Set PER to maximum counter value (resolution : 0xFF) // Set PER to maximum counter value (resolution : 0xFF)
TCCx->PER.reg = 0xFF; TCCx->PER.reg = 0xFF;
syncTCC(TCCx); syncTCC(TCCx);
// Enable TCCx // Enable TCCx
TCCx->CTRLA.reg |= TCC_CTRLA_ENABLE ; TCCx->CTRLA.reg |= TCC_CTRLA_ENABLE;
syncTCC(TCCx); syncTCC(TCCx);
} }
return ; return;
} }
// -- Defaults to digital write // -- Defaults to digital write
pinMode( ulPin, OUTPUT ) ; pinMode(pin, OUTPUT);
ulValue = mapResolution(ulValue, _writeResolution, 8); value = mapResolution(value, _writeResolution, 8);
if ( ulValue < 128 ) if (value < 128) {
{ digitalWrite(pin, LOW);
digitalWrite( ulPin, LOW ) ; } else {
} digitalWrite(pin, HIGH);
else
{
digitalWrite( ulPin, HIGH ) ;
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment