|
发表于 2013-12-6 18:07:09
|
显示全部楼层
BURST 我也调不通。
就直接使用中断方式
void adcInit (void)
{
uint32_t ulTemp;
LPC_SC->PCONP |= 1 << 12; /* 打开ADC的功率控制位 */
LPC_PINCON->PINSEL1 &=~((0x03 << 14) | (0x03 << 16) |(0x03 << 18) |(0x03 << 20));
LPC_PINCON->PINSEL1 |= (0x01 << 14) | (0x01 << 16) |(0x01 << 18) |(0x01 << 20); /* P0 23 24 25 26 */
ulTemp = (25000000 / (1000000))-1;
ulTemp = 0 /* 选择AD0.0 1,2,3为AD输入引脚 */
|( ulTemp << 8) /* 转换时钟为13MHz */
|(0 << 16) /* BURST=0,不使用Burst模式 */
|(0 << 17)
|(1 << 21) /* PDN = 1,正常工作模式 */
|(0 << 24) /* START=0,在Burst模式下, */
|(0 << 25) /* 起始位(bit24~26)必须为0 */
|(0 << 26);
LPC_ADC->ADCR = ulTemp;
LPC_ADC->ADINTEN = 1<<8; /* 通道0,1,2,3中断使能 */
NVIC_EnableIRQ(ADC_IRQn);
NVIC_SetPriority(ADC_IRQn, 8);
LPC_ADC->ADCR |= 1 << 24;
}
void ADC_IRQHandler(void)
{
u32 value=0;
value = LPC_ADC->ADDR0; /* 读取通道0的值 */
value = (value >> 4) & 0xfff;
ulADCbuf[0] = (value*3300)/4096;
value = LPC_ADC->ADDR1; /* 读取通道1的值 */
value = (value >> 4) & 0xfff;
ulADCbuf[1] = (value*3300)/4096;
value = LPC_ADC->ADDR2; /* 读取通道2的值 */
value = (value >> 4) & 0xfff;
ulADCbuf[2] = (value*3300)/4096;
value = LPC_ADC->ADDR3; /* 读取通道3的值 */
value = (value >> 4) & 0xfff;
ulADCbuf[3] = (value*3300)/4096;
if(Adc_Chanel<4)
{
LPC_ADC->ADCR &=~((1 << 0)|(1 << 1)|(1 << 2)|(1 << 3));
LPC_ADC->ADCR |=1<<Adc_Chanel;
Adc_Chanel++;
}
else
{
Adc_Chanel=0;
}
}
|
|