• 検索結果がありません。

ADC 8 ADC 7 ADC 6 ADC 5 ADC 4 ADC 3

ドキュメント内 mega8.pdf (ページ 134-146)

USART

ADC 9 ADC 8 ADC 7 ADC 6 ADC 5 ADC 4 ADC 3

7 6 5 4 3 2 1 0

ADCL

ADC0 - - -

-ADC1

A/D変換が完了すると、その結果がこれら2つのレジスタで得られます。

ADCLが読まれると、A/Dデータ レジスタはADCHが読まれるまで更新されません。従ってこの結果が左揃えで、且つ8ビットを越える精 度が必要とされないなら、ADCHを読むことで用が足ります。さもなければADCLが初めに、その後にADCHが読まれなければなりま せん。

A/D多重器選択レジスタ(ADMUX)の左揃え選択(ADLAR)ビット(訳注:原文では「とA/Dチャネル選択(MUX3~0)ビット」となっていますが、

ATmega8は全チャネル同一形態の(差動入力がない)ため、この部分は不適切です)は、このレジスタから結果を読む方法に影響を及ぼし ます。ADLARが設定(1)されると結果は左揃えにされます。ADLARが解除(0)されていると(既定)、結果は右揃えにされます。

ADC9~0 : A/D変換結果 (ADC Conversion result)

これらのビットは132頁の「A/D変換の結果」で詳述されるように変換での結果を表します。

ブート ローダ (書き込み中読み出し可能な自己プログラミング)

ブート ローダ支援はMCU自身によるプログラム コードのダウンロードとアップロード用の真の書き込み中の読み出しが可能な自己プログラミング機 構を提供します。この特徴はフラッシュ メモリに常駐するブート ローダ プログラムを使用するMCUによって制御される柔軟な応用ソフトウェア更 新を可能にします。ブート ローダ プログラムはフラッシュ メモリ内にコードを書き(プログラム)、コードを読み、またはプログラム メモリからコードを読むの に、利用可能なデータ インターフェースと関連する規約のどれもが使用できます。ブート ローダ領域内のプログラム コードはブート ローダ メモリを含 むフラッシュ メモリ全体を書く能力を持ちます。従ってブート ローダは自身をも変更でき、この機能がそれ以上必要とされないなら、そのコー ドから自身を消去することもできます。ブート ローダ メモリの容量はヒューズで設定可能で、ブート ローダは個別に設定可能な2組の独立した ブート施錠ビットを持ちます。これは異なる保護レベルを選択する独特な柔軟性を使用者に与えます。

特徴

書き込み中読める(Read-While-Write)自己プログラミング

柔軟性のあるブート ローダ メモリ容量

高い安全性 (柔軟な保護用の独立したブート施錠ビット)

リセット ベクタ選択用の独立したヒューズ

最適化されたページ容量 (注1)

効率的なコード手法

効率的な読み-変更-書き(リード モデファイ ライト)支援

注1: ページはプログラミング中に使用される多数のバイトから成るフラッシュ メモリの区画です(145頁の表89.参照)。このページ構成は通常動 作に影響を及ぼしません。

フラッシュ メモリの応用領域とブート ローダ領域

フラッシュ メモリは応用領域とブート ローダ領域の2つの主な領域で構成されます(図102.参照)。各領域の容量は143頁の表82.と図102.で 示されるようにBOOTSZヒューズによって設定されます。これら2つの領域は個別の施錠ビットの組を持つため、異なる保護レベルを持てま す。

応用領域

応用領域は応用コードを格納するのに使用されるフラッシュ メモリの領域です。応用領域用保護レベルは応用ブート施錠ビット(ブート施錠ビット 0)によって選択できます(137頁の表78.参照)。応用領域から実行される時にSPM命令が禁止されるので、応用領域はどんなブート ロー ダ コードも決して格納し得ません。

ブート ローダ領域 (BLS)

応用領域が応用コード格納用に使用されるのに対して、SPM命令はBLSから実行する時にだけプログラミングを始められるので、ブート ローダ ソフトウェアはBLSに格納されなければなりません。SPM命令はBLS自身を含む全てのフラッシュ メモリをアクセスできます。ブート ローダ領 域用保護レベルはブート ローダ施錠ビット(ブート施錠ビット1)によって選択できます(137頁の表79.参照)。

