首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模数转换器LPC1768简单版

模数转换器LPC1768简单版
EN

Stack Overflow用户
提问于 2015-06-16 17:57:12
回答 2查看 1.3K关注 0票数 0

这是我的代码

代码语言:javascript
复制
#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进行读取时,它不工作,并且不随边框变化

EN

回答 2

Stack Overflow用户

发布于 2015-06-20 01:58:16

你的代码中有太多的魔术数字。请对所有这些位使用相应的定义。这段代码是不可读的。

您的代码中有一个错误的注释,ADGDR的中断标志在ADSTAT读取时未被清除。只有读取ADGDR才能清除它,这就是您的代码不能与ADDR1一起工作的原因。

如果您使用该定义来设置ADINTEN,您可能会更早地发现错误。该标志名为ADGDINTEN,仅对应于ADGDR中的标志。

票数 0
EN

Stack Overflow用户

发布于 2015-09-04 04:05:49

您应该通过以下方式启用ch1的IRQ:

代码语言:javascript
复制
LPC_ADC->ADINTEN =  1 << 1;  //0x0002  
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30864331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档