このドキュメントは http://edu.net.c.dendai.ac.jp/ 上で公開されています。
近年に発達したマイコンとは、1 chip の中に中央演算装置の他にメモリーと I/Oポートが内蔵されたものです。 マイコンとは昔はマイクロコンピュータの略でしたが、現在はマイクロコント ローラーの略とされています。 これにより、様々な機器の制御を行うことができます。 さらに最近は高性能化して、プログラムメモリのフラッシュROM化、発振器、 アナログポート、シリアルポートの内蔵化などで、さらに様々な利点が生まれ ました。
このようなマイコンで機器を制御すると次のような利点があります。
古くからこの世界をリードしてきたのは Intel社(8051)と Microchip社(PIC)です。 特に、プログラムを簡単に何度でも書き換えができるフラッシュメモリーを搭 載した Microchip 社の PIC16F84A は大ヒットしました。 PIC16F84A の特徴は下記の通りです。
その後、内部発信機やADコンバータなど様々な機能が付加された、多彩なマイ コンが登場しました。
Atmel の AVR シリーズは PIC 16F84A と同時期に登場しました。 ハードウェア的な性能はほぼ同等である上で、ソフトウェア的にはPICに無い 特徴を持っています。
この講義で使用する 20 pin パッケージの 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は次のような構成になっています
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 あります。
なお、このようなプログラム領域とデータ領域が分離しているコンピュータの
方式はノイマン型とは呼ばず、
この講義では主にマクロアセンブラを使ったクロス開発を 行います。
我々が今まで体験してきたプログラミングでは、実際にプログラムを動かすコン ピュータを使ってプログラムの開発していました。 しかし、マイコンなどの組み込み系の開発の場合、マイコンだけを使ってプロ グラミングを行うことは困難です。 そこで、 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 命令はありません。
アセンブラは基本的には文字列を数値に変換するだけですので仕組みは簡単で す。 但し、それ以外にも次のような仕事をします。
マクロ機能の付いているアセンブラをマクロアセンブラと言い、 付いてないアセンブラと区別することがあります。 CPU に対する命令ではなく、アセンブラに対して変数やマクロの定義を指示す るものをディレクティヴと言います。 AVR Assembler Users Manual には命令表とディレクティヴの説明が書いてありま す。
統合開発環境(Integrated Development Environment)とは通常プログラムの作 成、実行、デバッグができるプログラム環境を言います。 Atmel 社は AVR 用に Atmel Studio という IDE を提供しています。本授業 でもこれを使用します。 Atmel 社のホームページの Design Support から Atmel Studio IDEを選んで ください。 そこから、Windows 用の Atmel Studio の Installer をダウンロードしてく ださい。
AVR にプログラムを書き込むにはプログラマと呼ばれるパソコンからの書き込 み装置が必要です。 Atmel 社から安価で完成した回路中のマイコンにプログラムを書き、さらに 開発環境 Atmel Studio のデバッガと連携できる In-System Programmer AVRISP mkII を入手してください(2013年8月現在秋月電子で3200円)。 パソコンの USB ポートとAVRの回路を接続するものです。
次回は開発環境を整備します。ブレッドボードで実験回路の構成、 IDE とプ ログラマを使い、テストプログラムによる開発環境のテストを行います。