フラッシュ メモリの書き込み中に読み出し可能な領域と不能な領域

どちらのアドレスがプログラミングされるかによって、CPUが書き込み中の読み出しを支援するか、ブート ローダ ソフトウェアが更新中にCPUが 停止されるかのどちらです。上で記述されるようなBOOTSZヒューズによって設定可能な2つの領域に加え、フラッシュ メモリは書き込み中 読み出し可能な(RWW)領域と書き込み中読み出し不能な(NRWW)領域の2つの固定領域にも分けられます。RWWとNRWW領域間 の境界は136頁の図102.と143頁の表83.で与えられます。この2つの領域間の主な違いを次に示します。

RWW領域側に配置されたページを消去または書くとき、NRWW領域はその動作中に読むことができます。

NRWW領域側に配置されたページを消去または書くとき、その全ての動作中にCPUは停止されます。

ブート ローダ ソフトウェア動作中、使用者ソフトウェアがRWW領域側に配置されるどのコードも決して読めないことに注意してください。「書き込 み中読み出し可能領域」という記述はプログラミング(消去または書き込み)される領域としての引用で、ブート ローダ ソフトウェアが更新中に 実際に読まれる領域ではありません。

訳補: 上の記述はNRWW領域からRWW領域をプログラミングするという前提で、消去または書き込みを行う側ではなく、行われる側でこ の名称が定義されていることを意味します。即ち、NRWW領域からRWW領域をプログラミングすると、NRWW領域のプログラムは通 常通り動作する(即ち読める)ので、プログラミングされる側はRWW領域と名付けられ、この逆ではCPUが停止する(即ち読めない) ので、NRWW領域と名付けられているという意味です。

書き込み中読み出し可能 (RWW) 領域

ブート ローダ ソフトウェア更新がRWW領域側のページをプログラミングする場合、フラッシュ メモリからコードを読むことが可能ですが、NRWW領域 に配置されるコードだけです。プログラミング実行中、そのソフトウェアはRWW領域が決して読まれないことを保証しなければなりません。使 用者ソフトウェアがプログラミング中に(例えば、CALL,JMP,LPM系命令または割り込みによって)RWW領域側に配置されるコードを読もうとす ると、そのソフトウェアは未知の状態へ行き着くかもしれません。これを避けるために割り込みは禁止、またはブート ローダ領域へ移動のど ちらかにされるべきです。ブート ローダ領域は常にNRWW領域に配置されます。RWW領域が読み出しに対して妨げられている限り、

SPM命令制御レジスタ(SPMCR)のRWW領域多忙(RWWSB)ビットが論理1として読めます。プログラミングが完了した後、RWW領域に配置 したコードを読む前にRWWSBはソフトウェアによって解除(0)されなければなりません。RWWSBを解除(0)する方法の詳細については138 頁の「SPMCR - SPM命令制御レジスタ」をご覧ください。

書き込み中読み出し不能 (NRWW) 領域

NRWW領域に配置したコードはブート ローダ ソフトウェアがRWW領域内のページを更新する時に読めます。ブート ローダ コードがNRWW領域 を更新するとき、全てのページ消去またはページ書き込み動作中にCPUが停止されます。

表77. 書き込み中読み出し可能機能 プログラミング中にZポインタで指定される領域

RWW領域 NRWW領域

CPU動作 プログラミング中に読める領域

通常動作 NRWW領域

停止 なし

RWW機能支援 あり なし 図101. RWW領域とNRWW領域の関係

書き込み中読み出し 可能 (RWW) 領域

書き込み中読み出し 不能 (NRWW) 領域 ZポインタRWW領域指定

ZポインタNRWW領域指定 プログラミング中の

命令読み込み可能 プログラミング中の

命令読み込み不能 (CPU停止)

BOOTSZ=11

応用プログラム 領域

$0000

RWW 領域 図102. 選択によるプログラム用フラッシュ メモリの領域分割

ブート ローダ

BOOTSZ=10

応用プログラム 領域

ブート ローダ 領域

BOOTSZ=01

応用プログラム 領域

