Skip to content

Commit 65c543f

Browse files
madrangfacchinm
authored andcommitted
Fix adc_configure_trigger enabling and disabling FreeRun Fix changing trigger type
1 parent 7c7dd6e commit 65c543f

File tree

1 file changed

+24
-3
lines changed
  • system/libsam/source

1 file changed

+24
-3
lines changed

system/libsam/source/adc.c

+24-3
Original file line numberDiff line numberDiff line change
@@ -192,18 +192,39 @@ void adc_set_resolution(Adc *p_adc,const enum adc_resolution_t resolution)
192192
void adc_configure_trigger(Adc *p_adc, const enum adc_trigger_t trigger,
193193
uint8_t uc_freerun)
194194
{
195-
p_adc->ADC_MR |= trigger | ((uc_freerun << 7) & ADC_MR_FREERUN);
195+
//Warning ADC_MR_TRGSEL_Msk does not include ADC_MR_TRGEN.
196+
p_adc->ADC_MR &= ~(ADC_MR_TRGEN | ADC_MR_TRGSEL_Msk | ADC_MR_FREERUN); //Clear all bits related to triggers and freerun
197+
198+
//Configure FreeRun
199+
if(uc_freerun & ADC_MR_FREERUN == ADC_MR_FREERUN_ON) { //FreeRun is enabled
200+
p_adc->ADC_MR |= ADC_MR_FREERUN_ON;
201+
202+
//Free Run Mode: Never wait for any trigger
203+
//No need to continue and enable hardware triggers
204+
return;
205+
}
206+
207+
//Configure hardware triggers
208+
if(trigger & ADC_MR_TRGEN == ADC_MR_TRGEN_EN) { //Hardware trigger is enabled
209+
p_adc->ADC_MR |= (trigger & ADC_MR_TRGSEL_Msk) | ADC_MR_TRGEN_EN; //Set trigger selection bits and enable hardware trigger
210+
}
196211
}
197212
#elif SAM3U_SERIES
198213
/**
199-
* \brief Configure conversion trigger and free run mode.
214+
* \brief Configure conversion trigger.
200215
*
201216
* \param p_adc Pointer to an ADC instance.
202217
* \param trigger Conversion trigger.
203218
*/
204219
void adc_configure_trigger(Adc *p_adc, const enum adc_trigger_t trigger)
205220
{
206-
p_adc->ADC_MR |= trigger;
221+
//Warning ADC_MR_TRGSEL_Msk does not include ADC_MR_TRGEN.
222+
p_adc->ADC_MR &= ~(ADC_MR_TRGEN | ADC_MR_TRGSEL_Msk); //Clear all bits related to triggers
223+
224+
//Configure hardware triggers
225+
if(trigger & ADC_MR_TRGEN == ADC_MR_TRGEN_EN) { //Hardware trigger is enabled
226+
p_adc->ADC_MR |= (trigger & ADC_MR_TRGSEL_Msk) | ADC_MR_TRGEN_EN; //Set trigger selection bits and enable hardware trigger
227+
}
207228
}
208229
#endif
209230

0 commit comments

Comments
 (0)