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.

[参考译文] C2000WARE:V 5.05 ERAD 配置错误?

Guru**** 2439950 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1529971/c2000ware-v-5-05-erad-configuration-bug

器件型号: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>
}

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

    尊敬的 Wil:

    我已就此与我们的软件团队联系。 希望在星期一上得到回复。  

    此致、

    Ryan Ma

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

    尊敬的 Wil:

    在此之前、您设置的停止事件将与之前设置的任何停止事件进行“或“运算、这不符合预期。
     最新版本中的更新旨在解决此问题。

    HWREGH (BASE + ERAD O_CTM_INPUT_SEL_2)=((uint16_t) stop_event << ERAD _CTM_INPUT_SEL_2_STO_INP_SEL_S);

    谢谢
    Samritha