工具/软件: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、这个方法运行得非常好。
如果您需要我的整个代码,我也可以上传:)
此致
