AVRマイコンの紹介
▲▲
トップページに戻る
▲
前のページに戻る
-
◆注意◆
- このページの文及び図表はAVRマイコンの各種資料(最後に示す参考文献等)を参考にして私が独自にまとめたもので、内容に間違い等があるかもしれませんが、ご容赦ください。
●
概要(AVRマイコンの概要)
AVRマイコンはAtmel社のワンチップマイコンでPIC同様チップや開発環境が安価に入手できます。
表1、図1は現在入手可能なAVRマイコンの一覧及びピン配置です。
●
AVRマイコンの特徴
-
1命令1クロック動作(分岐命令等は除く)
- プログラムメモリはすべてフラッシュメモリを採用し、
シリアル書き込み時の供給電圧は2.7V〜6.0Vの単一電源で、1,000回書き換え可能。
-
データメモリは32本の汎用レジスタと内蔵SRAM(最大512バイト)で、バンク切換えなしにアクセス可能。
-
外部に64kバイトのSRAMを増設可能(AT90S4414,AT90S8515)
-
3本の16ビット長インデックスレジスタにより効率的なSRAMへのアクセスが可能
-
スタックエリアはSRAM上に割り当てる(SRAMが無い機種は、ハードウェアスタック)
●
ハードウェア
■
メモリマップ
AVRマイコンはハーバード・アーキテクチャを採用しており図2のようにプログラムメモリとデータメモリ、
EEPROMデータメモリが独立しています。
プログラムメモリは16ビット長で、$000番地からリセットベクタ、割り込みベクタの順に割り当てられています。
割り込みベクタはPICマイコンと異なり、割り込み要因毎に用意されています。
なお、汎用レジスタ及びI/Oレジスタは図2のように、それぞれR0〜R31、$00〜$3Fで指定するようになっています。
データメモリは8ビット長で、32本の汎用レジスタ、64本のI/Oレジスタ、内蔵SRAM、外部増設SRAMがリニアにマップされています。
汎用レジスタは全てがアキュムレータとして使用することができます。
また、汎用レジスタには16ビット長のインデックスレジスタが3本(AT90S1200は8ビット長1本)が割り当てられています。
I/Oレジスタはステータスレジスタ、スタックポインタ、入出力ポート、
タイマ/カウンタ等のペリフェラルを制御する64本のレジスタがあります。
内蔵SRAMは数値データの記憶以外に、スタックエリアとしても使用します。
AT90S4414/AT90S8515は外部にSRAMを増設するためのハードウェアが用意されており、
大量のデータを高速に読書きすることが可能となっています。
データ用EEPROMは100,000回の書き換え可能です。
■
ペリフェラル
AVRマイコンには表1のようにワンチップマイコン定番のペリフェラルが組み込まれています。
■
I/Oピン
I/Oピンの構造は図3のようになっています。
各ピンの駆動能力はシンク電流が20mA、ソース電流が10mAとLED程度の負荷であれば問題無く駆動できます。
しかし、ポート全体あるいはチップ全体として同時に流せる電流値は(各ピンの最大電流)×(ピン数)
より低くなっているので注意が必要です。
また、図3のようにI/Oピンの出力にPORTn、入力にPINn(n=A,B,C,D)と別のレジスタが割り当てられています。
●
命令セットの概要
AVRマイコンの命令語長は16ビットです。
命令はシングル・ワードが基本ですが、必要であればダブル・ワード命令も採用しています。
■
汎用レジスタ操作
AVRマイコンにはPICマイコンのWレジスタに相当する演算処理専用のレジスタは無く、
全ての汎用レジスタがアキュムレータとしてレジスタ間演算処理に使用することができます。
ただし、定数を汎用レジスタにロードする命令や、汎用レジスタと定数間の演算ではR16〜R31に限られるので注意が必要です。
また、インデックスレジスタのように特定の汎用レジスタに機能が割り当てられていますので、
32本のレジスタが全て同等というわけでもありません。
■
インデックスレジスタ操作
汎用レジスタのR26〜R31に割り当てられた3本(X,Y,Z)のインデックスレジスタを使って
SRAMに効率よくアクセスする下記のような命令が多く用意されています。
Ld | Rd,Z+ | ;Rd←(Z),Z←Z+1 |
Ld | Rd,-Z | ;Z←Z-1,Rd←(Z) |
Ldd | Rd,Z+q | ;Rd←(Z+q) |
■
スタック操作
SRAMを内蔵する機種では、I/Oレジスタに16ビット長のスタックポインタが用意されています。
スタックエリアにはSRAMを使用します。
もちろん、PUSH命令やPOP命令も用意されています。
AT90S1200はSRAMを内蔵しないため3レベルのハードウェア・スタックが用意されています。
■
プログラムカウンタ
PICマイコンのようにプログラムカウンタがレジスタにマップされていません。
よって、プログラムカウンタを操作してジャンプすることができなくなりました。
ただ、Zレジスタを用いた間接ジャンプが可能ですから問題はないと思います。
どうしてもプログラムカウンタを操作したいような場合にはRCALL命令の実行によりスタックに退避されたアドレスを操作し、
RET命令で変更したアドレスに移ることができます。
■
命令数
AVRマイコンの命令数は118となっていますが、
例えばステータスレジスタのビット操作命令(BSET命令)でキャリービットをセットしたときと、
キャリービットをセットするSEC命令は同一のオブジェクトコードとなります。
このように同一コードをとなる命令が多くあります。私は物覚えがわるいので、
PICマイコンのように必要最低限の命令数としてほしかったです。
●
参考文献
-
AT90S4414,AT90S4434,AT90S8835,AT90S1200の各ユーザーズマニュアル,ATMEL社.
▲▲
トップページに戻る
▲
前のページに戻る