06/03/05 08:20:17
>>431
たとえば
I2Cの SCL/SDAの為に、出力ラッチはL にして 方向レジスタでオープンコレクタを実現するとするよ
つまり BSET /BCLR で方向レジスタだけを トグルするわけ。
これをメインループ側で処理してるとする
この処理の最中に SCL=H つまり入力ポートにしてる最中に割り込みがかかる
で、割り込み処理で、同じポートの別の出力ポートをトグルさせようと BSET/BCLRのような Read-Modify-Writeでポートを操作すると
この SCLの出力ラッチがHになってしまう。
で、メイン側で次に SCL=Lににしようと出力ポートにしたら、
出力ラッチがHなのでHが出力されてしまう
-------------
この2つだけなら、割り込み側でRead-Modify-Write命令ではなく
読んで ビット操作して、常にSCL/SDAは0にして書き出すという対策でいいけど
もう一つ条件が加わると、やっかいなわけよ