请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:C2000WARE 工具/软件:
您好:
我正在使用 F28838D 上的 ERAD 来评测我的代码、v5.05 不起作用、但 v5.04 有。 我比较了这些文件并在 ERAD 中找到了这些文件:
HWREGH(base + ERAD_O_CTM_INPUT_SEL_2) =
((uint16_t)stop_event << ERAD_CTM_INPUT_SEL_2_STO_INP_SEL_S);
从此时更改:
HWREGH(base + ERAD_O_CTM_INPUT_SEL_2) |=
((uint16_t)stop_event << ERAD_CTM_INPUT_SEL_2_STO_INP_SEL_S);
移除该或条形图似乎损坏了刻画器。 除了切换 C2000Ware 版本之外、其他任何操作都将修复此问题(相同的编译器配置 (-O4)、source、target 等)。 我没有时间对此进行调试、但希望我提供了足够的信息。
下面是我的代码片段、我发布了配置和周期性函数的编辑版本:
typedef const ERAD_Counter_Input_Event cCntIpEvtE;
static
cCntIpEvtE CtrlIsrEvtN= (cCntIpEvtE)ERAD_BUSCOMP_BASE_TO_EVENT(ERAD_HWBP2_BASE);
static
cCntIpEvtE CtrlIsrEvtX= (cCntIpEvtE)ERAD_BUSCOMP_BASE_TO_EVENT(ERAD_HWBP3_BASE);
/// Configure ISR Begin event
static
void McuCfgIsrBeginEvt(cU32 ref) {
const ERAD_BusComp_Config CtrlIsrN= {
.mask= 0,
.reference= ref,
.comp_mode= ERAD_BUSCOMP_COMPMODE_EQ,
.enable_int= 0,
.enable_stop= 0,
.bus_sel= ERAD_BUSCOMP_BUS_VPC
};
ERAD_configBusComp(ERAD_HWBP2_BASE, CtrlIsrN);
}
/// Configure ISR End event
static
void McuCfgIsrEndEvt(cU32 ref) {
const ERAD_BusComp_Config CtrlIsrX= {
.mask= 0,
.reference= ref,
.comp_mode= ERAD_BUSCOMP_COMPMODE_EQ,
.enable_int= 0,
.enable_stop= 0,
.bus_sel= ERAD_BUSCOMP_BUS_VPC
};
ERAD_configBusComp(ERAD_HWBP3_BASE, CtrlIsrX);
}
/// Configure ISR Single timer
static
void McuCfgIsrSingTmr() {
const ERAD_Counter_Config CtrlSingK= {
.event= ERAD_EVENT_NO_EVENT,
.event_mode= ERAD_COUNTER_MODE_ACTIVE,
.reference= 0,
.rst_on_match= 0,
.enable_int= 0,
.enable_stop= 0
};
ERAD_configCounterInStartStopMode(ERAD_COUNTER2_BASE,CtrlSingK,CtrlIsrEvtN,CtrlIsrEvtX);
}
static
void PeriodicTimerTask(McuS* mcu, CtrlS* ctrl) {
cU32 k= ERAD_getMaxCount(ERAD_COUNTER2_BASE); // ALWAYS RETURNS 0.
ERAD_setMaxCount(ERAD_COUNTER2_BASE,0);
<snip>
}