#pragma CODE_SECTION (DCDC_ISR、"IsrRamfuncs");
中断空 DCDC_ISR ()
{
………μ A
………μ A
………μ A
IsrVars.U16_FSBB_CurrentASampSum += adValueBranchACurr;
IsrVars.U16_FSBB_CurrentASampsum -= IsrVars.U16_FSBB_CurrentASampAD[IsrVars.U16_FSBB_IsrTimer];
IsrVars.U16_FSBB_CurrentASampAD[IsrVars.U16_FSBB_IsrTimer]= adValueBranchACurr;
………μ A
………μ A
………μ A
}
#pragma CODE_SECTION (OCP_tzint_ISR、"IsrRamfuncs");
中断空 OCP_tzint_ISR (空)
{
………μ A
………μ A
………μ A
}
添加信息
#define adValueBranchACurr AdcMirror.ADCRESULT2
PieVectTable.EPWM5_INT =&DCDC_ISR; //循环计算
PieVectTable.EPWM6_TZINT =&OCP_tzint_ISR;
EPwm5Regs.TBPRD = EPWM5_TIMER_TBPRD;//299
EPwm5Regs.ETSEL.bit.SOCASEL = ET_CTR_PRDZERO;
现象
只有 EPWM5触发中断 void DCDC_ISR ()、当代码执行时、adValueBranchACurr 的值保持不变。 当调试器中断 void OCP_tzint_ISR (void)时、在代码执行时、adValueBranchACurr 的值偶尔会有所不同。 我们认为 AdcMirror.ADCRESULT2刷新了、我们检查了以下时间:
采样在第三个通道中。 理论上,最大转换时间为3*333ns=999us。 在正常条件下、此代码执行的最早时间为3.2us、而执行的最晚时间为4.6us。
在上图中、A 点是完成 A 向电流转换的时间、B 点是执行的最早时间代码、C 点是执行的最晚时间代码。 考虑到这一点、应该不可能刷新代码执行中的转换值、但当触发中断 void OCP_tzint_isr (void)时、这种现象确实存在。
那么、我们想知道为什么在点 B 和点 C 之间刷新转换值? 谢谢。