【LSM6DSOX的FSM有限状态机理解】--状态机指令介绍,附【中文版指令集】
[复制链接]
本帖最后由 justd0 于 2020-4-23 00:06 编辑
在LSM6DSOX开箱与体验“Port not open & not supported ”问题解决中分享了初次尝试使用LSM6DSOX传感器的过程和其中遇到的问题解决方案。
在【LSM6DSOX的FSM有限状态机理解】--状态机简介中对LSM6DSOX传感器中的FSM有限状态机本质进行了简要的介绍。
在【LSM6DSOX的FSM有限状态机理解】--编程模块简介中对FSM编程模块的结构、变量结合Unico中FSM界面进行了介绍。
这一章,结合官方的说明文档对分享下LSM6DSOX状态机指令的学习,并且分享下我这两天逐段翻译的指令集说明,希望能帮助伙伴们更好的使用FSM状态机编写自己的程序,下面开始吧~
指令代码保存在LSM6DSOX状态机程序块的可变变量区之后,由一系列实现算法逻辑的状态组成。
每个指令都有一个8位的操作码,每个操作码可以实现一个命令指令(CMD)或者条件指令(RESET/NEXT,RNC),它们被称为程序状态,多个指令在一起组成FSM整体逻辑,其中:
- 命令指令(CMD),用于执行流控制、输出和同步等特殊任务,有的命令会需要参数,参数会作为一个单独的指令来执行,后面详细讲。
- 条件指令(RESET/NEXT,RNC),由两个条件组合在一起(4位的RESET条件和4位的NEXT条件),用来复位或者继续执行程序流。
指令代码对LSM6DSOX寄存器和状态机内部参数偶直接影响,有些指令还可以产生额外的功能,比如更新状态信息等,下面分别介绍下命令指令和条件指令的特点和使用方法。
命令指令(CMD)
命令指令是修改状态机行为中的流控制、输出、和同步的行为。
当一个命令被执行时,会立即执行(不需要更新输入采样集),程序指针(PP)被设置为下一行,将执行如下动作:
- 如果新的一行是一个命令指令,则立即执行此行命令。
- 如果新的一行是一个条件指令,则在下一个输入采样值到来之时,处理此行条件判断指令。
有些命令指令可能会需要参数,需要的参数必须在命令指令下一行定义。
这里用"STHR1"命令来举例,该指令用来动态改变阈值1(THRESH1)的值,在Unico中的配置方法如下:
当程序指针(PP)指向状态S0的0x0A地址时,设备识别出"0xAA"指令码为"STHR1"命令。该指令需要两个参数,那么设备就不等待新的输入采样集,直接运行S0-S2三个状态,执行后阈值1的值将被设置为“0x5640”即小数“100.0”
条件指令(RESET/NEXT,RNC)
条件指令用于重置或者继续程序流,条件指令在一个新的输入采样集准备好后,在一个单一状态下执行。
条件指令中用于重置判断的RESET条件定义在操作码的高4位,而用于判断继续的NEXT指令定义在操作码的低4位,条件指令的执行逻辑如下图所示:
当进入条件指令后,首先判断重置条件(RESET),只有在RESET条件不满足时,才判断继续条件(NEXT)。
当两个条件均不满足时,状态机会等待一个新的采样集到来,然后重新开始判断。
当满足RESET条件时,就会发生向复位点切换的状态过渡,即PP=PR。
当RESET条件不满足,且NEXT条件满足时,就会向下一个状态过渡,即PP = PP+1;
默认情况下,复位点(RP)被设置为第一个状态,但可以通过"SRP/CRP"指令动态改变复位点的位置。
值得注意的是,RESET和NEXT条件为同一个条件的情况是没有意义的。
条件指令能够判断的条件一共有三种:
- 超时:当设置了定时器,定时计数器TC的值达到零的时候,条件满足,成立。
- 阈值比较:当启动的输入值高于(或低于)设定的阈值时,条件满足,成立。
- 过零检测:当启动的输入越过零位时,条件满足,成立。
以上就是命令指令和条件指令的所有特点了。
FSM指令集中一共提供了16个条件指令和35个命令指令。
我已经将所有指令集使用说明翻译成了中文,并排版做成了一个速查PDF,共享给大家使用。
文件放在文章末尾,不过需要回复下才可见哦。
如果里面有错误,希望大家能在评论中指正~~
以下就是35个命令指令和16个条件指令的简介截图:
命令指令
条件指令
最近白天各种忙,只有晚上才能搞这个,所以指令集是我一点点熬夜翻译出来的,可能会有很多纰漏和错误,希望大家发现的时候可以指出~~
希望可以帮助到大家吧,当然如果英语好的伙伴也可以直接阅读官方英语原文文档,这样不容易产生理解偏差~
|