3137|6

65

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

帮忙看一下adc问题出在哪里,是s3c2440的 [复制链接]

想做个adc采集,s3c2440,用中断的方式,下面是我写的程序,但就是中断不了,不知道问题出在哪里,大家帮忙看一下:
AdcInit(void)  ,这个是 中断和adc的初始化,IRQ_ADC(void)  是adc中断服务程序,裸机跑的

void AdcInit(void)
{
        int ch=0;//adc通道0

        Uart_Printf("\nADC Init\n", rADCCON);
         
        rPRIORITY=0;                //默认的固定的优先级
        rINTMOD=0;                //所有中断都为IRQ中断
        rSRCPND |=(1u<<31);
        rINTPND |=(1u<<31);
         
        pISR_ADC = (unsigned int)IRQ_ADC;

        rINTMSK &=~(1<<31);        //开adc中断
        rCPSR &=~(1<<7);


         

        //1.设置预分频,ADCLK=2.5MHz
          preScaler = ADC_FREQ;
          Uart_Printf("ADC conv. freq. = %dHz\n",preScaler);
          preScaler = 50000000/ADC_FREQ -1;               //PCLK:50.7MHz
         Uart_Printf("PCLK/ADC_FREQ - 1 = %d\n",preScaler);
     

        //2.使用预分频,送预分频的数值,选择AD通道ch
        rADCCON = (1<<14)|(preScaler<<6)|(ch<<3);        / tup channel

        //设置为普通转换模式
        rADCTSC &=~(1<<2);

        //3.开始ADC,READ_START=1,ENABLE_START=1
        rADCCON|=0x3;   





}


void __irq IRQ_ADC(void)
{

        Uart_Printf("\nADC irq isp \n", rADCCON);
        while(1);

}


上面的 IRQ_ADC(void)  
中断服务程序,只是用来测试有没中断成功用的,初始化完,就没出现中断的那行字

最新回复

我最近也在研究2440的ADC驱动!希望能交流下!!!  详情 回复 发表于 2010-4-26 20:42
点赞 关注

回复
举报

75

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
这是我用三星的程序,触摸屏用着很好,你参考一下,我也是裸奔.

void AdcTsInit(void)
{
   
    rADCDLY=50000;                  //Normal conversion mode delay about (1/3.6864M)*50000=13.56ms
    rADCCON=(1<<14)+(ADCPRS<<6);    //ADCPRS En, ADCPRS Value

    rADCTSC=0xd3;                   //Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En

    pISR_ADC = (int)AdcTsAuto;
        rINTMSK                &= ~(BIT_ADC);       //ADC Touch Screen Mask bit clear
        rINTSUBMSK        &=~(BIT_SUB_TC);
}

void __irq AdcTsAuto(void)
{
        int i;

    if(rADCDAT0&0x8000)
    {
        Uart_Printf("\nStylus Up!!\n");
        rADCTSC&=0xff;        // Set stylus down interrupt bit
    }
    else
        Uart_Printf("\nStylus Down!!\n");

        rADCTSC=(1<<3)|(1<<2);         //Pull-up disable, Seq. X,Y postion measure.
        saveAdcdly=rADCDLY;
        rADCDLY=40000;                 //Normal conversion mode delay about (1/50M)*40000=0.8ms

        rADCCON|=0x1;                   //start ADC

        while(rADCCON & 0x1);                //check if Enable_start is low
        while(!(rADCCON & 0x8000));        //check if EC(End of Conversion) flag is high, This line is necessary~!!

        while(!(rSRCPND & (BIT_ADC)));  //check if ADC is finished with interrupt bit
       
        xdata=(rADCDAT0&0x3ff);
        ydata=(rADCDAT1&0x3ff);

         //YH 0627, To check Stylus Up Interrupt.
         rSUBSRCPND|=BIT_SUB_TC;
         ClearPending(BIT_ADC);
         rINTSUBMSK        &=~(BIT_SUB_TC);
         rINTMSK        &=~(BIT_ADC);
                         
         rADCTSC =0xd3;    //Waiting for interrupt
         rADCTSC=rADCTSC|(1<<8); // Detect stylus up interrupt signal.
         
        while(1)                //to check Pen-up state
        {
                if(rSUBSRCPND & (BIT_SUB_TC))        //check if ADC is finished with interrupt bit
                {
                        Uart_Printf("Stylus Up Interrupt~!\n");
                        break;                                                //if Stylus is up(1) state
                }
        }       

    Uart_Printf("count=%d XP=%04d, YP=%04d\n", count++, xdata, ydata);    //X-position Conversion data            

        rADCTSC                =rADCTSC&~(1<<8); // Detect stylus Down interrupt signal.
    rSUBSRCPND        |=BIT_SUB_TC;
    rINTSUBMSK        &=~(BIT_SUB_TC);        // Unmask sub interrupt (TC)     
    ClearPending(BIT_ADC);
}
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
必须要有这一句,并将它放在后面较好:
        rINTSUBMSK|=BIT_SUB_TC;
        rINTMSK|=BIT_ADC;
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

4
 
哎呀,又错了,是这个:
        rINTMSK &=~BIT_ADC;      
        rINTSUBMSK &=~(BIT_SUB_TC);
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

5
 
guanzhu
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

6
 
2440 普通adc一般应该使用查询方式
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

7
 
我最近也在研究2440的ADC驱动!希望能交流下!!!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
中星联华&ADI明日直播
直播主题:大咖面对面,轻松玩转高速ADC性能测试
直播时间:3月25日(周二)14:00
活动奖励:京东卡、双肩包

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 13

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表