Здравствуйте!
Пробую измерять напряжение с помощью встроенного АЦП в бесконечном цикле с помощью следующего кода:
Код
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)

. Все прерывания запрещены. Тактовая PCLK_ADC0 83.33 МГц, тактовая АЦП 83/16=5.208 МГц. Отлаживаю с помощью клона J-link.
Вот дизассемблерный листинг участка кода ожидания окончания измерения:
Код
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);
В чем может быть причина зависания?