ET9300-EtherCAT从站协议栈应用指南——第三弹,硬件抽象层预览

目录

  • 宏定义
  • 中断服务函数
      • void ECAT_CheckTimer (void)
      • void PDI_Isr (void)
      • void Sync0_Isr (void), void Sync1_Isr (void)
      • ENABLE_ESC_INT DISABLE_ESC_INT
  • 接口函数、宏
      • UINT16 HW_Init(void)
      • void HW_Release(void)
      • UINT16 HW_GetALEventRegister(void)
      • UINT16 HW_GetALEventRegister_Isr(void)
      • void HW_SetLed(UINT8 RunLed,UINT8 ErrLed)
      • void HW_RestartTarget(void)
      • UINT32 HW_GetTimer(void)
      • void HW_ClearTimer(void)
      • UINT16 HW_EepromReload (void)
      • 弃用API
  • 读写访问

本节比较的无聊,全程纸上谈兵,粗略的介绍了一下硬件抽象层需要对接的函数。
总的来说,硬件抽象层的实现需要包含如下功能

  • ESC读写访问
  • 定时器(1ms base)
  • 每隔1ms调用一次定时中断服务函数(仅当timer 中断支持的时候,ECAT_TIMER_INT 置为1)
  • 调用指定的中断服务函数(仅当支持同步的时候)
    – PDI 中断(仅当支持AL_EVENT,AL_EVENT_SUPPORTED置为1)
    – SYNC0 中断 (仅当 支持DC的时候,DC_SUPPORTED置为1)

宏定义

ecat_def.h中定义了一些与硬件相关的宏

宏定义描述
EL9800_HW针对到手即用的特定硬件
PIC24针对到手即用的特定硬件
PIC18针对到手即用的特定硬件
MCI_HW??
FC1100_HW针对到手即用的特定硬件
CONTROLLER_16BIT运行协议栈的控制器是16位的
CONTROLLER_32BIT运行协议栈的控制器是32位的
ESC_16BIT_ACCESS对ESC的访问16Bit对齐
ESC_32BIT_ACCESS对ESC的访问32Bit对齐
MBX_16BIT_ACCESS对邮箱的访问16Bit对齐
BIG_ENDIAN_16BITuC对外部存储按照16bit访问,且工作在大端,置此位
BIG_ENDIAN_FORMATuC工作在大端,置此位

中断服务函数

void ECAT_CheckTimer (void)

该函数需要每隔 1 毫秒从定时器 ISR(ECAT_TIMER_INT = 1)调用一次。如果不支持定时器中断,则会在 1 毫秒后自动调用该函数(基于提供的定时器)。

void PDI_Isr (void)

该函数需要从 PDI ISR 调用。为支持 PDI 中断处理,还需要将 "AL_EVENT_ENABLED "设为 1。

void Sync0_Isr (void), void Sync1_Isr (void)

该函数需要从SYNC 0 ISR 调用。Sync0 中断由 ESC 的 DC 单元产生。目前默认情况下不支持将 Sync0 信号映射到 PDI 中断。要支持DC同步,需要设置 “DC_SUPPORTED”。

该函数需要从 Sync1 ISR 调用。Sync1 中断由 ESC 的 DC 单元产生。目前默认情况下不支持将 Sync1 信号映射到 PDI 中断。要支持DC同步,需要设置 “DC_SUPPORTED”。

ENABLE_ESC_INT DISABLE_ESC_INT

开启和关闭上述4个中断源

接口函数、宏

UINT16 HW_Init(void)

初始化,请求资源

void HW_Release(void)

释放资源

UINT16 HW_GetALEventRegister(void)

获取AL Event 寄存器 (0x220-0x221).前两个字节

UINT16 HW_GetALEventRegister_Isr(void)

如果需要从中断服务例程访问 ESC 的特殊函数,则应执行此函数;否则,此函数定义为 HW_GetALEventRegister。获取 AL 事件寄存器(0x220-0x221)的前两个字节。

void HW_SetLed(UINT8 RunLed,UINT8 ErrLed)

设置LED

void HW_RestartTarget(void)

复位硬件,该函数只有BOOTSTRAPMODE_SUPPORTED设置为1的时候才被需要

UINT32 HW_GetTimer(void)

读取硬件定时器的当前寄存器值。如果没有硬件定时器,函数将返回多媒体定时器的计数器值。定时器 tick 值(增量/毫秒)在 "ECAT_TIMER_INC_P_MS "中定义。如果不支持定时器中断(“ECAT_TIMER_INT” = 0),则需要使用该函数计算总线周期时间。

void HW_ClearTimer(void)

清除定时器值

UINT16 HW_EepromReload (void)

