ET9300-EtherCAT从站协议栈应用指南——第二弹,代码框架和执行流程

本文详细描述了代码框架的结构,涉及ESC对接、中断处理流程,包括1ms定时中断、PDIInterrupt等,以及执行流程中的MainLoop函数。过程数据处理主要通过PDO_OutputMapping、ECAT_Application和PDO_InputMapping三个函数实现,强调了master-slave数据交换的顺序和用户自定义函数的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码框架

代码框架主要包含3部分

  • 与ESC对接的硬件抽象层,需要在此层处理与ESC的通信如SPI、FMC。对接一些中断
  • 协议栈,包含状态机,邮箱,过程数据通信。此层可以使用SSC工具配置
  • 用户应用
    在这里插入图片描述
    各层对应具体的代码实现如下图·
    在这里插入图片描述
    上图中AOE,FOE,EOE功能都找不到具体的实现。是因为在第一弹中,SSC里我们没有配置任何参数直接生成的代码。

执行流程

前后台流程,后台mainloop循环,前台执行中断。
大循环在ecatappl.c中,代码如下(删减)

void MainLoop(void)
{
	UINT16 ALEvent = HW_GetALEventRegister();	//获取ALEVENT
	PDO_OutputMapping();		//输出映射
	ECAT_Application();			//用户应用
	PDO_InputMapping();			//输入映射
	ECAT_Main();				//ALEVENT和邮箱处理,邮箱处理中包含EOE,FOE,AOE等功能实现
	COE_Main();					//COE
	pAPPL_MainLoop();			//函数指针,应该是协议栈希望用户将该指针指向自定义的应用函数
								//但是在SSC生成的某些参考代码中,应用是在ECAT_Application()中处理的
}

中断处理

协议栈需要如下中断

  • 1ms定时中断,用于LED和看门狗
  • Sync0:过程数据处理和DC同步
  • Sync1:过程数据处理和DC同步
  • PDI Interrupt:过程数据处理
    在这里插入图片描述
    如果设备不支持DC同步,那么Sync0, Sync1中断是没有必要的。PDI中断将在中断服务函数中通过轮询ALEVENT的方式执行源Sync0 Sync1中的服务函数,在这个过程中执行PDO_OutputMapping()和PDO_InputMapping()

如果设备PDI中断都不支持,那么MainLoop中,ESC将会轮询ALEVENT,执行PDO_OutputMapping()和PDO_InputMapping()

过程数据处理

主要对接如下3个函数,注意都是站在master视角描述的

  • PDO_OutputMapping:处理master到slave的数据。
  • ECAT_Application() :应用层,比如根据获得的数据点灯,读取模拟量输入等等
  • PDO_InputMapping():处理slave到master的数据。

三个函数处理顺序一定是OutputMapping,App,InputMapping
三个函数对应的用户实现是(SSC-Device.c)
void APPL_InputMapping(UINT16* pData)
void APPL_OutputMapping(UINT16* pData)
void APPL_Application(void)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菠萝地亚狂想曲

送我一瓶农夫山泉?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值