fix(doc,drv,pl): 修正了ENCODER_CR的CLR位逻辑错误

1. 修正了pl_reference_mannual.md中的错误描述
2. 修正了encoder驱动中open和release函数对CLR位的设置
3. 修正了pl端encoder模块的ENCODER_CR寄存器复位值,使其默认为清除缓存状态

Co-authored-by: lyz <1942503466@qq.com>
This commit is contained in:
Miaow 2023-04-27 17:25:19 +08:00
parent 4ecbc6a0ba
commit 5a5c613097
2 changed files with 5 additions and 5 deletions

View File

@ -98,7 +98,7 @@ ENCODER模块的寄存器主要有控制寄存器 (ENCODER_CR)、阀触发分频
#### ENCODER控制寄存器 (ENCODER_CR) #### ENCODER控制寄存器 (ENCODER_CR)
偏移地址: 0x00<br/>复位值: 0x0000 0009 偏移地址: 0x00<br/>复位值: 0x0000 0008
![ ](pl_reference_mannual.assets/encoder_cr.svg) ![ ](pl_reference_mannual.assets/encoder_cr.svg)
@ -108,7 +108,7 @@ ENCODER模块的寄存器主要有控制寄存器 (ENCODER_CR)、阀触发分频
| 位3 **ICO** | 仅限内部清除缓存 (Internal Clear Only)<br /> 0: 同时允许由外部输入**Ex CLR**和清除缓存位**CLR**控制进入清零状态<br /> 清零状态见位**CLR**的描述;外部输入为高时,退出清零状态<br /> 1: 仅限内部信号清除缓存 | | 位3 **ICO** | 仅限内部清除缓存 (Internal Clear Only)<br /> 0: 同时允许由外部输入**Ex CLR**和清除缓存位**CLR**控制进入清零状态<br /> 清零状态见位**CLR**的描述;外部输入为高时,退出清零状态<br /> 1: 仅限内部信号清除缓存 |
| 位2 **VTS** | 内部触发信号 (Virtual Triggle Signal)<br /> **MOD**位置1时由软件写入将该位信号直接充当触发信号<br /> 0: 低电平<br /> 1: 高电平 | | 位2 **VTS** | 内部触发信号 (Virtual Triggle Signal)<br /> **MOD**位置1时由软件写入将该位信号直接充当触发信号<br /> 0: 低电平<br /> 1: 高电平 |
| 位1 **MOD** | 模式选择 (Mode)<br /> 0: 外部触发模式,外部触发编码器转动<br /> 1: 内部触发模式,软件模拟触发信号 | | 位1 **MOD** | 模式选择 (Mode)<br /> 0: 外部触发模式,外部触发编码器转动<br /> 1: 内部触发模式,软件模拟触发信号 |
| 位0 **CLR** | 清除缓存 (Clear)<br /> 0: 正常工作 <br /> 1: 清除编码和分频控制器内部的分频计数值不影响ENCODER_VDIVRx和ENCODER_CDIVR<br /> 注意: 程序置位该位后后需再写入0使计数器退出清零状态正常工作 | | 位0 **CLR** | 清除缓存 (Clear)<br /> 0: 清除编码和分频控制器内部的分频计数值不影响ENCODER_VDIVR和ENCODER_CDIVRx<br /> 注意: 程序清零该位后需再写入1使计数器退出清零状态正常工作 <br /> 1: 正常工作 |
#### ENCODER阀触发分频寄存器 (ENCODER_VDIVR) #### ENCODER阀触发分频寄存器 (ENCODER_VDIVR)

View File

@ -77,7 +77,7 @@ static struct encoder_dev encoder;
static int encoder_open(struct inode *inode, struct file *filp) static int encoder_open(struct inode *inode, struct file *filp)
{ {
u32 data = readl(encoder_cr_addr); u32 data = readl(encoder_cr_addr);
writel(data & ~ENCODER_CR_CLR_MASK, encoder_cr_addr); writel(data | ENCODER_CR_CLR_MASK, encoder_cr_addr);
return 0; return 0;
} }
@ -95,7 +95,7 @@ static ssize_t encoder_write(struct file *filp, const char __user *buf, size_t c
u32 data; u32 data;
kernelbuf_typedef kern_buf = { kernelbuf_typedef kern_buf = {
.valve_divide_value = 0, .valve_divide_value = 0,writel
.camera_a_divide_value = 0, .camera_a_divide_value = 0,
.camera_b_divide_value = 0, .camera_b_divide_value = 0,
.camera_c_divide_value = 0, .camera_c_divide_value = 0,
@ -142,7 +142,7 @@ static ssize_t encoder_write(struct file *filp, const char __user *buf, size_t c
static int encoder_release(struct inode *inode, struct file *filp) static int encoder_release(struct inode *inode, struct file *filp)
{ {
u32 data = readl(encoder_cr_addr); u32 data = readl(encoder_cr_addr);
writel(data | ENCODER_CR_CLR_MASK, encoder_cr_addr); writel(data & ~ENCODER_CR_CLR_MASK, encoder_cr_addr);
return 0; return 0;
} }