AVRレジスタとポートはゼロに初期化する必要がありますか?


9

私のコードの初期化ルーチンの間、私は次のようなことをするために使用します:

clr    r0  ; will always stay zero

そして:

out    PORTA, r0; initialize ports
out    DDRA, r0
out    PORTB, r0
...

これは実際に必要ですか?または、これがリセット時に自動的に行われることを確認できますか?特に、すべてのポートがデフォルトで入力として設定されることを信頼できるので、コードが実行されない場合に外部の問題は発生しませんか?

回答:


6

AVRのI / Oポートは、リセット時にINPUT / Tri-State / Hi-Z(DDRx = 0x00)に設定されます。ほとんどのマイクロコントローラー(すべてではないにしても?)がこの動作をします。これは、ピンが最も安全な状態です。そのため、ポートを自動的に入力として設定することができます。

ATmega16がそれを正確に示すいくつかの抜粋:

ここに画像の説明を入力してください

クロックが実行されていなくても、リセット条件がアクティブになるとポートCピンはトライステートになります。


1
これはまさに私が探していたものです:)
Stefan Paul Noack

私が覚えている限り、入力をフローティングのままにすると、ランダムノイズが発生するため、初期状態はゼロになる場合がありますが、それでも問題ありませんが、最初のクロックサイクル後にゼロ以外になる場合があります。
2002

@miceuzポイントは、不明な状態の出力がないことです。それらは、マイクロコントローラーに接続されている外部回路に望ましくない影響を与える可能性があります
m.Alin

1
@miceuzあなたはポート入力レジスタを参照していますよね?これらは、初期状態としてN / Aを持っています(これは、ピンに適用されているものを反映するだけなので、理にかなっています)。しかし、私はデータ方向レジスターを参照していました。誤ってポートを出力として設定しないようにしたかっただけで、ピンに印加される電圧と競合する可能性があります。
Stefan Paul Noack

ええ、本当に、ごめんなさい..
12

4
  • データシートの内容に関係なく、ポートの初期化は常に良い考えです。

  • データシートに何も書かれていない場合、それは完全に重要なアイデアです。


プログラムの実行時に何が起こるかを気にする場合にのみ、ポートデータの内容を定義する必要があります。

結果を気にしなければ、ポートデータビットを設定する必要はありません:-)。

製造元がデータシートでポートデータビットが設定またはクリアされていることを明示している場合、それらは正しいかもしれませんが、とにかく自分で初期化することは本当に良いアイデアです。「境界条件」とは、ほとんどの場合に問題が発生する場所です。たとえば、ループの開始、ループの終了、循環バッファラップラウンドポイントなどです。プロセッサの起動は、ハードウェアと同等です。ノイズとグリッチとその中にいる人々のいる現実の世界では、プログラムの運命をできる限り担当することが本当に良い考えです。ポートの初期化はこれの簡単な部分です。


完全に同意。ハードウェアリセットの代わりに、プログラムスタートへのジャンプ、または間接ジャンプがうまくいかなかったときに最近起こったこと-プログラムカウンターがオーバーフローして再び0x0000に到達する可能性があることを考えました。その後ポートがどのような状態になるかは誰にもわかりません...
Stefan Paul Noack

1

レジスタもSRAMもリセット時に初期化されず、一部の周辺レジスタのみが初期化されます。使用するものを初期化する必要があります。


これが当てはまる周辺レジスタの紛失を知っているか、それへのリンクがありますか?UCSRCデータシートなどにある「初期値」を見つけました。I / Oポート、特にデータ方向はどうですか?
Stefan Paul Noack

2
I / Oポートは入力に設定されています。それはすべてデータシートにあります。
Leon Heller、2012

@LeonHellerああありがとう、今私はそれを見る。レジスターの説明にあります。私はどういうわけかそれを逃しました...
ステファンポールノアック2012

@ noah1989、レオンは正解です。周辺レジスタの初期値は、常にレジスタの視覚化の下に指定されます(または、個々のビットの名前を持つイメージが:)と呼ばれます)。
avakar 2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.