Пробую измерять напряжение с помощью встроенного АЦП в бесконечном цикле с помощью следующего кода:
Код
while(1)
{
LPC_ADC -> ADCR |= (0x1)<<24;
while((LPC_ADC->ADDR2 & (1 << 31)) == 0);
temp = LPC_ADC -> ADDR2 & 0xfff0;
LPC_ADC -> ADCR &= ~((0x1)<<24);
}
В итоге, после нескольких секунд программа зависает на ожидании окончания измерения (2-я строчка, while((LPC_ADC->ADDR2 & (1 << 31)) == 0){
LPC_ADC -> ADCR |= (0x1)<<24;
while((LPC_ADC->ADDR2 & (1 << 31)) == 0);
temp = LPC_ADC -> ADDR2 & 0xfff0;
LPC_ADC -> ADCR &= ~((0x1)<<24);
}

Вот дизассемблерный листинг участка кода ожидания окончания измерения:
Код
63: temp = LPC_ADC -> ADDR2 & 0xfff0;
0x00002544 4807 LDR r0,[pc,#28] ; @0x00002564
0x00002546 6980 LDR r0,[r0,#0x18]
0x00002548 F64F71F0 MOVW r1,#0xFFF0
0x0000254C 4008 ANDS r0,r0,r1
0x0000254E 9001 STR r0,[sp,#0x04]
64: LPC_ADC -> ADCR &= ~((0x1)<<24);
0x00002544 4807 LDR r0,[pc,#28] ; @0x00002564
0x00002546 6980 LDR r0,[r0,#0x18]
0x00002548 F64F71F0 MOVW r1,#0xFFF0
0x0000254C 4008 ANDS r0,r0,r1
0x0000254E 9001 STR r0,[sp,#0x04]
64: LPC_ADC -> ADCR &= ~((0x1)<<24);
В чем может быть причина зависания?