功能描述
- 速率:EDAT_IF 时钟 CLK 频率支持 16 MHz/ 8 MHz/ 4 MHz/ 2 MHz/ 1 MHz/ 200 KHz/ 100 KHz。
- 发送类型和接收类型指令:关于详细的指令描述和典型命令控制示例,查看指令表。
- 硬件触发模式:由硬件信号触发 EDAT 发送件硬件触发命令,可选 EPWM 模块的 APWM_CVRC 或 APWM_CVRD 作为触发信号。
- 状态寄存器:EDAT_IF 可以在状态寄存器中读取每次数据传输的情况。若触发下一次数据传输,状态寄存器自动清 0。
- 看门狗定时器:对每次执行的命令进行超时检测。
- 输入信号滤波:对于 DIO 接收的信号,支持硬件的滤波,用于滤除硬件电路的噪声,滤波精度支持 4.1 ns,对应采样时钟 240 MHz。
- 单/ 多圈数据解析:通过配置寄存器,选择所需截取的数据,进而解析单/ 多圈数据。
- 发送自动清空接收:使能后,即表示在触发发送命令的时刻清空上一次接收数据和接收状态。
指令表
模式指令 |
TX Typ |
RX Typ |
|
---|---|---|---|
编码器发送位置 |
Typ1 |
Typ1 |
|
存储区选择 |
Typ2 |
Typ3 |
|
编码器接收参数 |
Typ2 |
Typ3 |
|
编码器发送参数 |
Typ2 |
Typ3 |
|
编码器接收复位 |
Typ1 |
Typ1 |
|
编码器发送位置值及附加信息 |
Typ1 |
Typ1 |
|
编码器发送位置值和接收存储区选择 |
Typ1 |
Typ2 |
|
编码器发送位置值并接收参数 |
Typ1 |
Typ2 |
|
编码器发送位置值和参数 |
Typ1 |
Typ1 |
|
编码器发送位置值并接收出错复位 |
Typ1 |
Typ2 |
-
发送类型:
-
TX type1:只发送模式命令。
-
TX type2:发送模式命令 + 8-bit MRS + 16-bit Data。
-
-
接收类型:
-
RX type1:接收位置数据,可通过寄存器使能是否接收此类型数据的附加数据 1 和附加数据 2。
可以通过寄存器 RX_ERR_WIDTH 配置错误位为 1-bit 或者 2-bit。
-
RX type2:接收位置数据 + 续发控制数据,可通过寄存器使能是否接收此类型数据的附加数据 1 和附加数据 2。
在此模式下,trt 寄存器生效。
-
RX type3:接收控制类数据。
-
-
Case1: TX type1 + RX type1,未使能接收附加数据
对于 RX 位置数据的 CRC,计算说明如下:-
计算的多项式为 x5+x3+x+1。
-
计算的范围是从 F1 + F2 (指令 000111 无 F2)+ Data。
-
计算的初始值为 0x1F。
-
最后计算的 CRC 结果需要取反。
-
返回的 CRC 是 LSB 先发送。
-
-
Case2: TX type2 + RX type3
对于 RX 参数数据的 CRC,计算说明如下:-
计算的多项式为 x5+x3+x+1。
-
计算的范围是 24-bit 参数。
-
计算的初始值为 0x1F。
-
最后计算的 CRC 结果需要取反。
-
返回的 CRC 是 LSB 先发送。
-
-
Case3: TX type1 + RX type2 (未使能附加数据)
-
Case4: TX type1 + RX type1 (使能附加数据 2 和附加数据 1)
对于 RX 附加数据格式,补充说明如下图所示:
其中,附加数据的 CRC 的计算方式如下:-
计算的多项式为 x5+x3+x+1。
-
计算的范围是 WRN + RM + Busy +8bit ACK+ 8-bit 地址 + 8-bit 数据。
-
计算的初始值为 0x1F。
-
最后计算的 CRC 结果需要取反。
-
返回的 CRC 是 LSB 先发送。
-
硬件触发模式
硬件触发模式下,由硬件信号触发 EDAT 发送件硬件触发命令。软件触发模式下,通过写寄存器触发 EDAT 进行命令发送。
硬件触发信号可以选择 EPWM 模块的 APWM_CVRC 或 APWM_CVRD。通过配置 EPWM 的周期,产生周期触发信号,可以控制 EDAT 进行周期发送命令。硬件模式和软件模式采用相同的寄存器控制发送和接收。
对寄存器字段 HW_TRG_EN 写 1 设置进入硬件触发模式。使能硬件触发模式后,如果需要退出硬件触发模式,则对寄存器字段 HW_TRG_EN 写 0。如果对字段 HW_TRG_EN 写 0 的时刻已经触发了一次命令的发送,需要等待当前的命令完成后才会退出硬件触发模式。在退出硬件触发模式的时刻,同时会产生退出硬件模式的状态,即 HW_TRIG_EXIT 标志,可以作为中断的信号源。
状态寄存器
每次数据帧传输完成后,EDAT_IF 均可以在状态寄存器中读取本次数据传输的情况,若触发下一次数据传输,状态寄存器自动清 0。
通过寄存器配置,可以配置 WDG 和 RXEND 状态产生中断信号,也就是每次数据发生传输超时可以触发中断,传输完成可以触发中断。
状态寄存器列表中各状态位对应信息如下:
符号 |
说明 |
---|---|
RX1 |
RECV1 接收到数据 |
RX2 |
接收到附加信息 2 |
RX3 |
接收到附加信息 1 |
F1 |
数据是无效值 |
F2 |
数据是无效值 |
CRC1 |
RECV1 接收到的数据存在 CRC 错误 |
CRC2 |
附加信息 1 存在 CRC 错误 |
CRC3 |
附加信息 2 存在 CRC 错误 |
MRSADR |
MRS 代码或地址错误 |
BUSY |
附加信息 1 或 2 存在 BUSY = 1 |
RM |
附加信息 1 或 2 存在 RM = 1 |
WRN |
附加信息 1 或 2 存在 WRN = 1 |
WDG |
看门狗超时异常 |
RXEND |
接收完成 |
MBERR |
Mode 比特错误 |
看门狗定时器
EDAT_IF 支持看门狗定时器,对每次执行的命令进行超时检测。如果从写 STRB 寄存器开始到传输完成所需的时间,超过所设置的时间,WDG 比特会置 1。
- The mode command Encoder receive reset (101010)
- The mode command Encoder send parameter(100011)
- The mode command Encoder receive parameter (011100)
单/ 多圈数据解析
EDT_IF 接收到的位置数据存放在 RECV1L 和 RECV1U[15:0],可以通过寄存器选择配置截取数据,进而解析单/ 多圈数据并存放至寄存器 DEC_ABS 和 DEC_ABM。
RECV1L 和 RECV1U[15:0] 的数据合并成 RXD_ALL[47:0],下图举例说明单圈数据裁剪的方式,以下是 ABS_DEC_ST_BIT = 0x2 (从 bit2 开始裁剪,包含 bit2),ABS_DEC_BIT_NUM = 0x7(裁剪的长度为 16-bit),裁剪后存入到 DEC_ABS 寄存器中。多圈数据的裁剪方式也与此一致。

发送自动清空接收
- 通过寄存器配置 STF_CLR_RXD_EN = 1,可以使能发送自动清空接收功能。
- 如果 STF_CLR_RXD_EN 未使能,则仅在完成当前的命令后才更新接收数据和接收状态,而不会在触发发送命令时刻清空上一次的接收数据和接收状态。