[DSP编程]

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

[复制链接]
5296|3
手机看帖
扫描二维码
随时随地手机跟帖
halou|  楼主 | 2015-8-8 16:53 | 显示全部楼层 |阅读模式
ADC, se, TE, TI, pi
本帖最后由 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_SHCLK  0xF   // 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;        // 1  Cascaded 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[Adc_isrTimes] = ((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>
捕获论坛.PNG

相关帖子

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
楼主解决了吗?遇到了同样的问题

哥们解决了吗?

使用特权

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

本版积分规则

13

主题

45

帖子

0

粉丝