这是我的代码
#include "LPC17xx.h" // Device header
#include "GPIO_LPC17xx.h" // Keil::Device:GPIO
uint32_t voltag1 = 0 ;
uint32_t voltag2 = 0 ;
volatile uint32_t adstat;
int blink=1;
int main()
{
//Config timer
LPC_TIM1->MCR=2;
LPC_TIM1->MR0=20000000; //Match Resgister
LPC_TIM1->TCR=1;
LPC_TIM1->EMR = 0x00000030 ;
//Config ADC
LPC_PINCON->PINSEL1 |= (1 << 14) | (1 << 16); // connect pin to ADC
LPC_SC->PCONP |= ((1 << 12)); //enable power of ADC
LPC_ADC->ADCR = 0x06202001; //initialaze ADC
LPC_ADC->ADINTEN = 0x00000100; // global interup
NVIC_EnableIRQ(ADC_IRQn);
GPIO_SetDir(3,25,GPIO_DIR_OUTPUT);
while(1) {}
}
void ADC_IRQHandler(void)
{
adstat = LPC_ADC->ADSTAT; /* Read ADC clears interrupt */
blink++;
GPIO_PinWrite(3,25,blink%2);
voltag1 = (LPC_ADC->ADGDR >> 4) & 0xFFF;
//voltag2 = (LPC_ADC->ADDR1 >> 4) & 0xFFF;
}当我使用LPC_ADC->ADGDR时,它工作正常,但当我使用LPC_ADC->ADDR1时,它不工作,为什么?
我使用MAT作为ADC接口。
当我使用LPC_ADC->ADGDR时,一切正常。
但是当我使用LPC_ADC->ADDR1进行读取时,它不工作,并且不随边框变化
发布于 2015-06-20 01:58:16
你的代码中有太多的魔术数字。请对所有这些位使用相应的定义。这段代码是不可读的。
您的代码中有一个错误的注释,ADGDR的中断标志在ADSTAT读取时未被清除。只有读取ADGDR才能清除它,这就是您的代码不能与ADDR1一起工作的原因。
如果您使用该定义来设置ADINTEN,您可能会更早地发现错误。该标志名为ADGDINTEN,仅对应于ADGDR中的标志。
发布于 2015-09-04 04:05:49
您应该通过以下方式启用ch1的IRQ:
LPC_ADC->ADINTEN = 1 << 1; //0x0002 https://stackoverflow.com/questions/30864331
复制相似问题