diff --git a/doc/pl_reference_mannual.md b/doc/pl_reference_mannual.md
index 0681fdf..c05fbf1 100644
--- a/doc/pl_reference_mannual.md
+++ b/doc/pl_reference_mannual.md
@@ -98,7 +98,7 @@ ENCODER模块的寄存器主要有控制寄存器 (ENCODER_CR)、阀触发分频
#### ENCODER控制寄存器 (ENCODER_CR)
-偏移地址: 0x00
复位值: 0x0000 0009
+偏移地址: 0x00
复位值: 0x0000 0008

@@ -108,7 +108,7 @@ ENCODER模块的寄存器主要有控制寄存器 (ENCODER_CR)、阀触发分频
| 位3 **ICO** | 仅限内部清除缓存 (Internal Clear Only)
0: 同时允许由外部输入**Ex CLR**和清除缓存位**CLR**控制进入清零状态
清零状态见位**CLR**的描述;外部输入为高时,退出清零状态
1: 仅限内部信号清除缓存 |
| 位2 **VTS** | 内部触发信号 (Virtual Triggle Signal)
**MOD**位置1时,由软件写入,将该位信号直接充当触发信号
0: 低电平
1: 高电平 |
| 位1 **MOD** | 模式选择 (Mode)
0: 外部触发模式,外部触发编码器转动
1: 内部触发模式,软件模拟触发信号 |
-| 位0 **CLR** | 清除缓存 (Clear)
0: 正常工作
1: 清除编码和分频控制器内部的分频计数值,不影响ENCODER_VDIVRx和ENCODER_CDIVR
注意: 程序置位该位后后需再写入0,使计数器退出清零状态,正常工作 |
+| 位0 **CLR** | 清除缓存 (Clear)
0: 清除编码和分频控制器内部的分频计数值,不影响ENCODER_VDIVR和ENCODER_CDIVRx
注意: 程序清零该位后需再写入1,使计数器退出清零状态,正常工作
1: 正常工作 |
#### ENCODER阀触发分频寄存器 (ENCODER_VDIVR)
diff --git a/source/linux_driver/encoder.c b/source/linux_driver/encoder.c
index 6a964fc..f32d6f5 100644
--- a/source/linux_driver/encoder.c
+++ b/source/linux_driver/encoder.c
@@ -77,7 +77,7 @@ static struct encoder_dev encoder;
static int encoder_open(struct inode *inode, struct file *filp)
{
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;
}
@@ -95,7 +95,7 @@ static ssize_t encoder_write(struct file *filp, const char __user *buf, size_t c
u32 data;
kernelbuf_typedef kern_buf = {
- .valve_divide_value = 0,
+ .valve_divide_value = 0,writel
.camera_a_divide_value = 0,
.camera_b_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)
{
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;
}