возникала непонятка с burst режимом в LPC1768:
включен 1 вход, подключенный к потенциометру, данные с его регистра рещультата переписываются в ЦАП.
Кручу потенциометр и смотрю осциллографом выход ЦАПа - там все меняется о 0 до 3в, но - периодически проскакивают ипульсы, то вверх то вниз, колеблящейся амплитуды, доходящей до 0 и до питания.
Если ставлю потенциометр в 0, то на выходе ЦАПа ноль, с положительными импульсами, если ставлю потенциометр в макс - на вхыоде 3в и импульсами до нуля (не всегда. амплитуд дрожит).
Длительность импульсов около 8мкс.
Про работает на 100мгц, частота периферии вся 1/4. В программе работает только прерывание SysTick и мертвый цикл в мейне:
Код такой:
Код
//------------------------------------------------------------------------------
void ADC_Init (void) {
LPC_PINCON->PINSEL3 &= ~(3UL<<30); /* P1.31 is GPIO */
LPC_PINCON->PINSEL3 |= (3UL<<30); /* P1.31 is AD0.5 */
LPC_SC->PCONP |= (1<<12); /* Enable power to ADC block */
LPC_ADC->ADCR = (1<< 5) | /* select AD0.5 pin */
(4<< 8) | /* ADC clock is 25MHz */
(1<<16) | // burst mode
(1<<21); /* enable ADC */
}
//--------------------------------------------------------------------------------
void DAC_Init(void){
LPC_PINCON->PINSEL1 |= (2UL<<20); /* set p0.26 to DAC output */
LPC_DAC->DACCTRL |=(1<<1); // dowble buffer
}
//--------------------------------------------------------------------------------
int main(void){
if (SysTick_Config(SystemCoreClock / 1000)) { // Setup SysTick Timer for 1 msec interrupts
while (1); // Capture error
}
halPORTS_Config(); // конфигурирование портов
DAC_Init();
ADC_Init();
while(1){
LPC_DAC->DACR = 0xFFC0 & LPC_ADC->ADDR5;
}
}
Да, в периоде этих пичков я никакой закономерности не увидел.
Проблема точно в АЦП, т.к. если я просто постоянно пишщу в ЦАП констанку, то на выходе пичков нет.
Возможно это из-за асинхронного (по сравнению с конверсией) чтения регистра результата АЦП, но тогда я не очень понимаю как барст должен работать. Я полагал что его можно читать в произвольный момент времени.