380091044 发表于 2024-5-8 08:17:23

can通信中为何中断应答寄存器写1叫清零??

问题点及代码如下:

        if((isr & 0x04) == 0x04)//TI==1:CAN模块数据帧发送完成。用户需要对TI写1,复位发送BUFFER的写指针
        {
                CANAR = ISR;//
                CANDR = 0x04;//CLR FLAG   为何这里明明是写1,缺叫清零,手册我也看了,也是这样写的,不是明白????
        }

乘风飞扬 发表于 2024-5-8 09:32:10

写1清零是通过往指定寄存器位置写入1,
触发硬件执行清除对应标志位操作,
而不是直接将写入的内容赋值给寄存器。

像SPI标志位清除也是使用同样的方式。

380091044 发表于 2024-5-8 09:36:29

乘风飞扬 发表于 2024-5-8 09:32
写1清零是通过往指定寄存器位置写入1,触发硬件执行清除对应标志位操作,而不是直接将写入的内容赋值给寄存 ...

突然反了,感觉好不习惯,感谢老师细心解答,

zgrfox110 发表于 2024-5-12 02:39:45

你考虑上升沿清零就行

hsrzq 发表于 2024-5-14 10:17:22

380091044 发表于 2024-5-8 09:36
突然反了,感觉好不习惯,感谢老师细心解答,

光反了算啥,有些标志位读始终是0,还需要再写0清除状态

380091044 发表于 2024-5-14 11:05:18

hsrzq 发表于 2024-5-14 10:17
光反了算啥,有些标志位读始终是0,还需要再写0清除状态

这个我倒是遇到过,听有的老师说,不清零也行,最好后还是清一下零,
页: [1]
查看完整版本: can通信中为何中断应答寄存器写1叫清零??