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 ![ ](pl_reference_mannual.assets/encoder_cr.svg) @@ -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; }