I needed set sampling frequency = 25 KHz .
I used the sequinte code:
int ACTUAL_ADC_CLK;
void setup() {
Serial.begin(9600);
analogReadResolution(12);
//uint32_t adc_init(Adc *p_adc, const uint32_t ul_mck, const uint32_t ul_adc_clock, const uint32_t ul_startuptime)
// ul_mck Main clock of the device (value in Hz).
// ul_adc_clock Analog-to-Digital conversion clock (in Hz).
//ul_startuptime ADC startup time value (value in us).
I do not know
the program must return the value of adc clock in Hz, ie should return 25000 and not 291666.
removing the following line of code (adc_init (ADC, SystemCoreClock, 25000, 12) the return value would be 21000000 since it is the maximum frequency adc.
I think the clock in adc arduino due is limited to 164kHz.
the manual of arduino due says:
"The ADC clock range is between MCK/2, if PRESCAL is 0, and MCK/512, if PRESCAL is set to
255 (0xFF). PRESCAL must be programmed in order to provide an ADC clock frequency
according to the parameters given in the product Electrical Characteristics section."
I overlooked you quote from the Atmel's manual but I believe you already gave yourself the answer: ADC can't be 25KHz. ADC minimum possible value is MCK/255 and the maximum is MCK/2. For 25000, your Master Clock Frequency should be 6375000. The function sysclk_get_main_hz() gives you the MCK for the SAM3X8E which is 84000000 (12nS). Thus, your desire ADC clock can be reached. May be we could help you a bit more if you tell us why you need 25KHz for your ADC clock? Regards!
In a dedicated logic, given your current ADC clock (291666Hz), you should read the analog input 500 times per cycle using delayMicroseconds(11) between readings.