EtherCAT从站协议栈---- sampleappl.c 文件解析

本文详细介绍了嵌入式系统的启动流程,包括入口函数main函数的架构与工作原理,以及关键函数如HW_Init和MainInit的具体实现。此外,还深入探讨了EtherCAT从站接口的初始化过程。

这个源文件实际上包含该项目的入口函数main函数。

那么如何找到入口函数呢?

可以进入debug的simulator模式,选中run to main(),

当执行完启动文件startup_cm3.s后就进入了main函数(注意在main函数之前还进入了SystemInit函数),

如下图所示:

 

这个main函数主要架构如下:

int main(void) 
{ 
   HW_Init();                    /*PDI(过程数据接口)初始化,这里用的是MCI接口*/
   MainInit();                   /*主函数初始化包含:ESC  和COE   */ 
   bRunApplication = TRUE;       /*处于运行状态标志*/ 
   do 
   { 
       MainLoop();                     /*主循环函数,实现周期性和非周期性数据交换*/ 
   } while (bRunApplication == TRUE);  /*检查是否处于运行状态*/    
  
   HW_Release();     //无意义的函数 
 
   return 0;         //设置正确返回 
} 

下面来依次看各个函数。

HW_Init(void)函数,定义了PDI接口,定义了ESC到PDI中断的映射:

ESC的PDI(过程数据接口)有这几种情况:

1. Up to 32 bit digital I/O——32位数字量I/O

2. Serial Peripheral Interface ——SPI总线

3.  8/16-bit synchronous/asynchronous Microcontroller Interface ——MCI接口

4. With FPGA, specific on-board-bus——带FPGA的,特定的on-board-bus

在倍福的手册中也可以看到0x0140寄存器描述了PDI过程数据接口的几种情况。

过程数据和参数是通过ESC上的DPRAM来交互的。为了保证数据的一致性,ESC硬件上会有一些 机制,比如同步管理器等。

HW_Init函数的解读也可以参考 https://blog.csdn.net/qq_15157841/article/details/51789250

UINT16 HW_Init(void)
{  
    UINT32 intMask = 0;
    pEsc = (unsigned short *)ESC100StartAddress; //(unsigned short)MAKE_PTR_TO_ESC;定义指针pEsc,指向ESC物理内存起始地址    
    UINT16 u16PdiCtrl = 0;
    /* we have to wait here, until the ESC is started */
    do
    {
        HW_EscReadWord(u16PdiCtrl,ESC_PDI_CONTROL_OFFSET);//ESC_PDI_CONTROL_OFFSET==0x0140
    } while (((u16PdiCtrl & 0xFF) < 0x8) || ((u16PdiCtrl & 0xFF) > 0xD) );//过程数据接口需要是MCI接口
 
 
    HW_EscWriteDWord(intMask, ESC_AL_EVENTMASK_OFFSET);//ESC_AL_EVENTMASK_OFFSET==0x0204  AL Event masking of the AL Event Request register Events for mapping to PDI IRQ signal
 
    /* enable the ESC-interrupt microcontroller specific,
        the macro ENABLE_ESC_INT should be defined in ecat_def.h */
    //------------ENABLE_ESC_INT();
    
    return 0;
}

其中0x0204寄存器定义如下: 

MainInit(void)函数,定义了EtherCAT从站接口,COE(CANopen Over EtherCAT)相关的配置。

/
/**
 \param     pO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JIAWEI_Z

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值