本を読みながら、スケッチというやつを作ってみた。
今のところ、普通のCプログラムと同じだ。
avr-gcc.exe、というのがあるから、GCCでできることはだいたいできるのかな。
setup()とloop()を実装しておくと、勝手に動いてくれる。
割り込みハンドラの定義もできるようだが、まあそれは後の話だな。
AVRは8bitマイコンのようだから、そこは気をつけておかないかん。
ポートの方向設定がpinMode()、出力がdigitalWrite()、入力がdigitalRead()。
これらは、#includeしなくても使えた。
検索すると、Arduino.hに定義があり、実装はwriteing_digital.cにあった。
digitalWrite()を見てみよう。
- 引数pinから、該当するポート番号を探す(よくわからんが、lpmというアセンブラ命令を使ってる)
- PWMのタイマが動いているかどうかも探す
- pinがポートの何ビット目になるかも探す
- ポート番号が探せなかったら、終わり
- PWMタイマが動いていたら、終わり
- ポート番号からアドレスを取得
- SREGの現在値をバックアップ
- 割込禁止
- ビットを立てるならOR、落とすならAND~
- 7で保存した値をSREGに書き込む
書き込みだけで、けっこう多い。
まあ、他のマイコンでもArduino互換というものがあるから使っておいた方が無難だが、「今回はPWM使わん」というような場合は、もうちょっと端折りたい気がするな。
よくわからんのが、SREG。
これは状態レジスタらしい。Status REGisterか。
割込禁止にしてから、書き込んで、SREGを戻して割込禁止も解除される、ということになりそうだ。
状態レジスタって、なんとなくReadOnlyって気がするのだが、そうでもないということか。
(そういうのは自分で調べよう。)
割込禁止と許可を逆に覚えてて、CLIが許可でSTIが禁止かと思ってた(8086の知識)。
AVRでは、CLIは禁止で、SEIが許可らしい。
もちろん8086でも、CLIが禁止で、STIが許可、だ。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。