SOEM 源码解析 ecx_eeprom_waitnotbusyAP

news2024/9/27 21:21:02
/* 在超时时间内、设置EEprom 状态机忙位busy→idle、APRD方法
 * @param[in] context     = context struct
 *                          上下文结构体
 * @param[in] aiadr       = auto increment address of slave
 *                          从站自增地址
 * @param[in] timeout     = Timeout in us.
 *                          超时时间[单位:us(微秒)]
 * @return retval
 *         返回值 
 *              1:Reg0x0502.15 EEprom 状态机忙位busy→idle
 *              0:Reg0x0502.15 EEprom 状态机忙位busy不变
 */
uint16 ecx_eeprom_waitnotbusyAP(ecx_contextt *context, uint16 aiadr,uint16 *estat, int timeout)
{
   int wkc, /* 工作计数器 */
       cnt = 0;/* 执行回数-1:参数的超时时间为首次睡眠时间 */
   uint16 retval = 0;/* 返回值 */
   osal_timert timer;/* 定时器:记录时间精确到us(微秒) */

   osal_timer_start(/* 通过以超时时间[单位:us(微秒)]来启动计时器,设置停止时刻 */
       &timer, /* 定时器:记录时间精确到us(微秒) */
       timeout);/* 超时时间[单位:us(微秒)] */
   do
   {
      if (cnt++)/* 只执行一次 */
      {
          /* 睡眠函数,休眠到要求的时间(指定的延迟时间[单位:usec]) */
         osal_usleep(
             EC_LOCALDELAY/* eeprom准备循环的延迟时间[单位:us(微秒)]=200us */);
      }
      *estat = 0;/* Reg0x0502:0x0503 EEPROM Control/Status */
    /*
    0x0502:0x0503.0 ECAT write enable: ECAT帧写使能
    0: Write requests are disabled:写请求无效
    1: Write requests are enabled This bit is always 1 if PDI has EEPROM control. :使能写请求

    0x0502:0x0503[4:1] Reserved, write 0 保留

    0x0502:0x0503.5 EEPROM emulation:
    0: Normal operation (I²C interface used)
    1: PDI emulates EEPROM (I²C not used)

    0x0502:0x0503.6
    Supported number of EEPROM read bytes: 支持读字节数
    0: 4 Bytes :4个字节
    1: 8 Bytes:8个字节

    0x0502:0x0503.7
    0x0502[7]:EEPROM_SIZE
    Selected EEPROM Algorithm: EEPROM地址范围
    0: 1 address byte (1KBit – 16KBit EEPROMs) :1个地址字节(1KB~16KB)
    1: 2 address bytes (32KBit – 4 MBit EEPROMs):2个地址字节(32KB~4M)

    0x0502:0x0503.8
    读命令位: Read
    读写操作时含义不同
    当写时:0:无操作,1:开始读操作
    当读时:0:无读操作,1:读操作进行中

    0x0502:0x0503.9
    写命令位: Write
    读写操作时含义不同
    当写时:0:无操作,1:开始写操作
    当读时:0:无写操作,1:写操作进行中

    0x0502:0x0503.10
    重载命令位: Reload
    读写操作时含义不同
    当写时:0:无操作,1:开始重载操作
    当读时:0:无重载操作,1:重载操作进行中

    0x0502:0x0503.11
    Checksum Error at in ESC Configuration Area: ESC配置区校验
    0: Checksum ok :校验和正确
    1: Checksum error :校验和错误

    0x0502:0x0503.12
    EEPROM loading status: 器件信息校验
    0: EEPROM loaded, device information ok : 器件信息正确
    1: EEPROM not loaded, device information not available : 从EEPROM装载器件信息错误
    (EEPROM loading in progress or finished with a failure)

    0x0502:0x0503.13
    Error Acknowledge/Command: 命令应答
    0: No error :无错误
    1: Missing EEPROM acknowledge or invalid command EEPROM emulation only:
    PDI writes 1 if a temporary failure has occurred. :EEPROM无应答,或命令无效

    0x0502:0x0503.14
    Error Write Enable: 写使能错误
    0: No error:无错误
    1: Write Command without Write enable:请求写命令时无写使能

    0x0502:0x0503.15
    Busy:忙位
    0: EEPROM Interface is idle:EEPROM接口空闲
    1: EEPROM Interface is busy:EEPROM接口忙
    */
      wkc=/* 工作计数器 */
          ecx_APRD(// 自增式物理读(APRD) Auto increment physical read 
              context->port,/* 端口(port) */
              aiadr,/* 从站自增地址 */
              ECT_REG_EEPSTAT, // EEPROM Control/Status EEP控制/EEP状态 EEPROM控制和状态寄存器[0x0502:0x0503]
              sizeof(*estat),/* Reg0x0502:0x0503 EEPROM Control/Status */
              estat, /* Reg0x0502:0x0503 EEPROM Control/Status */
              EC_TIMEOUTRET);/* 发送帧(tx frame)返回到接收(rx)的超时时间[单位:us(微秒)]=2000 */
      *estat = etohs(/* 大小端转换操作宏 uint16 */
          *estat);/* Reg0x0502:0x0503 EEPROM Control/Status */
   }
   while (((wkc/* 工作计数器 */ <= 0) 
       || ((*estat /* Reg0x0502:0x0503 EEPROM Control/Status */
           & EC_ESTAT_BUSY) > 0)) /* EEprom 状态机忙位为busy */
       && (osal_timer_is_expired(/* 比较当前时间和定时器停止时间,判断定时器是否超时 */
           &timer/* 定时器:记录时间精确到us(微秒) */) == FALSE)); /* wait for eeprom ready *//* 等待 EEPROM 准备就绪 */
   if ((*estat/* Reg0x0502.15 */
       & EC_ESTAT_BUSY) == 0)/* EEprom 状态机忙位为idle */
   {
      retval = 1;/* 返回值 1:Reg0x0502.15 EEprom 状态机忙位busy→idle */
   }

   return retval;/* 返回值 */
}

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

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

