Hi,
I have been working on a project where I am supposed to implement RNG using ADC. The problem is, that I cannot get ADC to work using LPCOpen or registers. Everything is well otherwise, but the status bit never goes to 1, so the program gets stuck in loop waiting for it.
ADC code using registers:
LPC_SYSCTL->PCONP |= (1 << 12) | (1 << 15); // Power/Clock ON
LPC_ADC->CR = 7 | (3 << 8) | (1 << 16) | (1 << 21);
Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 23, (IOCON_FUNC1 | IOCON_MODE_INACT | IOCON_ADMODE_EN));
Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 24, (IOCON_FUNC1 | IOCON_MODE_INACT | IOCON_ADMODE_EN));
Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 25, (IOCON_FUNC1 | IOCON_MODE_INACT | IOCON_ADMODE_EN));
Uint32 data = 0;
do{
data = LPC_ADC->DR[0];
}while((data & 1<<31) == 0);
data = data >> 4;
data = data & 0xFFF;
ADC code using LPCOpen:
static ADC_CLOCK_SETUP_T ADCSetup;
Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 23, (IOCON_FUNC1 | IOCON_MODE_INACT | IOCON_ADMODE_EN));
Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 24, (IOCON_FUNC1 | IOCON_MODE_INACT | IOCON_ADMODE_EN));
Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 25, (IOCON_FUNC1 | IOCON_MODE_INACT | IOCON_ADMODE_EN));
Chip_ADC_Init(LPC_ADC, &ADCSetup);
Chip_ADC_SetSampleRate(LPC_ADC, &ADCSetup, ADC_MAX_SAMPLE_RATE);
Chip_ADC_SetBurstCmd(LPC_ADC, LPC_ENABLE);
Chip_ADC_EnableChannel(LPC_ADC, ADC_CH0, LPC_ENABLE);
Chip_ADC_EnableChannel(LPC_ADC, ADC_CH1, LPC_ENABLE);
Chip_ADC_EnableChannel(LPC_ADC, ADC_CH2, LPC_ENABLE);
uint16_t data0, data1, data2;
while (Chip_ADC_ReadStatus(LPC_ADC, ADC_CH0, ADC_DR_DONE_STAT) != SET);
Chip_ADC_ReadValue(LPC_ADC, ADC_CH0, &data0);
while (Chip_ADC_ReadStatus(LPC_ADC, ADC_CH1, ADC_DR_DONE_STAT) != SET);
Chip_ADC_ReadValue(LPC_ADC, ADC_CH1, &data0);
while (Chip_ADC_ReadStatus(LPC_ADC, ADC_CH2, ADC_DR_DONE_STAT) != SET);
Chip_ADC_ReadValue(LPC_ADC, ADC_CH2, &data2);