读三星spec时看到的,很多IC都有类似情况,很是疑惑。
查了很多资料,就下面的一个说法还可以理解:
写1是在硬件上产生一个复位脉冲。
能写0清除就很可能也可以写1进去,而这与功能要求不符。如要控制只能写0而不能写1,则硬件比较复杂。
延伸:
读修改写指令的效用
写代码时,无论是C还是汇编代码,谨记读修改写指令的效用:
28xDSP将会一次性写16或32位寄存器或存储器(的各位)。任何貌似写一位的指令其实是,读该寄存器,修改单个位,再写回(修改后的)结果。这被称为读修改写指令。对于绝大多数寄存器这不会造成问题。一个值得关注的例外是:
有多个标志位,且写1清零其中标志位的寄存器
例如,咱关注下PIEACK寄存器。这个寄存器中的多个位都是写1清0的。如果(此时)多个位值为1,对该寄存器(的单个位)进行读修改写操作时,会‘天违人愿’地将多个位清零。
如下方法是错误的。它会对所有已置位的标志位写1,并且将它们全部清零。
PieCtrl.PIEAck.bit.Ack1=1;
正确的方法是,对该寄存器写入一个掩码值,此值只对希望清零的那位写1(其它位的值都为0):
#define PIEACK_GROUP1 0x0001
PieCtrl.PIEACK.all = PIEACK_GROUP1;
阅读(5068) | 评论(0) | 转发(0) |