相关文章

Java数据结构 | 树的常见习题一(考研题、面试题)

树的常见练习题一 1、一棵非空的二叉树的先序遍历序列与后序遍历序列正好相反&#xff0c;则该二叉树一定满足&#xff08; &#xff09;2、在一颗度为3的树中&#xff0c;度为3的结点有2个&#xff0c;度为2的结点有1个&#xff0c;度为1的结点有2个&#xff0c;则叶子结点有&…

全志平台串口编号更改记录 A133 T527 T133 A523 A527串口编号更改

总纲 android13 rom 开发总纲说明 目录 1.前言 2.问题分析 3. 情况讨论 4.代码修改 5.彩蛋 1.前言 在嵌入式开发中,更改串口编号是一种常见的操作,以满足特定的硬件配置或调试需求。根据我们之前的文章 android13 串口编号修改 串口名修改-CSDN博客 在全志平台下面使…

如何成为具有竞争力的智能电表厂家

要成为具有竞争力的智能电表厂家&#xff0c;需要在多个方面进行深入布局和持续优化。以下是从市场定位、技术创新、产品质量、销售策略、客户服务以及合作伙伴关系等六个方面进行的详细分析&#xff1a; 一、明确市场定位与目标 市场细分&#xff1a;智能电表厂家需要明确自己…

未发先火,Smartbi AIChat频频“出圈”

近日&#xff0c;思迈特正式官宣&#xff0c;将于8月8日线上新品发布会上推出自研的全新AI应用——Smartbi AIChat&#xff0c;这款应用在还未正式推向市场前&#xff0c;已获得媒体、分析机构等多方关注&#xff0c;热度飙升&#xff0c;思迈特软件及其新品再一次成为业界内外…

RabbitMq如何确保消息不丢失

问题&#xff1a;在生产环境中由于一些不明原因&#xff0c;导致 rabbitmq 重启&#xff0c;在 RabbitMQ 重启期间生产者消息投递失败&#xff0c;导致消息丢失&#xff0c;需要手动处理和恢复。于是&#xff0c;我们开始思考&#xff0c;如何才能进行 RabbitMQ 的消息可靠投递…

RLVF:避免过度泛化地从口头反馈中学习

人工智能咨询培训老师叶梓 转载标明出处 大模型在不同行业和个人中的广泛应用要求模型能够根据具体的用户反馈进行调整或定制&#xff0c;以满足细微的要求和偏好。虽然通过高层次的口头反馈来指定模型调整非常方便&#xff0c;例如“在给老板起草电子邮件时不要使用表情符号”…

Ubuntu 20.04 几种微信安装错误汇总,最后成功

1. wine 安装 参考 Ubuntu 20.04.2 LTS安装 最新版 微信&#xff08;wine&#xff09; 1.1 连网下载文件 在终端执行 winetricks riched20下载不了 W2KSP4_EN.EXE 和 InstMsiW.exe 两个文件 可以网页端下载&#xff0c;或者 wget https://web.archive.org/web/2000/https:…

MySQL——数据库的设计、事务、视图

文章目录 数据库的设计1.多表之间的关系2.实现关系3.数据库设计的范式 事务1.事务的基本介绍2.事务的四大特征ACID3.事务的隔离级别&#xff08;了解即可&#xff09; 视图1.什么是视图&#xff1f;2.视图创建及使用方法3.注意事项4.为什么使用视图 数据库的设计 1.多表之间的…

GIS,矢量瓦片加载速度优化