如果主站触发了 EEPROM 重载请求,则调用该函数。只有在支持 模拟EEPROM 且未设置功能指针 "pAPPL_EEPROM_Reload "时才需要。如果配置了完整的模拟EEPROM(寄存器 0x502,bit6 为 1),则不会调用重载功能,也无需执行该功能。

弃用API

5.10以前的协议栈才会用到的APi
void HW_ResetALEventMask(UINT16 intMask)
void HW_SetALEventMask(UINT16 intMask)
void HW_DisableSyncManChannel(UINT8 channel)
void HW_EnableSyncManChannel (UINT8 channel)
TSYNCMAN * HW_GetSyncMan(UINT8 channel)

读写访问

读写DPRAM区域,看函数名称和形参应该就可以看出意义,所以不解释了
void HW_EscRead(MEM_ADDR *pData, UINT16 Address, UINT16 Len )
void HW_EscWrite(MEM_ADDR *pData, UINT16 Address, UINT16 Len )
void HW_EscReadIsr(MEM_ADDR *pData, UINT16 Address, UINT16 Len )
void HW_EscWriteIsr(MEM_ADDR *pData, UINT16 Address, UINT16 Len )

void HW_EscReadDWord(UINT32 DWordValue, UINT16 Address)
void HW_EscWriteDWord(UINT32 DWordValue, UINT16 Address)
void HW_EscReadDWordIsr(UINT32 DWordValue, UINT16 Address)
void HW_EscWriteDWordIsr(UINT32 DWordValue, UINT16 Address)

void HW_EscReadWord(UINT16 WordValue, UINT16 Address)
void HW_EscWriteWord(UINT16 WordValue, UINT16 Address)
void HW_EscReadWordIsr(UINT16 WordValue, UINT16 Address)
void HW_EscWriteWordIsr(UINT16 WordValue, UINT16 Address)

void HW_EscReadByte(UINT8 ByteValue, UINT16 Address)
void HW_EscWriteByte (UINT8 ByteValue, UINT16 Address)
void HW_EscReadByteIsr(UINT8 ByteValue, UINT16 Address)
void HW_EscWriteByteIsr(UINT8 ByteValue, UINT16 Address)

void HW_EscReadMbxMem(MEM_ADDR *pData, UINT16 Address, UINT16 Len )
void HW_EscWriteMbxMem(MEM_ADDR *pData, UINT16 Address, UINT16 Len )

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/689775.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

天然肠衣市场分析:预计到2025年将达到45亿美元

肠衣作为包装香肠馅料的原材料一般分为可食用和不可食用两种,其中天然肠是由猪、羊等家畜多层肠道制作而成的,近些年来天然肠衣在全球市场需求不断增加。一、全球市场分析 1. 市场规模:根据市场研究机构的数据,2019年全球天然肠衣…

访问学者感谢信|人文社科工作者赴北欧访学

编者按:这位访问学者从委托我们申请到获得邀请函只用了一个月时间。为了表达感激之情,其当时就写了这封感谢信,但依据我们的惯例,一般是待申请者出国,一切安排妥当后再发成功案例。所以时至今日,才将该申请…

比特浏览器bit_selenium3bit_selenium4使用

bit_selenium3 from selenium import webdriver from selenium.common.exceptions import TimeoutException from selenium.webdriver.common.keys import Keys from selenium.webdriver.chrome.options import Options from bit_api import *# /browser/open 接口会返回 selen…

旧衣回收小程序开发,市场发展潜力巨大

在当下快节奏生活下,人们的闲置衣物越来越多,为了减少浪费,旧衣回收成成为了大众的选择。旧衣回收能够降低人们的损失,减少我国资源浪费,又能循环利用,是我国一个环保商业模式。 “互联网旧衣回收”推动市场…

消息队列(Message Queue)

目录 一、概念 二、消息队列使用场景 三、消息队列的两种模式 1.点对点模式 2.发布/订阅模式 四、常用消息队列介绍 1.RabbitMQ 1) 主要特性 2)安装需要 3)优点 4)缺点 2.ActiveMQ 1)主要特性 2) 安装需要 3)优…

洛谷C++简单题小练习day14—闰年推算小程序

day14--闰年推算小程序--2.18 习题概述 题目描述 输入 x,y,输出 [x,y] 区间中闰年个数,并在下一行输出所有闰年年份数字,使用空格隔开。 输入格式 输入两个正整数 x,y,以空格隔开。 输出格式 第一行输出一个正整数&#xf…

原创!顶级SCI优化!一键实现ICEEMDAN-NRBO-BiLSTM-Attention多变量时间序列预测!以光伏数据集为例

