

STM8はSTマイクロエレクトロニクスの8ビット マイクロコントローラファミリーです。STM8マイクロコントローラはST7マイクロコントローラアーキテクチャの拡張版を使用しています。STM8マイクロコントローラはフル機能の8ビットマイクロコントローラとしては特に低コストです。[1]
建築
STM8 は以前の ST7 と非常によく似ていますが、16 ビットのインデックス レジスタとスタック ポインタ相対アドレッシング モードを備えているため、 Cのターゲットとしてより適しています。内部的にはハーバード アーキテクチャですが、統合された 24 ビットのアドレス空間を作成する「メモリ ブリッジ」があり、コードを RAM から実行したり (フラッシュ ROMのシステム内プログラミングに便利)、データ (ルックアップ テーブルなど) を ROM からアクセスしたりできます。アクセス時に、「メモリ ブリッジ」は必要に応じて CPU を停止し、フラッシュ ROM への RAM のような書き込みアクセスを可能にします。EEPROM からのコード実行は拒否され、リセット イベントが作成されます。64K を超えるデータへのランダム アクセスは、特別な「ロード ファー」命令に制限されています。ほとんどの操作のメモリ オペランドは、最大 128K (16 ビットのベース アドレスと 16 ビットのオフセット) にアクセスできます。
デバイスの種類に応じて、RAM の容量は 1 ~ 6 KiB の範囲で、ROM の容量は 4 ~ 8 KiB (低密度)、16 ~ 32 KiB (中密度)、または 32 ~ 96 KiB (高密度) になります。
ST7と同じ6つのレジスタ(A、X、Y、SP、PC、CC)を備えていますが、インデックスレジスタXとYは16ビットに拡張され、プログラムカウンタは24ビットに拡張されています。アキュムレータAとスタックポインタはそれぞれ8ビットと16ビットのままです。[2]
条件コード レジスタにはさらに 2 つの定義済みビットがあり、合計 7 つになります。オーバーフロー フラグと 2 番目の割り込み有効ビットがあり、4 つの割り込み優先レベルを許可します。
亜科
- STM8AF自動車
- STM8AL 自動車用低電力
- STM8L低消費電力
- STM8S 汎用
- STM8Tタッチセンシング
- STLUX照明制御
- STNRGパルス幅変調コントローラ
コンパイラサポート
STM8は、無料のSmall Device Cコンパイラ、無料のクローズドソースのCosmic Cコンパイラ[3] 、および非フリーのIAR CおよびRaisonanceコンパイラによってサポートされています。Cの他に、オープンソースのSTM8 eForth [4] 、 STM8用の対話型Forthシステムがあります。
ST7と比較した変更点
STM8 命令セットは主に ST7 のスーパーセットですが、バイナリ互換性は完全ではありません。
X レジスタと Y レジスタの操作は 16 ビットに拡張されます。したがって、ロードとストアは 1 バイトではなく 2 バイトのメモリにアクセスします。(また、ハーフ キャリー フラグは、16 ビットの結果のビット 3 からビット 4 へのキャリーではなく、ビット 7 からビット 8 へのキャリーを反映するように変更されました。)
割り込みは、ST7 の 5 バイトではなく 9 バイトの状態をプッシュします。
乗算命令は、16 ビットの積を X と A の間で割るのではなく、指定されたインデックス レジスタ (例: X) に格納します。
メモリから 8 ビット アドレスをフェッチする間接アドレッシング モード (オペコード92 2x、、、、、、、および) は削除されました。すべての間接アドレッシング モードは 16 ビット アドレスをフェッチします。新しいプレフィックス バイトが追加され、16 ビット アドレス92 3xから始まる間接をエンコードするために使用されます。
92 Bx92 6x92 Ex91 6x91 Ex72
ビット操作命令は、16 ビット アドレスを取得し、72プレフィックス バイトを必要とするように変更されました。プレフィックスのないオペコード0xと、1xそれらが以前占有していたものは、代わりにスタック ポインター相対アドレス指定に使用されます。
めったに使用されない分岐命令の中には、プレフィックスを必要とするオペコードが変更され90、プレフィックスのないオペコードは V フラグに依存する符号付き分岐に再割り当てされるものもあります。
X レジスタをターゲットとするロード命令と比較命令は、X レジスタによってインデックス付けされるアドレス指定モードを使用する ST7 ではほとんど役に立ちません。STM8 では、このような操作で X レジスタによってインデックス付けされるメモリ オペランドを指定すると、レジスタ オペランドは Y に変更されます。90プレフィックスを使用すると、レジスタが反転され、インデックス レジスタが Y、オペランド レジスタが X になります。
パフォーマンスの大きな違いの 1 つは、STM8 が 1 サイクルあたり ROM から 32 ビットをフェッチし、多くの命令の実行に 1 サイクルかかることです。命令の長さと必要なサイクル数によっては、RAM からの実行は多少遅くなります。対照的に、ST7 は 1 サイクルあたり 8 ビットをフェッチし、命令バイトごとに 1 サイクルかかります。
命令セット
STM8 オペコード バイトのほとんどは、1 ビットのタイプ (1 オペランドまたは 2 オペランド)、3 ビットのアドレッシング モード、および 4 ビットのオペコードで構成されます。6 つのアドレッシング モードと 12 の 1 オペランド オペコードのみが割り当てられ、他の命令を配置するためのエンコーディング スペースが残されます。
STM8 命令は、オプションのプレフィックス バイト ( 、、、または)、オペコード バイト、および数バイト (最大 4 バイトですが、2 バイトを超えることはまれ) のオペランドで構成されます。プレフィックス バイトは、ほとんどの場合、メモリ オペランドを指定するために使用されるアドレス指定モードを変更しますが、プレフィックスとによってオペコード バイトの意味が完全に変わる場合もあります。
72169016911692167290
プレフィックスは、90次の命令の X と Y を交換します。下の表では、これらのバリアントは、"X/Y" と記述することで 1 行にまとめられており、"X" または "Y" のいずれかを意味します。プレフィックスは、90新しいオペコードを導入するために 2 か所で使用されます。BCPL 命令と BCCM 命令、および一部の分岐条件です。
プレフィックスは、92オフセット オペランド ( addr16 ,X) を持つ命令を間接アドレッシング ([ addr8 ],X) に変換します。オフセットは、メモリ内の 16 ビット オフセット値の 8 ビット アドレスに置き換えられます。この機能にのみ使用されます。
プレフィックスには91前述の両方の効果があり、( addr16 ,X) アドレッシング モードを ([ addr8 ],Y) に変換します。
プレフィックスは、72あまり規則的ではないパターンで、さまざまな場所で使用されます。場合によっては、新しいアドレッシング モード (特に ([ addr16 ],X) 16 ビット間接モード) が導入されますが、完全に新しい操作も多数導入されます。
オペランド アドレッシング モードが X でインデックス付けされる CPW および LDW 命令の場合、STM8 はデフォルトで X ではなく Y レジスタを使用します。90プレフィックスを適用すると、X と Y が交換され、レジスタは X になり、アドレッシング モードは Y でインデックス付けされます。
参考文献
- ^ Carlson, Jay (2017年9月15日). “ST STM8” . 2018年6月12日閲覧。
- ^ abc 「PM0044: STM8 CPU プログラミング マニュアル」(PDF)。STMicroelectronics。2011 年 9 月。文書 13590 Rev 3。2018年 6 月 10 日閲覧。
- ^ 「COS-C-COMPILER - Cosmic のすべての STM8 向けの無料 C コンパイラ」(プレス リリース)。STMicroelectronics。2016年3 月 24 日閲覧。
- ^ 「STM8 eForth - ドキュメント付きのシンプルなµC向けのユーザーフレンドリーなForth」。GitHub 。 2022年11月18日。
外部リンク
- STM8のメーカーウェブサイト
- STM8 用 C コンパイラの比較
- STM8 用 eForth
- STM8に関連するHackadayの記事
- STM8 を使用した Hackaday プロジェクト
