/* Set eeprom control to PDI. Only if set to master.
* 设置eeprom控制为PDI。只有当设置为master时
* @param[in] context = context struct
* 上下文结构体
* @param[in] slave = Slave number
* 从站编号
* @return >0 if OK
* 如果成功,返回值>0
*/
int ecx_eeprom2pdi(ecx_contextt *context, uint16 slave)
{
int wkc = 1,/* 工作计数器 */
cnt = 0;/* 试行次数:最大三回 */
uint16 configadr;/* 配置地址 */
uint8 eepctl;/* Reg0x0500 EEPROM Configuration:EEPROM配置 */
if ( !context->slavelist/* 从站列表 */[slave/* 从站编号 */].eep_pdi/* EEPROM控制:0 = master,1 = PDI */ )
{
configadr/* 配置地址 */
= context->slavelist/* 从站列表 */[slave/* 从站编号 */].configadr/* 配置地址 */;
eepctl = 1;/* Reg0x0500 EEPROM Configuration:EEPROM配置 1 = PDI */
do
{
wkc = /* 工作计数器 */
ecx_FPWR(// 配置的地址物理写(FPWR) Configured address physical write
context->port,/* 端口(port) */
configadr,/* 配置地址 */
ECT_REG_EEPCFG,// EEPROM Configuration:EEPROM配置=0x0500
sizeof(eepctl), /* Reg0x0500 EEPROM Configuration:EEPROM配置 1 = PDI */
&eepctl ,/* Reg0x0500 EEPROM Configuration:EEPROM配置 1 = PDI */
EC_TIMEOUTRET/* 发送帧(tx frame)返回到接收(rx)的超时时间[单位:us(微秒)]=2000 */
); /* set Eeprom to PDI *//* 设置eeprom控制为PDI */
}
while ((wkc/* 工作计数器 */ <= 0)
&& (cnt++ < EC_DEFAULTRETRIES));/* 默认重试次数,如果 WKC <= 0 */
context->slavelist/* 从站列表 */[slave/* 从站编号 */].eep_pdi = 1;/* EEPROM控制:0 = master,1 = PDI */
}
return wkc;/* 工作计数器 */
}
SOEM 源码解析 ecx_eeprom2pdi
于 2024-08-08 19:25:58 首次发布