5038|4

13

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

定时中断 ad采样问题 [复制链接]

写了一个定时中断函数,将AD采样写在定时中断中,结果不能得到正确的AD值,定时时间为0.1ms,

采用dsp2806,系统时钟为50MHz,外部引脚ADCIN已经连接到1.6V直流电压,为什么我的AD值却总是零呢?

请高手帮帮忙!!

void ADC_Init(void) 
{
    AdcRegs.ADCTRL1.bit.RESET = 1;    //Reset ADC module
    asm(" RPT #20||NOP");
    AdcRegs.ADCTRL3.all = 0x00E2;     // Power up bandgap/reference/ADC circuits  
    AdcRegs.ADCTRL1.bit.RESET = 0;
    AdcRegs.ADCTRL1.bit.SUSMOD = 1;   // 模式3
    AdcRegs.ADCTRL1.bit.ACQ_PS = 0x4; // SOC脉宽
    AdcRegs.ADCTRL1.bit.CPS = 1;      // ADCCLK=FCLK/2
    AdcRegs.ADCTRL1.bit.CONT_RUN =0;  // ???
    AdcRegs.ADCTRL1.bit.SEQ_OVRD = 0;
    AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // cascade mode
   

    AdcRegs.ADCMAXCONV.all = 0x07;
    AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; // Setup ADCINA0 as 1st SEQ1 conv
    AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x0; // Setup ADCINB0 as 2nd SEQ1 conv
    AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x8;
    AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x8;   
    AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x1;
    AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x1;   
    AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x9; // Setup ADCINA1 as 3st SEQ1 conv
    AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x9; // Setup ADCINB1 as 4st SEQ1 conv  
         
    AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 0;  // disable SEQ1 interrupt (every EOS)
    AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 0;// disable SOCA from ePWM to start SEQ1
     
    AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;
    asm(" RPT #4||NOP");
    AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1;  
}

interrupt void  TINT0_ISR(void)      // CPU-Timer 0     P=0.1ms
{
     i= AdcRegs.ADCRESULT0;
     result[0]=i>>4;
     i= AdcRegs.ADCRESULT1;
     result[1]=i>>4;
     i= AdcRegs.ADCRESULT2;
     result[2]=i>>4;
     i= AdcRegs.ADCRESULT3;
     result[3]=i>>4;

     i= AdcRegs.ADCRESULT4;
     result[4]=i>>4;
     i= AdcRegs.ADCRESULT5;
     result[5]=i>>4;
     i= AdcRegs.ADCRESULT6;
     result[6]=i>>4;
     i= AdcRegs.ADCRESULT7;
     result[7]=i>>4;       
  i=result[0]+result[1]+result[2]+result[3];
     i=i>>2;
     g_uSample[g_uNum]=i;

  i=result[4]+result[5]+result[6]+result[7];
  i=i>>2;
  g_uSample1[g_uNum]=i;
  g_uNum++;
  if(g_uNum>255) g_uNum=0;
  AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;    //Restart the ADC
  asm(" RPT #4||NOP");
  CpuTimer0Regs.TCR.bit.TIF=1;
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; 
        AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1;
       EINT;  
}
void main(void)

{
    InitSysCtrl(); 
    Config_Gpio();
    ADC_Init();
    GPIO_Init();
    DINT;
    IER = 0x0000;
    IFR = 0x0000;
    InitPieCtrl();
    InitPieVectTable();
    InitCpuTimers();   //Initialize the Cpu Timers
    PieCtrlRegs.PIEIER1.bit.INTx7 = 1;   //Timer0
    IER |= M_INT1;    //Timer0  1.7
    EINT;   // Enable Global interrupt INTM
    ERTM;   // Enable Global realtime interrupt DBGM
    ConfigCpuTimer(&CpuTimer0, 50, 100000);
    StartCpuTimer0();
 for(;;)
 {

 }
}

最新回复

cpu0中断是没有adc中断触发的   详情 回复 发表于 2019-3-13 22:56
点赞 关注
 

回复
举报

13

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

有人能帮忙解决一下吗

 

 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
你这个太棒了,我一直在找用中断软件触发adc的程序,思路和你一样,就在cpu中断函数里置位adc
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

4
 
我看了下你这个好像没有adc中断触发,我试试在cpu中断里置位
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

5
 
752414013chen 发表于 2019-3-13 22:55
我看了下你这个好像没有adc中断触发,我试试在cpu中断里置位

cpu0中断是没有adc中断触发的
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

北京市海淀区中关村大街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
快速回复 返回顶部 返回列表