ブート ローダ 領域

BOOTSZ=00

応用プログラム 領域

ブート ローダ 領域 NRWW領域開始位置

ブート ローダ領域開始位置 応用領域最終位置 RWW領域最終位置

NRWW 領域

ブート ローダ施錠ビット

ブート ローダ能力が必要とされないなら、フラッシュ メモリ全体が応用コード用に利用可能です。ブート ローダは個別に設定可能な独立した2 組のブート施錠ビットを持ちます。これは異なる保護レベルを選択する独特な柔軟性を使用者に与えます。

使用者は以下を選択できます。

MCUによって更新するソフトウェアからフラッシュ メモリ全体を保護

MCUによって更新するソフトウェアからフラッシュ メモリのブート ローダ領域だけを保護

MCUによって更新するソフトウェアからフラッシュ メモリの応用領域だけを保護

フラッシュ メモリ全体で更新するソフトウェアを許可

より多くの詳細については表78.と表79.をご覧ください。ブート施錠ビットはソフトウェアと直列または並列のプログラミング動作で設定(0)できま すが、これらのビットはチップ消去指令によってのみ解除(1)できます。一般書き込み禁止(LB動作種別2)はSPM命令によるフラッシュ メモリ のプログラミングを制御しません。同様に、試みられたなら、一般読み書き禁止(LB動作種別3)はLPM命令とSPM命令による読み込みも 書き込みも制御しません。(訳補:一般LBはLPM/SPM命令に関して無関係の意)

表78. 応用領域に対する保護種別 (0=プログラム、1=非プログラム)

BLB0 動作種別 BLB01 保護種別

0 0 1 BLB02

1 0 0 2

3 4

SPM命令は応用領域に書くことを許されません。

SPM命令による応用領域への書き込みと、ブート ローダ領域でのLPM命令による応用 領域からの読み込みが許されません。 (注)

ブート ローダ領域でのLPM命令による応用領域からの読み込みが許されません。 (注) 1

1

1 LPM, SPM命令が応用領域をアクセスすることに対して制限はありません。

注: BLB02=0で、割り込みベクタがブート ローダ領域に配置されていると、応用領域での実行時に割り込みが禁止されます。

表79. ブート ローダ領域に対する保護種別 (0=プログラム、1=非プログラム)

BLB1 動作種別 BLB11 保護種別

0 0 1 BLB12

1 0 0 2

3 4

SPM命令はブート ローダ領域に書くことを許されません。

SPM命令によるブート ローダ領域への書き込みと、応用領域でのLPM命令によるブート ローダ領域からの読み込みが許されません。 (注)

応用領域でのLPM命令によるブート ローダ領域からの読み込みが許されません。 (注) 1

1

1 LPM, SPM命令がブート ローダ領域をアクセスすることに対して制限はありません。

注: BLB12=0で、割り込みベクタが応用領域に配置されていると、ブート ローダ領域での実行時に割り込みが禁止されます。

ブート ローダ プログラムへの移行

ブート ローダへの移行は応用プログラムから分岐(Jump)または呼び出し(Call)によって行います。これはUSARTやSPIインターフェース経由で 受信した指令のような起点によって始められるかもしれません。代わりに、リセット後にリセット ベクタがブート ローダ領域開始アドレスを指示す るようにブート リセット(BOOTRST)ヒューズをプログラム(0)できます。この場合、ブート ローダがリセット後に開始されます。応用コードが設定された (書かれた)後、このプログラム(ブート ローダ)は応用コードの実行を始めることができます。このヒューズがMCU自身によって変更できないこと に注意してください。これは一旦ブート リセット ヒューズがプログラム(0)されると、リセット ベクタは常にブート ローダ リセットを指示し、このヒューズが 直列プログラミングまたは並列プログラミング インターフェースを通してのみ変更できることを意味します。

表80. ブート リセット ヒューズ (0=プログラム、1=非プログラム) BOOTRST

0 1

ブート ローダ リセット ブート ローダ開始アドレス(143頁の表82.参照) 応用リセット $0000

リセット後実行開始アドレス (リセット ベクタ)

ドキュメント内 mega8.pdf (ページ 134-146)

関連したドキュメント