Хочу включить BURST режим, чтобы автоматически молотилось измерение по очереди несколько
аналоговых входов и получать из регистров AD0DR0 ... AD0DR3 последние измеренные напряжения
на входах АЦП по состоянию на момент чтения из регистра.
Но получаю данные только с канала AD0.0, по всем остальным - нули, независимо от приложенного к
входам напряжения...
Ниже фрагмент кода, относящийся к АЦП:
CODE
void InitADC( void )
{
PCONP |= (1 << 12);
PINSEL1 =0;
PINSEL1 |= 0x154000;
AD0CR = 0x3f |
( ( Fpclk / 1000000 - 1 ) << 8 ) | // CLKDIV = Fpclk / 1000000 - 1
( 1 << 16 ) | // BURST = 1
( 0 << 17 ) | // CLKS = 000
( 1 << 21 ) | // PDN = 1
( 0 << 22 ) | // TEST1:0 = 00
( 0 << 24 ) | // START = 000
( 0 << 27 ); // EDGE = 0
return;
}
int main(void)
{
IODIR0 =0x80000000 | (1<<29) | (1<<30) | (1<<17) | (1<<14) | (1<<31);
PINSEL1=0x14000;
InitUART ();
InitADC();
install_irq( UART0_INT, (void *)Uart0Interrupt, HIGHEST_PRIORITY );
init_timer( 0, TIME_INTERVAL_100us );
enable_timer(0);
AD0CR |= 0x01000000;
IOSET0 = (1<<17); // CS_RES_X7=1
IOSET0 = (1<<14); // CS_PLL_X10=1
while(1)
{
IntRegOut[0]= 0x3ff & (AD0DR0 >> 6);
IntRegOut[1]= 0x3ff & (AD0DR1 >> 6);
sprintf(qtext,"AD0.0=%d ", IntRegOut[0]);
UARTTextOut(qtext);
sprintf(qtext,"AD0.1=%d ", IntRegOut[1]);
UARTTextOut(qtext);
sprintf(qtext,"\n", IntRegOut[1]);
UARTTextOut(qtext);
delayMs(1,1000);
}
} // main