This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

28069 AD问题

Other Parts Discussed in Thread: CONTROLSUITE

现想实现28069芯片的AD上电就开始采样,不需要任何事件触发,请问应该怎么设置呢

  • shizhong,

    如下图,

    1.使用软件触发及ADCINT2作为触发源,SOC配置为软件触发。设置寄存器ADCINTSOCSELx,设置ADCINT2可以触发SOC。

    2. 设置中断,EOCx产生ADCINT2中断,且要设置位INTSELxNy.INTxCONT = 1,即ADCINT2不论中断标志有没有清楚,都会产生中断信号,即连续模式。

    3. 使用ADCSOCFRC1寄存器软件强制触发SOC采样,采样结束后产生ADCINT2,ADCINT2又回过头来触发SOC采样,这样连续不断进行采样。

    下图是同步采样的例子,连续采样也可以同样这样设置。顺序采样也是可以这么做的。

     Eric

  • Eric:

          你好,如果不设置中断可以连续触发吗,现在不希望开AD中断,有办法吗

  • shizhong,

    你只要不打开PIE关于ADC的中断使能就可以啦,这样就不会触发中断了。

    至于上面的设置,还是需要那么设置的。即使用ADCINT2,然后配置为连续模式。

    Eric

  • 搞定了吗?能发个配置的范例吗?想看一下,谢谢

  • 刚学DSP,这个弄了1个星期了,还没搞懂,能发个配置的范例吗?想看一下,谢谢

  • 我这样可以吗?急用

    // Configure ADC
     EALLOW;

     AdcRegs.ADCCTL1.bit.ADCREFSEL = 1;      // Page485 选择外部VREF
        AdcRegs.ADCCTL2.bit.ADCNONOVERLAP = 0; // Enable non-overlap mode 0允许重叠/1不允许

     AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1; //ADCINT1 trips after AdcResults latch
     AdcRegs.INTSEL1N2.bit.INT2E     = 1; //Enabled ADCINT2
     AdcRegs.INTSEL1N2.bit.INT2CONT  = 1; //Disable ADCINT2 Continuous mode
     AdcRegs.INTSEL1N2.bit.INT2SEL = 1; //setup EOC1 to trigger ADCINT2 to fire
     AdcRegs.ADCSOC0CTL.bit.CHSEL  = 0; //set SOC0 channel select to ADCINA0
     AdcRegs.ADCSOC1CTL.bit.CHSEL  = 8; //set SOC1 channel select to ADCINB0
     AdcRegs.ADCSOC0CTL.bit.TRIGSEL  = 0; //set SOC0 start trigger on software
     AdcRegs.ADCSOC1CTL.bit.TRIGSEL  = 0; //set SOC1 start trigger on software
      AdcRegs.ADCSOC0CTL.bit.ACQPS  = 6; //set SOC0 S/H Window to 7 ADC Clock Cycles, (6 ACQPS plus 1)
     AdcRegs.ADCSOC1CTL.bit.ACQPS  = 6; //set SOC0 S/H Window to 7 ADC Clock Cycles, (6 ACQPS plus 1)
     AdcRegs.ADCINTSOCSEL1.bit.SOC0  = 2; //ADCINT2 will trigger SOC0. TRIGSEL field is ignored.
     AdcRegs.ADCINTSOCSEL2.bit.SOC8  = 2; //ADCINT2 will trigger SOC0. TRIGSEL field is ignored.

        //使用ADCSOCFRC1启动
        AdcRegs.ADCSOCFRC1.bit.SOC0 = 1;
        AdcRegs.ADCSOCFRC1.bit.SOC8 = 1;

     EDIS;

  • 中断函数部分

    __interrupt void  adc_isr(void)
    {

        Voltage1[0] = AdcResult.ADCRESULT0;   //ADCINA0
        Voltage2[0] = AdcResult.ADCRESULT1;   //ADCINB0  正常
        Voltage1[1] = 0;   //ADCINA0
        Voltage2[1] = 0;   //ADCINB0  正常
        Voltage1[2] = 0;   //ADCINA0
        Voltage2[2] = 0;   //ADCINB0  正常
        Voltage1[3] = 0;   //ADCINA0
        Voltage2[3] = 0;   //ADCINB0  正常

      AdcRegs.ADCINTFLGCLR.bit.ADCINT2 = 1;  //Clear ADCINT1 flag reinitialize for next SOC
      PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;   // Acknowledge interrupt to PIE

      return;
    }

  • ADCINT1  行吗??一定要ADCINT2??

  • yanqiang,

    ADCINT1也可以。不过你这样子连续采样,会不断进入ADC中断里面去。占用CPU资源。

    Eric

  • 可以查看controlSUITE中的例程,然后在例程基础上进行修改就可以了。

    Eric

  • 我是想改成AdcRegs.INTSEL1N2.bit.INT1CONT  = 1  连续转换模式,然后中断不开,用DMA传送ADC值到我的内存,这样就不会占用CPU资源了吧~~~应该可以的吧?? 

  • 贡献一下调好的代码吧,能用了

     EALLOW;

     AdcRegs.ADCCTL1.bit.ADCREFSEL = 1;      // Page485 选择外部VREF
        AdcRegs.ADCCTL2.bit.ADCNONOVERLAP = 0; // Enable non-overlap mode 0允许重叠/1不允许

     AdcRegs.INTSEL1N2.bit.INT1E     = 1; //Enabled ADCINT1
     AdcRegs.INTSEL1N2.bit.INT1CONT  = 1; //Disable ADCINT1 Continuous mode
     AdcRegs.INTSEL1N2.bit.INT1SEL = 0; //setup EOC0 to trigger ADCINT1 to fire

     AdcRegs.ADCSAMPLEMODE.bit.SIMULEN0 = 1; // 同时采样
     AdcRegs.ADCSOC0CTL.bit.CHSEL  = 0; //set SOC0 channel select to ADCINA0
     AdcRegs.ADCSOC1CTL.bit.CHSEL  = 8; //set SOC1 channel select to ADCINB0  page510

     AdcRegs.ADCSOC0CTL.bit.TRIGSEL  = 0; //set SOC0 start trigger on software
     AdcRegs.ADCSOC1CTL.bit.TRIGSEL  = 0; //set SOC1 start trigger on software

      AdcRegs.ADCSOC0CTL.bit.ACQPS  = 6; //set SOC0 S/H Window to 7 ADC Clock Cycles, (6 ACQPS plus 1)
     AdcRegs.ADCSOC1CTL.bit.ACQPS  = 6; //set SOC0 S/H Window to 7 ADC Clock Cycles, (6 ACQPS plus 1)

     AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1; //ADCINT1 trips after AdcResults latch

     AdcRegs.ADCINTSOCSEL1.bit.SOC0  = 1; //软件触发源ADCINT1
     AdcRegs.ADCINTSOCSEL1.bit.SOC1  = 1; //ADCINT2 will trigger SOC0. TRIGSEL field is ignored.

        //使用ADCSOCFRC1启动
        //AdcRegs.ADCSOCFRC1.all = 0X0101;   //0000 0001 0000 0001
        AdcRegs.ADCSOCFRC1.bit.SOC0 = 1;
        AdcRegs.ADCSOCFRC1.bit.SOC8 = 1;

     EDIS;

  • 要把

    AdcRegs.INTSEL1N2.bit.INT1SEL = 0; // 0 改成1

    AdcRegs.ADCSOCFRC1.bit.SOC8 = 1; //SOC8 改成SOC1

    Eric

  • 3Q,总算暂时搞得了~~时间比较赶,似懂非懂,没非常细看资料,下次有时间再看了