Skip to content

Commit c0c9ba0

Browse files
committed
DM: fixed DAC, SPI
1 parent c0272da commit c0c9ba0

File tree

5 files changed

+23
-23
lines changed

5 files changed

+23
-23
lines changed

cores/arduino/startup.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ void SystemInit( void )
150150
while( OSCCTRL->Dpll[0].DPLLSTATUS.bit.CLKRDY == 0 || OSCCTRL->Dpll[0].DPLLSTATUS.bit.LOCK == 0 );
151151

152152
//PLL1 is 100MHz
153-
OSCCTRL->Dpll[1].DPLLRATIO.reg = OSCCTRL_DPLLRATIO_LDRFRAC(0xc) | OSCCTRL_DPLLRATIO_LDR(0xbea); //120 Mhz
153+
OSCCTRL->Dpll[1].DPLLRATIO.reg = OSCCTRL_DPLLRATIO_LDRFRAC(0xc) | OSCCTRL_DPLLRATIO_LDR(0xbea); //100 Mhz
154154

155155
while(OSCCTRL->Dpll[1].DPLLSYNCBUSY.bit.DPLLRATIO);
156156

cores/arduino/wiring.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ void init( void )
108108
// Initialize Analog Controller
109109
// Setting clock
110110
#if defined(__SAMD51__)
111-
GCLK->PCHCTRL[ADC0_GCLK_ID].reg = GCLK_PCHCTRL_GEN_GCLK2_Val | (1 << GCLK_PCHCTRL_CHEN_Pos); //use clock generator 0
111+
GCLK->PCHCTRL[ADC0_GCLK_ID].reg = GCLK_PCHCTRL_GEN_GCLK1_Val | (1 << GCLK_PCHCTRL_CHEN_Pos); //use clock generator 1 (48Mhz)
112112

113113
ADC0->CTRLA.bit.PRESCALER = ADC_CTRLA_PRESCALER_DIV256_Val;
114114
ADC0->CTRLB.bit.RESSEL = ADC_CTRLB_RESSEL_10BIT_Val;
@@ -131,7 +131,7 @@ void init( void )
131131

132132
analogReference( AR_DEFAULT ) ; // Analog Reference is AREF pin (3.3v)
133133

134-
GCLK->PCHCTRL[DAC_GCLK_ID].reg = GCLK_PCHCTRL_GEN_GCLK2_Val | (1 << GCLK_PCHCTRL_CHEN_Pos); //use clock generator 0
134+
GCLK->PCHCTRL[DAC_GCLK_ID].reg = GCLK_PCHCTRL_GEN_GCLK1_Val | (1 << GCLK_PCHCTRL_CHEN_Pos); //use clock generator 1 (48mhz)
135135
while (GCLK->PCHCTRL[DAC_GCLK_ID].bit.CHEN == 0);
136136

137137
while ( DAC->SYNCBUSY.bit.SWRST == 1 ); // Wait for synchronization of registers between the clock domains

cores/arduino/wiring_analog.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ static int _ADCResolution = 10;
2828
static int _writeResolution = 8;
2929

3030
#if defined(__SAMD51__)
31-
static int _dacResolution = 10;
31+
static int _dacResolution = 12;
3232
#else
3333
static int _dacResolution = 8;
3434
#endif
@@ -348,7 +348,7 @@ void analogWrite(uint32_t pin, uint32_t value)
348348
return;
349349
}
350350

351-
//value = mapResolution(value, _dacResolution, 10);
351+
value = mapResolution(value, _writeResolution, _dacResolution);
352352

353353
#if defined(__SAMD51__)
354354
uint8_t channel = (pin == PIN_A0 ? 0 : 1);
@@ -387,6 +387,7 @@ void analogWrite(uint32_t pin, uint32_t value)
387387

388388

389389
#else
390+
value = mapResolution(value, _dacResolution, 10);
390391
syncDAC();
391392
DAC->DATA.reg = value & 0x3FF; // DAC on 10 bits.
392393
syncDAC();
@@ -399,7 +400,6 @@ void analogWrite(uint32_t pin, uint32_t value)
399400

