halou 发表于 2015-8-8 16:53

28335ADC进不去中断啊,大家看一看什么原因

本帖最后由 halou 于 2015-8-8 20:59 编辑

<p>#define ADC_CKPS   0xf   // ADC module clock = HSPCLK/2*ADC_CKPS   = 25.0MHz/(1*2) = 12.5MHz
#define ADC_SHCLK0xF   // S/H width in ADC module periods                        = 16 ADC clocks
#define AVG      1000// Average sample limit
#define ZOFFSET    0x00// Average Zero offset</p><p>
</p><p>
</p><p><p>InitSysCtrl();</p><p>
EALLOW;
SysCtrlRegs.HISPCP.all = ADC_MODCLK;      // HSPCLK = SYSCLKOUT/ADC_MODCLK
EDIS;

    InitGpio();
    InitCapl();
    InitAdc();// For this example, init the ADC
    InitEpwm();
    PID_init();

// Step 3. Clear all interrupts and initialize PIE vector table:
// Disable CPU interrupts
   DINT;


   InitPieCtrl();

// Disable CPU interrupts and clear all CPU interrupt flags:
   IER = 0x0000;
   IFR = 0x0000;</p><p>
   InitPieVectTable();

   EALLOW;// This is needed to write to EALLOW protected registers
   //PieVectTable. ECAP1_INT = &ISRCap1;
   //PieVectTable. ECAP2_INT = &ISRCap2;
   //PieVectTable. ECAP3_INT = &ISRCap1;
   //PieVectTable.TINT0 = &ISRTimer0;

   PieVectTable.ADCINT = &adc_isr;
   
   //PieVectTable.XINT13 = &cpu_timer1_isr;
   //PieVectTable.TINT2 = &cpu_timer2_isr;
   EDIS;   
   
   IER |= M_INT1; // Enable CPU Interrupt 1
   PieCtrlRegs.PIEIER1.bit.INTx6 = 1;    //ADCINT</p><p>
      // Enable global Interrupts and higher priority real-time debug events:
    EINT;   // Enable Global interrupt INTM
    ERTM;   // Enable Global realtime interrupt DBGM</p><p>
////////////////////////////////////////////////////////////////////////</p><p><div class="blockcode"><blockquote><p></p><p>void InitAdc(void)
{
      extern void DSP28x_usDelay(Uint32 Count);</p><p>
EALLOW;
    SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;
    ADC_cal();
   EDIS
AdcRegs.ADCTRL3.all = 0x00E0;// Power up bandgap/reference/ADC circuits
    DELAY_US(ADC_usDELAY);         // Delay before converting ADC channels   
AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;// Sequential mode: Sample rate   = 1/[(2+ACQ_PS)*ADC clock in ns]
                        //                     = 1/(3*40ns) =8.3MHz (for 150 MHz SYSCLKOUT)
         //                     = 1/(3*80ns) =4.17MHz (for 100 MHz SYSCLKOUT)
         // If Simultaneous mode enabled: Sample rate = 1/[(3+ACQ_PS)*ADC clock in ns]
AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;    </p><p>//AdcRegs.ADCTRL1.bit.CPS=1; //内核时钟预定标器,1为二分频</p><p> AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;      // 1Cascaded mode级联模式
       AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; // Setup ADCINA0 as 1st SEQ1 conv.</p><p>
       //AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;
       //AdcRegs.ADCST.bit.INT_SEQ2_CLR=1;</p><p>      AdcRegs.ADCTRL1.bit.CONT_RUN = 1;       // Setup continuous run
      AdcRegs.ADCTRL1.bit.SEQ_OVRD = 0;       // Enable Sequencer override feature
      
    // Initialize all ADC channel selects to A0
      AdcRegs.ADCCHSELSEQ1.all = 0x0;
      AdcRegs.ADCCHSELSEQ2.all = 0x0;
   AdcRegs.ADCCHSELSEQ3.all = 0x0;
   AdcRegs.ADCCHSELSEQ4.all = 0x0;</p><p>   // AdcRegs.ADCTRL3.bit.SMODE_SEL = 1;   //0-顺序采样,1-同步采样
      AdcRegs.ADCMAXCONV.all = 0x0000;       // Setup ADA0 conv's on SEQ1
    </p><p>    AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;
          AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1;
}
interrupt void adc_isr(void)
{
   while (AdcRegs.ADCST.bit.INT_SEQ1 == 0){}</p><p>AdcA = ((AdcRegs.ADCRESULT0)>>4);
Adc_isrTimes++;</p><p> if(Adc_isrTimes==1000)
{
    Adc_isrTimes = 0;
}
// Clear INT flag for this timer
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;         // Reset SEQ1
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;       // Clear INT SEQ1 bit
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;   // Acknowledge interrupt to PIE</p><p>    return;
}</p></p></p>

这是主程序中的测试代码</p><p>   if(AdcRegs.ADCST.bit.SEQ1_BSY ==1)
   flagintadc2 =1;   
   if(AdcRegs.ADCST.bit.INT_SEQ1 ==1)
   flagintadc =1;</p><p>
</p><p>程序执行后
</p>

jiaoyun15 发表于 2017-2-21 21:45

中断最后加个 AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1;试试

HYTERIA 发表于 2017-7-7 16:44

楼主解决了吗?遇到了同样的问题

毛毛只爱宝宝 发表于 2017-9-15 15:51

HYTERIA 发表于 2017-7-7 16:44
楼主解决了吗?遇到了同样的问题

哥们解决了吗?
页: [1]
查看完整版本: 28335ADC进不去中断啊,大家看一看什么原因