ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
24 ноября
40674
Fish (04.10.2005 09:49, просмотров: 511)
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> Ничего не понимаю... Может кто глянет свежим взглядом, мой, видимо, замылился