Больше 300 получить не удается от внешнего синхро импульса на ADTRG Что не так?
// --------------- определения ---------------------------------- #define TRGEN (0x1) //Hardware triggering/ #define TRGSEL (0x6) // Use a Timer output signal (on rising edge) from TIOA0 (for this example)/ #define LOWRES (0x0) // 10-bit result output / #define SLEEP (0x0) // Normal Mode #define PRESCAL (0x4) // 0x5 - 5,0029714 MHz Max value #define STARTUP (0xFF) //OK This time period must be higher than 20 µs and not 20 ms/ #define SHTIM (0x3) //OK Must be higher than 3 ADC clock cycles but depends on output/ // impedance of the analog driver to the ADC input/*/
/* for 49371428 Hz: ******************************************* PRESCAL (0x4) - 4,937142 MHz // ADCclock - 4937142,8 STARTUP = 1,620 uS SHTIM (0x2) - 0,607 uS SHTIM (0x3) - 0,811 uS ****************************************** */
//****************************************** //---------------------- инициализация ---------------------------------------- // First, enable the clock of the PIOB AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA ) ; // config pin func A , B// , SPI, ADC AT91F_PIO_CfgPeriph (AT91C_BASE_PIOA, AT91C_PA12_MISO | AT91C_PA13_MOSI | AT91C_PA14_SPCK /* A */ , AT91C_PA8_ADTRG);/* B */ //---------------------------ADC ini ----------------------------------- // Clear all previous setting and result AT91F_ADC_SoftReset (AT91C_BASE_ADC);
// First Step: Set up by using ADC Mode register AT91F_ADC_CfgModeReg (AT91C_BASE_ADC, (SHTIM << 24) | (STARTUP << 16) | (PRESCAL << 8) | (SLEEP << 5) | (LOWRES <<4) | (TRGSEL << 1) | (TRGEN )) ; //* \brief Enable Peripheral clock in PMC for ADC AT91F_ADC_CfgPMC ();
// Second Step: Select the active channel AT91F_ADC_EnableChannel (AT91C_BASE_ADC, (1<<CHANNEL_AD)); //-------------------------------------------------------------- //****************************************** -------------------- Собственно измерения в цикле -------------------- while (!((AT91F_ADC_GetStatus (AT91C_BASE_ADC)) & (1<<CHANNEL_AD))); /* Read the ADC output value */ ADC_bufer[m][n]=AT91F_ADC_GetLastConvertedData(AT91C_BASE_ADC); // или чтение канала // // пробовал через PDC - тоже самое //******************************************
Проверял путем подачи пилы с периодом 70 мкс при клоке более ~307 кHz "сьедается" половина сэмплов
Естественно, пробовал по разному, но, видимо что-то не допер
Сообщение отредактировал vv95 - Sep 10 2007, 09:53
|