LPC2142: не удается запустить ADC Запускаю преобразование по совпадению MAT1.0. По завершению преобразования генерится прерывание, в прерывании полученное значение АЦП шлю в УАРТ. Всё по букварю делаю, пин подключен к модулю АЦП... но получаю какую-то ерунду на выходе никак не зависящую от сигнала на входе
<pre>
void T1_setup(void)
{
FIO0DIR |= BIT(12);
PINSEL0 = (PINSEL0 & ~(BIT(25) | BIT(24))) | BIT(25); // P0.12 as Match 1.0 signal
T1TCR = 2; // stop & reset T0
T1PR = 0;
T1MR0 = PCLK / F_ADC / 2 + 0.5;
T1MCR = BIT(1); // Reset on MR1: the TC will be reset if MR1 matches it.
T1EMR = (3 << 4) | BIT(0); // toggle External Match bit/output to 1 on match.
T1TCR = 1; // run T0
}
void ADC_setup(void)
{
AD0INTEN = 0;
FIO0DIR |= BIT(22);
PINSEL1 = (PINSEL1 & ~(BIT(27) | BIT(26))) | BIT(26); // Activate P0.29 as ADC
// AD0.3 is sampled by rising edge on the MAT1.0 signal
AD0CR = BIT(21) | ((PCLK / 4000000 - 1) << 8) | BIT(2);
VICVectAddr0 = (unsigned int)&AD0_ISR;
VICVectCntl0 = 0x20 | VIC_AD0;
VICIntEnable |= BIT(VIC_AD0);
AD0INTEN = BIT(2);
AD0CR |= (0x6 << 24);
}
#pragma type_attribute = __arm
void AD0_ISR(void)
{
u32 result;
FIO0SET = BIT(22);
while (U0LSR & ULSR_THRE == 0);
U0THR = (AD0DR2 >> 8) & 0xFF;
FIO0CLR = BIT(22);
}
</pre>
Ничего не понимаю... Может кто глянет свежим взглядом, мой, видимо, замылился