第 1 回 マイコンとは

本日の内容


このドキュメントは http://edu.net.c.dendai.ac.jp/ 上で公開されています。

1-1. マイコンとは

近年に発達したマイコンとは、1 chip の中に中央演算装置の他にメモリーと I/Oポートが内蔵されたものです。 マイコンとは昔はマイクロコンピュータの略でしたが、現在はマイクロコント ローラーの略とされています。 これにより、様々な機器の制御を行うことができます。 さらに最近は高性能化して、プログラムメモリのフラッシュROM化、発振器、 アナログポート、シリアルポートの内蔵化などで、さらに様々な利点が生まれ ました。

このようなマイコンで機器を制御すると次のような利点があります。

  1. 制御部の部品点数を少なくできる
  2. 後からソフトウェアを書き換えることで、バージョンアップや仕様変更に も耐えうる
  3. 制御装置の開発、デバッグにソフトウェアの支援が受けられる

古くからこの世界をリードしてきたのは Intel社(8051)と Microchip社(PIC)です。 特に、プログラムを簡単に何度でも書き換えができるフラッシュメモリーを搭 載した Microchip 社の PIC16F84A は大ヒットしました。 PIC16F84A の特徴は下記の通りです。

  1. プログラムをフラッシュメモリーで書き換えられる
  2. 2.0V から 5.5Vの単一電源で良いため、乾電池が使用可能
  3. 各I/Oポートから直接 LED をドライブできる電流が得られる
  4. 命令数が 35しか無く、説明書が命令表込みで 86ページしかない。
  5. シリアル通信による書き込みができるので、書き込み機がシンプルで、初 期投資が安い

その後、内部発信機やADコンバータなど様々な機能が付加された、多彩なマイ コンが登場しました。

Atmel の AVR シリーズは PIC 16F84A と同時期に登場しました。 ハードウェア的な性能はほぼ同等である上で、ソフトウェア的にはPICに無い 特徴を持っています。

  1. メモリ空間はPICがバンクメモリである一方で、 AVR は連続していて使い やすい。大きな連続したエリアを利用できる。
  2. PIC は特別な領域に定義されたスタックにプログラムの番地しか入れられ ないが、AVR はメインメモリ上にスタックが設定さ れ、 push, pop 命令によりデータを出し入れできる。 さらに、データも利用できるスタックの実装により、C言語などの高級言語へ の親和性が高まる。
  3. PIC が35命令に対して、AVR は RISC とうたってますが 100命令以上あり ます。 しかし、増えた命令の内訳は以下のように妥当なものです。
    1. PICはレジスタが 1 つですが、AVR は多数の汎用レジスタ、インデックス レジスタ、I/Oポートへの入出力などの処理のための命令がある
    2. PIC は条件分岐をする際はフラグファイルレジスタのビットを検査するス キップ命令と、無条件分岐の2命令で実現します。したがって、bit 検査 命令(on, off)2種類と無条件分岐の合計3種類の命令のみしかありません。 一方 AVR は様々な条件分岐命令が存在するため、命令数の種類は多いが、1命 令で条件分岐ができる
    3. AVR にはフラグへの命令や、プログラムメモリへの命令がある
    4. さまざまな種類に関して、メモリマップや初期化の方法などのソフトウェ ア的な仕様がほぼ同じ

この講義で使用する 20 pin パッケージの ATtiny2313は、高性能なタイマー やアナログコンパレータなど、さらに高度な機能も内蔵しています。

ATTiny2313

1-2. ATtiny2313

とりあえず Atmel 社のページに行き、データシートを取得しましょう。 2013 年 8 月現在、検索欄に attiny2313 を入れると、一番上に ATtiny2313 の製品ページが見つかります。 Document タブを押すと 一番上に Document の項目に ATtiny2313 Complete というデータシートがあ ります。また、 一番下の方に Other という項目で AVR Instruction Set があります。 それら二つをダウンロードしてください。 そのほか、「AVR Assembler User Guide」もダウンロードしておいてください。

ATtiny2313 はローエンドの製品ながら、非常に高機能なので、この講義では 全ての機能を使いこなせるわけではありません。 機能の概略はデータシートの p.3 のブロックダイアグラムと p.4 のその説明 にあります。 ここに載っている内容を解説します。

基本構成

AVR コアは32個の汎用レジスタに対する豊富な命令セットを持っています。 すべての32個の汎用レジスタは算術論理ユニット(ALU)が接続され、二つの独 立したレジスタを1クロックサイクル内で一個の命令によりアクセスできます。 この結果、従来の CISC マイクロコントローラよりも10倍ほどの高速なスルー プットが得られます。

ATtiny2313は次のような構成になっています

  1. 2KB の In-System Programmable(組込み後に書き換え可能な) フラッシュ メモリ
  2. 128B の EEPROM
  3. 123B SRAM
  4. 18個の汎用 I/O線
  5. 32個の汎用レジスタ
  6. 1本の線によるインターフェイスのオンチップデバッグ
  7. 比較モード付きの二つの柔軟なタイマー/カウンター
  8. 内/外部割り込み
  9. プログラマブル USART
  10. 初期状態検出付きの汎用シリアルインターフェイス
  11. 内部発信機によるプログラマブルウォッチドッグ
  12. 3つのソフトウェアによる選択可能な節電モード
    Idleモード
    SRAM,Timer/Counter,割り込みシステムは機能したまま CPUを止める
    Power-Downモード
    レジスターの内容は保持したまま、次の割り込みやハードウェアリセット が来るまで、オシレータを止め、他のチップの機能をすべて利用不可にする
    Standby モード
    オシレータだけは動いていて、残りの装置は停止している状態。 これは低電力消費での高速な起動を実現します。