声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类智能优化算法及其改进的朋友,可关注我的公众号:强盛机器学习,不定期会有很多免费代码分享~ 目录 数据介绍 模型流程 创新点 结果展示 完整…

opencv-python保存视频为mp4格式并支持在浏览器播放

前言 之前在项目上使用yolov8进行视频检测的时候,yolov8默认windows系统下保存的是avi格式 suffix, fourcc (.mp4, avc1) if MACOS else (.avi, WMV2) if WINDOWS else (.avi, MJPG) self.vid_writer[idx] cv2.VideoWriter(str(Path(save_path).with_suffix(suf…

【感知机】感知机(perceptron)学习算法知识点汇总

机器学习——感知机 感知机(perceptron)是一种二分类的线性模型,属于判别模型,也称为线性二分类器。输入为实例的特征向量,输出为实例的类别(取1和-1)。可以视为一种使用阶梯函数激活的人工神经元,例如通过梅尔频率倒谱系数(MFCC…

N叉树的后序遍历

1.题目 这道题是2024-2-19的签到题,题目难度为简单。 考察的知识点为DFS算法(树的深度遍历)。 题目链接:N叉树的后序遍历 给定一个 n 叉树的根节点 root ,返回 其节点值的 后序遍历 。 n 叉树 在输入中按层序遍历进…

leetcode刷题-最接近的三位数之和

1.题目描述 2.解题思路 其实这个题目的解题思路,和昨天写的两个题目差不多,定义两个指针,进行排序,避免多次大量循环,减少时间复杂度。在上次的基础上进行了一个比较小的改动。 3.代码 class Solution:def threeSumCl…

swagger+javax/xml/bind/DatatypeConverter+aop各种问题

文章目录 一、No operations defined in spec!1.问题图片2.解决方法 二、java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter1.问题图片2.解决方法 三、AOP切点不够精确问题1.问题描述2.解决方案 总结 一、No operations defined in spec! 这是swagger报的错&…

代码随想录算法训练营 DAY20 | 二叉树(7)

一、LeetCode 530 二叉搜索树的最小绝对值 题目链接:530.二叉搜索树的最小绝对值https://leetcode.cn/problems/minimum-absolute-difference-in-bst/ 思路一:利用搜索二叉树的中序遍历结果为有序数组的性质,将遍历结果保存到数组中&#xf…

【Google SEO】SEO指标

SEO最难的事情之一就是: 你怎么知道你正在做的事情是否真的有效? 这是一个很难回答的问题。特别是因为SEO可能需要几个月的时间才能真正发挥作用。 好吧,今天您将确切地看到要跟踪的SEO指标。如何跟踪它们。以及如何加倍努力,为…

无法正常下载mxnet

无法正常下载mxnet 前言报错截图问题分析参考内容 前言 最近在看李沐老师的深度学习的内容,之前落下一直没看,目前在运行代码的时候无法下载mxnet 报错截图 使用python常用的下载方式下载mxnet出现如下问题,这是问题的部分截图 Building wheels for collected packages: nu…

阿里云香港轻量应用服务器是什么线路?

阿里云香港轻量应用服务器是什么线路?不是cn2。 阿里云香港轻量服务器是cn2吗?香港轻量服务器不是cn2。阿腾云atengyun.com正好有一台阿里云轻量应用服务器,通过mtr traceroute测试了一下,最后一跳是202.97开头的ip,1…

分库分表面试必背

一,背景 随着互联网的普及,使用人数和场景爆炸式增长,现在随便一个应用系统都可能达到数百万千万甚至更大数量级的数据。大量的数据带来了新的挑战,怎么快速完成增删改查的业务,是应用服务开发者最头痛的问题。面对这个…

OSPF解析:深入探索网络的心脏运作机制

1. OSPF的基本概念 OSPF(Open Shortest Path First)是一种用于IP网络的内部网关协议(IGP)。它是一种链路状态路由协议,使用Dijkstra算法计算最短路径树,以确定到达网络中每个目的地的最佳路径。OSPF被设计…

Linux网络编程套接字

目录 认识端口号认识传输层协议TCP/UDP网络字节序socket编程接口实现简单的UDP网络程序实现远程执行服务器shell指令Windows套接字编写UDP实现一个简单的聊天室实现简单的TCP网络程序TCP实现一个中英互译程序守护进程原理 认识端口号 在进行网络通信的时候是不是我们两台机器…

grafana配置钉钉告警模版(一)

1、配置钉钉告警模版 创建钉钉告警模版,然后在创建钉钉告警时调用模版。 定义发送内容具体代码 my_text_alert_list 是模版名称后面再配置钉钉告警时需要调用。 {{/* 定义消息体片段 */}} {{ define "my_text_alert_list" }}{{ range . }}告警名称&…