打印
[ARM入门]

新手关于LPC2103的AD转换问题

[复制链接]
1018|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
starpopular|  楼主 | 2015-6-26 15:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include"LPC2103.h"
#include"led.h"
#include "config.h"
#include <stdarg.h>
#define uchar unsigned char
#define uint unsigned int
uint32 ADC_Data;
uint32  ADC_Data,data,t,x,temp;


void    delay_50us(t)
{uint32 i;
for(;t>0;t--){
for(i=0;i<5000;i++);
}
}





uint32  read_ad(void)
{  


        PINSEL1=0x00003000;                          // 设置P0.27连接到AIN0
   



    ADCR = (1 << 0)                     |                // SEL = 1 ,选择通道0
           ((Fpclk / 1000000 - 1) << 8) |                 // CLKDIV = Fpclk / 1000000 - 1 ,即转换时钟为1MHz
           (0 << 16)                    |                // BURST = 0 ,软件控制转换操作
           (0 << 17)                    |                 // CLKS = 0 ,使用11clock转换
           (1 << 21)                    |                 // PDN = 1 , 正常工作模式(非掉电转换模式)
           (0 << 22)     |                 // TEST1:0 = 00 ,正常工作模式(非测试模式)
           (1 << 24)|                 // START = 1 ,直接启动ADC转换
           (0 << 27);                                                        // EDGE = 0 (CAP/MAT引脚下降沿触发ADC转换)
                                   // 再次启运转换
                // 等待转换结束
        ADC_Data = ADDR0;       
                                                // 读取ADC结果
        ADC_Data = (ADC_Data>>6) & 0x3FF;           // 提取AD转换值
        ADC_Data = ADC_Data * 3300/1024;            // 数值转换
      
  
                
      
               

        return(ADC_Data);
    }       


  



void __irq IRQ_Timer0 (void)
{

                    
     
   

T0IR = 0x01;            
VICVectAddr = 0x00;
}
  


  
  
  int  main ()   
  {  uint32 val;
                  
  IODIR = (1<<2);                                                // 定时器设置为0
T0PR   = 99;       // 设置定时器0分频为100分频,得110592Hz
T0MCR = 0x03;      // 匹配通道0匹配中断并复位T0TC
T0MR0 = 110592;   // 比较值(1S定时一次)
T0TCR = 0x01;      //定时器计数器和预分频计数器使能
   
VICIntSelect = 0x00;    // 所有中断通道设置为IRQ中断
VICVectCntl0 = 0x20|0x04 ;   // 向量IRQ slot 使能 | 中断号  
VICVectAddr0 = (uint32)IRQ_Timer0; // 设置中断服务程序地址
VICIntEnable = 1 << 0x04;   // 使能定时器0中断
       
         while (1)
         {   read_ad();                 //读取通道0的结果   
        
         if(T0TC>ADC_Data)
                {
                        T0TC=0;
                }
                if(T0TC<ADC_Data/2)
                {        IOCLR =(0<<2);
                        IOSET =(1<<2);
                }
                else
                {        IOSET =(0<<2);
                        IOCLR =(1<<2);
                }
         };
    return 0;

     
  }
可以请教下为什么无法读出AD的值吗?
求高手解答
谢谢

急求解答

相关帖子

沙发
通宵敲代码| | 2015-6-26 17:00 | 只看该作者
肯定是LPC2103不想告诉你呗

使用特权

评论回复
板凳
starpopular|  楼主 | 2015-6-26 17:37 | 只看该作者
高手可以帮忙改下吗?

使用特权

评论回复
地板
gaoyang9992006| | 2015-6-26 17:45 | 只看该作者
本帖最后由 gaoyang9992006 于 2015-6-26 18:04 编辑

  ADCR = (1 << 0)                     |                // SEL = 1 ,选择通道0
           ((Fpclk / 1000000 - 1) << 8) |                 // CLKDIV = Fpclk / 1000000 - 1 ,即转换时钟为1MHz
           (0 << 16)                    |                // BURST = 0 ,软件控制转换操作
           (0 << 17)                    |                 // CLKS = 0 ,使用11clock转换
           (1 << 21)                    |                 // PDN = 1 , 正常工作模式(非掉电转换模式)
           (0 << 22)     |                 // TEST1:0 = 00 ,正常工作模式(非测试模式)
           (1 << 24)|                 // START = 1 ,直接启动ADC转换
           (0 << 27);                                                        // EDGE = 0 (CAP/MAT引脚下降沿触发ADC转换)
                                   // 再次启运转换
                // 等待转换结束
        ADC_Data = ADDR0;        
                                                // 读取ADC结果
        ADC_Data = (ADC_Data>>6) & 0x3FF;           // 提取AD转换值
        ADC_Data = ADC_Data * 3300/1024;            // 数值转换
      








--------------------
问题出在这一堆上,你这么写,想问一下,你看的懂吗、?? (0 << 17)    这是毛意思,你懂不??我是不懂。。。认真写,别学人家。。。都学坏了。

使用特权

评论回复
5
starpopular|  楼主 | 2015-6-26 19:27 | 只看该作者
我是看着网上的代码 再去查芯片手册的   (0<<17)好像在这没作用   而且哪一位本来好像本来就是0  
时间比较赶 没太多时间慢慢学  
所以来早各位大神指点一下

还有想问个问题 AD转换有用到或影响到定时器吗?        

使用特权

评论回复
6
kerby81| | 2015-6-30 20:47 | 只看该作者
最好对着数据手册去改吧,别人不一定知道对应的寄存器内容啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

5

帖子

0

粉丝