On-chip ISP フラッシュメモリーは、プログラムメモリーをシステムに組み込 んだ後で SPI シリアルインターフェイスや従来の不揮発性メモリプログラマ で再書き込みできます。 In-System 自己プログラム可能なフラッシュと 8-bit RISC CPU を一つのチッ プに組み込むことにより、 Atmel ATtiny2313 は 組み込み制御アプリケーションに対して高い柔軟性と費用対効果の高いソリュー ションを与えるパワフルなマイクロコントローラになっています。

ATtiny2313 AVR には C コンパイラ、マクロアセンブラ、プログラムデバッガ/シミュレータ 、 In-Circuit エミュレータ、評価キットが提供されています。

メモリはプログラム領域とデータ領域が内蔵されていて、プログラム 16 bit、 データ領域は 8 bit です。 p. 5 の TABLE 1-1 にあるようにプログラムは 2048 語、データ領域は通常の RAM が 128 byte と不揮発性の EEPROM が 128 byte あります。 なお、このようなプログラム領域とデータ領域が分離しているコンピュータの 方式はノイマン型とは呼ばず、ハーバードアーキテクチャと呼び ます。

1-3. 開発環境

この講義では主にマクロアセンブラを使ったクロス開発を 行います。

HEX ファイルとアセンブリ言語

我々が今まで体験してきたプログラミングでは、実際にプログラムを動かすコン ピュータを使ってプログラムの開発していました。 しかし、マイコンなどの組み込み系の開発の場合、マイコンだけを使ってプロ グラミングを行うことは困難です。 そこで、 Windows やLinux などの他のコンピュータを使用して開発します。 これをクロス開発と言います。

クロス開発の手順は次の通りです。 まず、インテル形式の HEX ファイルと言う機械語が書かれた特別な形式のテ キストファイルをパソコンのツールなどを利用して作ります。 そして、それをプログラマと呼ばれる装置でパソコンからマイコ ンにプログラムとして転送します。 この時、書き込み機にマイコンを入れるのではなく、完成したマイコン基板の 特定の信号ピンに書き込み機を接続して書き込むのを In-System Programmer と言います。

このように、インテル形式の HEX ファイルを作り、用意したプログラマで マイコンに書き込むことができればマイコンを動作させることができます。 インテル形式の HEX ファイルは 16 進数をメモ帳などで書き込めば作ること ができます。 しかし、 16 進数を書いてプログラムを作成するのはとても大変です。 そこで、人間の言葉と 16 進数を対応付けることを考えます。

例えば、0x2c01 という値は r0 レジスタに r1 レジスタの値を入れます。 これを 0x2c01 という形で覚えるより、r0 に r1 の値を移動する(move to r1 from r0)という意味で mov r0,r1 と書くと他 の代入の命令などと関連付けて覚えられ、また正確に記憶してなくても字面か ら意味が想像できるようになります。 このように実際の CPU を動作させる値と意味を想像できる単語を関連付けた ルールのことをアセンブリ言語と言います。 また、このアセンブリ言語で書かれたプログラムを実際に動作させる値の列 (というかインテルの HEX 形式のファイル)にするプログラムのことをア センブラと言います。特にマイコン用のアセンブラがそのマイコン以外 の(Windowsなどの)コンピュータで動作する場合、クロスアセンブ ラと言います。 アセンブリ言語で記述された AVR の命令の説明は AVR Instruction set にあ ります。但し、全ての命令が全部使用できる分けではないので、各マイコンで 利用可能な命令はデータシート巻末の Instruction set Summary を参照して ください。例えば ATtiny2313 には jmp 命令はありません。

アセンブラ

アセンブラは基本的には文字列を数値に変換するだけですので仕組みは簡単で す。 但し、それ以外にも次のような仕事をします。

  1. プログラムの位置やメモリの位置を示すために変数が使える
  2. 分岐命令(条件を調べて条件が合った時、別のプログラムの番地に制御を 移す命令)に関してプログラムの位置を変数で指定すると自動的に計算してく れる
  3. C 言語の #define のようにマクロが使用できる。 特定の単語に命令などを関連付けられる。

マクロ機能の付いているアセンブラをマクロアセンブラと言い、 付いてないアセンブラと区別することがあります。 CPU に対する命令ではなく、アセンブラに対して変数やマクロの定義を指示す るものをディレクティヴと言います。 AVR Assembler Users Manual には命令表とディレクティヴの説明が書いてありま す。

IDE

統合開発環境(Integrated Development Environment)とは通常プログラムの作 成、実行、デバッグができるプログラム環境を言います。 Atmel 社は AVR 用に Atmel Studio という IDE を提供しています。本授業 でもこれを使用します。 Atmel 社のホームページの Design Support から Atmel Studio IDEを選んで ください。 そこから、Windows 用の Atmel Studio の Installer をダウンロードしてく ださい。

プログラマの入手方法

AVRISP mkII AVR にプログラムを書き込むにはプログラマと呼ばれるパソコンからの書き込 み装置が必要です。 Atmel 社から安価で完成した回路中のマイコンにプログラムを書き、さらに 開発環境 Atmel Studio のデバッガと連携できる In-System Programmer AVRISP mkII を入手してください(2013年8月現在秋月電子で3200円)。 パソコンの USB ポートとAVRの回路を接続するものです。

1-4. 次回予告

次回は開発環境を整備します。ブレッドボードで実験回路の構成、 IDE とプ ログラマを使い、テストプログラムによる開発環境のテストを行います。


坂本直志 <sakamoto@c.dendai.ac.jp>
東京電機大学工学部情報通信工学科