Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Bug in adc_configure_trigger for Arduino Due #1819

Closed
Assignees
Labels
Board: Arduino DueApplies only to the Due Component: CoreRelated to the code for the standard Arduino API
@madrang

Description

In https://github.com/arduino/Arduino/blob/ide-1.5.x/hardware/arduino/sam/system/libsam/source/adc.c

/**
 * \brief Configure conversion trigger and free run mode.
 *
 * \param p_adc Pointer to an ADC instance.
 * \param trigger Conversion trigger.
 * \param uc_freerun ADC_MR_FREERUN_ON enables freerun mode,
 * ADC_MR_FREERUN_OFF disables freerun mode.
 *
 */
void adc_configure_trigger(Adc *p_adc, const enum adc_trigger_t trigger,
 uint8_t uc_freerun)
{
 p_adc->ADC_MR |= trigger | ((uc_freerun << 7) & ADC_MR_FREERUN);
}

ADC_MR_FREERUN_ON == 0x80
ADC_MR_FREERUN_OFF == 0x00

Running the following on a due show the problem

 Serial.begin(115200);
 Serial.print("ADC->ADC_MR == ");
 Serial.println(ADC->ADC_MR);
 //Should enable FreeRun but it will not.
 adc_configure_trigger(ADC, ADC_TRIG_SW, ADC_MR_FREERUN_ON);
 Serial.print("ADC->ADC_MR == ");
 Serial.println(ADC->ADC_MR);
 //This call properly enables FreeRun
 ADC->ADC_MR |= ADC_MR_FREERUN_ON; // DAC in free running mode.
 Serial.print("ADC->ADC_MR == ");
 Serial.println(ADC->ADC_MR);
 //This should disable FreeRun but it will not.
 adc_configure_trigger(ADC, ADC_TRIG_SW, ADC_MR_FREERUN_OFF);
 Serial.print("ADC->ADC_MR == ");
 Serial.println(ADC->ADC_MR);

Edit: Updated my sketch to include

 int ADCMR = ADC->ADC_MR;
 adc_configure_trigger(ADC, ADC_TRIG_SW, ADC_MR_FREERUN_ON); // DAC in free running mode.
 //Temporary bug fix
 if(ADCMR == ADC->ADC_MR) {
 Serial.println("Bug with adc_configure_trigger, See https://github.com/arduino/Arduino/issues/1819 for more information.");
 ADC->ADC_MR |= ADC_MR_FREERUN_ON; // DAC in free running mode.
 }

Metadata

Metadata

Assignees

Labels

Board: Arduino DueApplies only to the Due Component: CoreRelated to the code for the standard Arduino API

Type

No type

Projects

No projects

Milestone

No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      AltStyle によって変換されたページ (->オリジナル) /