400401
if ((attr & PIN_ATTR_PWM) == PIN_ATTR_PWM)
401402
{
402-
value = mapResolution(value, _writeResolution, 8);
403403

404404
uint32_t tcNum = GetTCNumber(pinDesc.ulPWMChannel);
405405
uint8_t tcChannel = GetTCChannelNumber(pinDesc.ulPWMChannel);

variants/metro_m4/variant.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ const PinDescription g_APinDescription[]=
112112
{ PORTA, 17, PIO_TIMER_ALT, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM1_CH1, NOT_ON_TIMER, EXTERNAL_INT_7 },
113113
{ PORTA, 18, PIO_TIMER_ALT, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM1_CH2, NOT_ON_TIMER, EXTERNAL_INT_2 },
114114
{ PORTA, 19, PIO_TIMER_ALT, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM1_CH3, NOT_ON_TIMER, EXTERNAL_INT_3 },
115-
{ PORTA, 12, PIO_TIMER_ALT, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM1_CH4, NOT_ON_TIMER, EXTERNAL_INT_4 },
115+
{ PORTA, 20, PIO_TIMER_ALT, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM1_CH4, NOT_ON_TIMER, EXTERNAL_INT_4 },
116116

117117
// 13 (LED)
118118
{ PORTA, 21, PIO_TIMER_ALT, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), No_ADC_Channel, PWM1_CH5, NOT_ON_TIMER, EXTERNAL_INT_5 },
@@ -140,8 +140,8 @@ const PinDescription g_APinDescription[]=
140140
// 26..28 - SPI pins (ICSP:MISO,SCK,MOSI)
141141
// ----------------------
142142
{ PORTA, 15, PIO_SERCOM_ALT, PIN_ATTR_NONE, No_ADC_Channel, PWM2_CH1, TCC2_CH1, EXTERNAL_INT_15 },
143-
{ PORTA, 14, PIO_SERCOM_ALT, PIN_ATTR_NONE, No_ADC_Channel, PWM0_CH7, TCC0_CH7, EXTERNAL_INT_13 },
144-
{ PORTA, 12, PIO_SERCOM_ALT, PIN_ATTR_NONE, No_ADC_Channel, PWM0_CH6, TCC0_CH6, EXTERNAL_INT_12 },
143+
{ PORTA, 12, PIO_SERCOM_ALT, PIN_ATTR_NONE, No_ADC_Channel, PWM0_CH7, TCC0_CH7, EXTERNAL_INT_12 },
144+
{ PORTA, 13, PIO_SERCOM_ALT, PIN_ATTR_NONE, No_ADC_Channel, PWM0_CH6, TCC0_CH6, EXTERNAL_INT_13 },
145145

146146
// 29..30 - RX/TX LEDS (PB06/PA27)
147147
// --------------------

variants/metro_m4/variant.h

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -136,25 +136,25 @@ static const uint8_t ATN = PIN_ATN;
136136
*/
137137
#define SPI_INTERFACES_COUNT 2
138138

139-
#define PIN_SPI_MISO (28u)
140-
#define PIN_SPI_MOSI (29u)
141-
#define PIN_SPI_SCK (30u)
139+
#define PIN_SPI_MISO (26u)
140+
#define PIN_SPI_MOSI (28u)
141+
#define PIN_SPI_SCK (27u)
142142
#define PERIPH_SPI sercom4
143-
#define PAD_SPI_TX SPI_PAD_0_SCK_3
144-
#define PAD_SPI_RX SERCOM_RX_PAD_2
143+
#define PAD_SPI_TX SPI_PAD_0_SCK_1
144+
#define PAD_SPI_RX SERCOM_RX_PAD_3
145145

146146
static const uint8_t SS = PIN_A2 ; // SERCOM4 last PAD is present on A2 but HW SS isn't used. Set here only for reference.
147147
static const uint8_t MOSI = PIN_SPI_MOSI ;
148148
static const uint8_t MISO = PIN_SPI_MISO ;
149149
static const uint8_t SCK = PIN_SPI_SCK ;
150150

151-
152-
#define PIN_SPI1_MISO (36u)
153-
#define PIN_SPI1_MOSI (37u)
154-
#define PIN_SPI1_SCK (38u)
151+
//TODO: we may have to move SPI1 (SPI flash) to another sercom
152+
#define PIN_SPI1_MISO (34u)
153+
#define PIN_SPI1_MOSI (35u)
154+
#define PIN_SPI1_SCK (36u)
155155
#define PERIPH_SPI1 sercom5
156-
#define PAD_SPI1_TX SPI_PAD_2_SCK_3
157-
#define PAD_SPI1_RX SERCOM_RX_PAD_1
156+
#define PAD_SPI1_TX SPI_PAD_0_SCK_1
157+
#define PAD_SPI1_RX SERCOM_RX_PAD_3
158158

159159
static const uint8_t SS1 = 39 ; // HW SS isn't used. Set here only for reference.
160160
static const uint8_t MOSI1 = PIN_SPI_MOSI ;
@@ -178,9 +178,9 @@ static const uint8_t SCL = PIN_WIRE_SCL;
178178
/*
179179
* USB
180180
*/
181-
#define PIN_USB_HOST_ENABLE (33ul)
182-
#define PIN_USB_DM (34ul)
183-
#define PIN_USB_DP (35ul)
181+
#define PIN_USB_HOST_ENABLE (31ul)
182+
#define PIN_USB_DM (32ul)
183+
#define PIN_USB_DP (33ul)
184184

185185
/*
186186
* I2S Interfaces

0 commit comments

Comments
 (0)