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.

[参考译文] CCS/TMS320F28379D:ADCINT2有问题

Guru**** 2540720 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/623890/ccs-tms320f28379d-problem-with-adcint2

器件型号:TMS320F28379D

工具/软件:Code Composer Studio

你好

我在触发 ADCINT2时遇到问题。
我能够在没有很多麻烦的情况下实现 ADCINT1、但第二个问题似乎不起作用。

那么、这里是我所做的:

PieVectTable.ADCA2_INT =&adca2_ISR;

(我认为上面的行将 Pievectortable 链接到中断的名称)

PieCtrlRegs.PIEIER1.bit.INTx2 = 1;//在 PIE 中断分配表中启用中断 INT1.2

IER |= 0x01;//启用中断1  

(我认为我只使用内核的 INT1、而 ADCINT1和 ADCINT2通过 PIE 连接到这个)

EINT; //启用全局中断 INTM
ERTM; //启用全局实时中断 DBGM

现在假设转换3结束调用 ADCINT2 (ADC 正常工作并将结果存储在第三个结果寄存器中)

    AdcaRegs.ADCINTSEL1N2.bit.INT2SEL = 0x03;         //EOC3将设置 ADCINT2标志-请参阅技术手册中的第1317/2672页
    AdcaRegs.ADCINTSEL1N2.bit.INT2E = 1;            //启用 ADCINT2
    AdcaRegs.ADCINTFLGCLR.bit.ADCINT2 = 1;         //确保 INT2标志被清除- 1清除标志位

在下面、您可以看到中断本身的代码:


中断 void adca2_ISR (void)
{   //这是来自 ADCa 的中断 INT2
   //此中断由 ADCa EOC3生成,仅在低频(例如10Hz)下运行

   //首次更新结果索引
   if (resultsIndex2 >(results_buffer_size-1))
   {
      Indexsx2 = 0;
   }
   否则{resultsIndex2++;}
   索引结果 x2++;
   TEST = TEST-1;
   //首先处理测量

   I_PV[resultsIndex2]=(AdcaResultRegs.ADCRESULT3 - offset_I0)*I0_CONV_Ratio;//此时我们假设所有转换都是相同的,但如果使用不同的传感器,情况可能不是这样
   V_PV[resultsIndex2]=(AdcbResultRegs.ADCRESULT3 - offset_I1)*V_CONV_Ratio;

   //根据测量结果,此处可能需要更多的处理

   //最大功率点跟踪器-扰动观察算法

   如果(ENABLE_MPPT = 1)
   {
   V_new = V_PV_meas;
   I_new = I_PV_meas;
   P_NEW = V_new*i_new;

   dV = V_new - V_old;
   DI = I_NEW - I_OLD;
   DP = P_NEW - P_OLD;

   如果(DP > 0)
   {
      如果(dV < 0)
      {I_ref = I_ref_old + I_step;}
      其他
      {I_ref = I_ref_old - I_step;}
   }
   其他
   {
      如果(dV < 0)
      {I_ref = I_ref_old - I_step;}
      其他
      {I_ref = I_ref_old + I_step;}
   }

   //hier nog eventueel stroomlimieten toevoegen

   V_old = V_new;
   I_OLD = I_NEW;
   P_OLD = P_NEW;
   I_ref_old = I_ref;

   }

   AdcaRegs.ADCINTFLGCLR.bit.ADCINT2 = 1;//清除 INT2标志
   PieCtrlRegs.PIEACX.ALL = PIEACK_Group1;

   }

我在这里看不出我的错误。 我忘记了什么吗? 我想我使用了完全相同的方法来设置 ADCINT1、这个方法运行得非常好。
如果您需要我的整个代码,我也可以上传:)

此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Simon、

    您能否仔细检查 PIE 映射?  我将 ADCA2视为 INT10.2:

    Tommy

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Tommy

    好的、我看到了这个问题、我使用了指令指南中的 PIE 映射来学习如何使用 C2000 µC。

    我将在星期一更新它、我将告诉您它是否起作用。

    此致

    Simon