文章目录 一、前言二、矢量瓦片的基础知识三、矢量切片加载速度优化3.1 地图缩编3.2 矢量瓦片中的图层根据显示层级定制3.3 矢量瓦片中的图层字段要按需定制3.4 多个图层合并为矢量切片图层组发布 四、总结 一、前言 单个矢量瓦片的大小并没有固定的上限&#xff0c;这意味着在…

一款功能强大且完全免费的在线AI抠图工具,还可以制作证件照

适用于人像、宠物、汽车等物品的智能抠图。它利用先进的算法和发丝级AI技术&#xff0c;能够快速精准地完成图片背景移除&#xff0c;并提供透明背景、场景切换和证件照制作等多种增值服务。此外&#xff0c;还支持批量处理和多种图片格式&#xff0c;适合不同用户的需求。无论…

【xilinx】如何从 Vivado GUI 启用/禁用 IP Core container

问题描述 如何从 Vivado GUI 启用/禁用 IP 核容器&#xff1f; 解决方案 要通过 GUI 启用/禁用 2023.1 之前的 Vivado 版本中的 IP 核容器&#xff0c;请按照以下步骤操作&#xff1a; 选择设置 -> IP -> 使用核心容器 在 Vivado 2023.1 及更高版本中&#xff0c;请按照…

中国自动驾驶出租车冲击网约车市场

近年来&#xff0c;中国的自动驾驶技术迅速发展&#xff0c;对传统网约车市场构成了越来越大的冲击。随着科技巨头百度旗下的萝卜快跑等公司加速推广无人驾驶出租车&#xff0c;这一趋势引发了广泛的讨论和担忧。 自动驾驶技术的迅猛发展 中国自动驾驶行业正处于快速发展阶段&…

ComfyUI系列——新手安装ComfyUI,就是这么简单!

前言 比较Midjoury、WebUI和ComfyUI 在了解ComfyUI的时候&#xff0c;还有其它两款类似的产品&#xff0c;于是就搜集了一下资料&#xff0c;以下是Midjoury、WebUI&#xff08;通常指的是Stable Diffusion Web UI&#xff09;和ComfyUI三者之间的异同点对比表。 特性Midjou…

Linux系统通过安装docker容器部署mysql服务

一、查看主机内核版本&#xff0c;关闭防火墙相关信息 二、直接yum安装docker 安装的18.09版本&#xff0c;也可以rpm安装最新版 yum install docker # docker --version Docker version 18.09.0, build a8959d5三、安装完成直接启动并查看状态 systemctl start docker syst…

Linux内核编程(十二)热插拔

本文目录 一、知识点1. 热插拔概念2. 热插拔机制3. Netlink机制 二、内核发送uevent事件到用户空间1. kobject发送uevent事件2. udevadm命令查看★示例代码&#xff1a;★优化&#xff1a;完善kset_uevent_ops&#xff08;热插拔事件结构体&#xff09; 三、用户空间使用Netlin…

MySQL数据分析进阶(十二)设计数据库——PART2

※食用指南&#xff1a;文章内容为‘CodeWithMosh’SQL进阶教程系列学习笔记&#xff0c;笔记整理比较粗糙&#xff0c;主要目的自存为主&#xff0c;记录完整的学习过程。&#xff08;图片超级多&#xff0c;慎看&#xff01;&#xff09; 【中字】SQL进阶教程 | 史上最易懂S…

大模型(LLMs)LLM生成SFT数据方法面

一、SFT数据集如何生成&#xff1f; SFT数据集构建通常有两种方法&#xff1a;人工标注和使用LLM&#xff08;比如GPT-4&#xff09;来生成的&#xff0c;人工标注对于构 建垂直领域比较合适&#xff0c;可以减少有偏数据&#xff0c;但是成本略高&#xff1b;使用LLM生成&…

【算法设计题】计算有向图G中每个结点的入度和出度,第4题(C/C++)

目录 第4题 计算有向图G中每个结点的入度和出度 得分点&#xff08;必背&#xff09; 题解&#xff1a;计算有向图G中每个结点的入度和出度 数据结构定义 边表结点 顶点表结点 图的邻接表存储表示 计算图G中每个结点的入度和出度 详细解释 1. 初始化入度和出度数组 2…

容器适配器的介绍和模拟实现

&#x1f497; &#x1f497; 博客:小怡同学 &#x1f497; &#x1f497; 个人简介:编程小萌新 &#x1f497; &#x1f497; 如果博客对大家有用的话&#xff0c;请点赞关注再收藏 &#x1f31e; Stack的介绍 stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上…

如何看到公司所有员工的收发件,并以员工名义一键发信

对于企业管理层来说, 了解并监控员工的企业邮箱成为了日常工作中的一部分。这不仅可以帮助企业更好地掌握业务进展, 还能够提高工作效率。本文将详细介绍如何通过Zoho邮箱实现这一目标, 包括相关的技术原理、实现的好处以及具体的实施步骤。 一、实现的技术: POP3 和 IMAP 要…