Skip to content

Peripheral

askn37 edited this page May 12, 2024 · 17 revisions

modernAVR 周辺機能比較一覧

AVR各品種は型番からフラッシュメモリ搭載量、系統種別、外囲器ピン数を一意に知ることは出来るが より詳細な情報はデータシートやioヘッダファイルを参照しなければならない。 この文書では似たような型番間での差異を要約する。

掲載対象製品系統

  • tinyAVR-0/1/2系統
    • tinyAVR-1 はアナログ周辺機能重視品種。
    • tinyAVR-2 はUSART2組+SRAM強化品種。
    • PA0/UPDIに対してHV制御可能。
  • megaAVR-0系統
    • アナログ周辺回路は別電源区画。(AVDD/VDDが直結していない)
  • AVR_DA/DB/DD系統
    • AVR_DA はアナログ周辺機能重視品種。
    • AVR_DB は OPAMP機能と復電圧対応品種。(32pin以下ではPD0相当端子がVDD2に代替)
    • AVR_DD は復電圧対応品種。(少ピン)
    • AVR_DB/DD は主クロック用に外部高速水晶発振子を使用可能。(DA以前は方形波発振器のみ)
    • AVR_DDはPF6に対してHV制御可能。
  • AVR_EA系統
    • AVR_DA 相当のメモリマップ/周辺機能と tinyAVR-2 相当の 最大20MHz 主クロック制御器の組み合わせ。
    • 28/32/48pin外囲器。
    • 主クロック用に外部高速水晶発振子を使用可能。
    • PF6に対してHV制御可能。(8.2V?)
    • NVMCTRL も tinyAVR-2 との折衷仕様になりページバッファが復活。
    • 全種で TCA2組、TCB4組、USART3組。(TCDは削除)
    • EVSYS の PORT および RTC_PIT イベントが仕様変更。
  • AVR_EB系統(2023/07時点では詳細不明)
    • tinyAVR 相当の新品種で、内蔵主クロックは最大20Mhz?
    • 14/20/28/32pin外囲器。(AVR_DDに似る)
    • TCA/TCDが削除され、新たにTCE/TCFが搭載された。PLLが使用できる。
    • USART1組。
    • 新たにWEX機能(波形制御器?)が搭載された。
    • 新たにBOOTROW領域が用意され、PRODSIG、USERSIG番地が移動している。
  • AVR_DU系統
    • AVR_DBの設計をベースとし、復電圧対応の代わりに USB-IFを備えた品種。
    • USART2組。
    • 新たにBOOTROW領域が用意され、PRODSIG、USERSIG番地が移動している。

これら以前のAtmel世代製品(非UPDI品種)については論じない。

  • megaAVR-0 系統は同一型番で端子数違いの品種があり、要所では次のように補足する。
    • ATmega4809 48pin → 4809(q)(quad-line-package)
    • ATmega4809 40pin → 4809(d)(dual-line-package)
    • ATmega4808 32pin → 4808(q)(quad-line-package)
    • ATmega4808 28pin → 4808(d)(dual-line-package)

周辺機能数比較

型番 pin GPIO TCA TCB TCD USART SPI TWI ADC AIN DAC AC AINP/N PTC ZCD OPAMP CCL EVSYS EVOUT
tinyAVR-0
ATtiny202/402 8 6/2 1 1 - 1 1 1 1 6 - 1 1/1 - - - 2 2+1 1
ATtiny204/404/804 14 12/3 1 1 - 1 1 1 1 10 - 1 1/1 - - - 2 2+1 2
ATtiny406/806/1606 20 18/4 1 1 - 1 1 1 1 12 - 1 2/2 - - - 2 2+1 3
ATtiny807/1607 24 22/5 1 1 - 1 1 1 1 12 - 1 2/2 - - - 2 2+1 3
tinyAVR-1
ATtiny212/412 8 6/2 1 1 1 1 1 1 1 6 1 1 1/1 - - - 2 4+2 1
ATtiny214/414 14 12/3 1 1 1 1 1 1 1 10 1 1 1/1 - - - 2 4+2 2
ATtiny416/416auto 20 18/4 1 1 1 1 1 1 1 12 1 1 2/2 - - - 2 4+2 3
ATtiny417 24 22/5 1 1 1 1 1 1 1 12 1 1 2/2 - - - 2 4+2 3
ATtiny814 14 12/3 1 1 1 1 1 1 1 10 1 1 1/1 6/9 - - 2 4+2 2
ATtiny816 20 18/4 1 1 1 1 1 1 1 12 1 1 2/2 6/9 - - 2 4+2 3
ATtiny817 24 22/5 1 1 1 1 1 1 1 12 1 1 2/2 6/9 - - 2 4+2 3
ATtiny1614 14 12/3 1 2 1 1 1 1 2 10+4 3 3 7/3 6/9 - - 2 4+2 2
ATtiny1616/3216 20 18/4 1 2 1 1 1 1 2 12+8 3 3 10/4 12/36 - - 2 4+2 3
ATtiny1617/3217 24 22/5 1 2 1 1 1 1 2 12+12 3 3 12/6 14/49 - - 2 4+2 3
tinyAVR-2
ATtiny424/824/1624/3224 14 12/3 1 2 - 2 1 1 1 9 - 1 2/2 - - - 4 6 2
ATtiny426/826/1626/3226 20 18/4 1 2 - 2 1 1 1 15 - 1 3/3 - - - 4 6 3
ATtiny427/827/1627/3227 24 22/5 1 2 - 2 1 1 1 15 - 1 4/4 - - - 4 6 3
型番 pin GPIO TCA TCB TCD USART SPI TWI ADC AIN DAC AC AINP/N PTC ZCD OPAMP CCL EVSYS EVOUT
megaAVR-0
ATmega808/1608/3208/4808(d) 28 23/6 1 3 - 3 1 1 1 8 - 1 4/3 - - - 4 6 3
ATmega808/1608/3208/4808(q) 32 27/7 1 3 - 3 1 1 1 12 - 1 4/3 - - - 4 6 4
ATmega4809(d) 40 33/8 1 4 - 4 1 1 1 16 - 1 4/3 - - - 4 8 5
ATmega809/1609/3209/4809(q) 48 41/10 1 4 - 4 1 1 1 16 - 1 4/3 - - - 4 10 6
AVR_DA
AVR32/64/128DA28 28 23 1 3 1 3 2 1 1 10 1 3 9/9 18/81 1 - 4 8 3
AVR32/64/128DA32 32 27 1 3 1 3 2 2 1 14 1 3 9/9 22/121 1 - 4 8 4
AVR32/64/128DA48 48 41 2 4 1 5 2 2 1 18 1 3 10/10 32/256 2 - 6 10 6
AVR32/64/128DA64 64 55 2 5 1 6 2 2 1 22 1 3 10/10 46/529 3 - 6 10 7
AVR_DB
AVR32/64/128DB28 28 22 1 3 1 3 2 1 1 9 1 3 5/5 - 1 2 4 8 3
AVR32/64/128DB32 32 26 1 3 1 3 2 2 1 13 1 3 5/5 - 1 2 4 8 4
AVR32/64/128DB48 48 40 2 4 1 5 2 2 1 18 1 3 6/8 - 2 3 6 10 6
AVR32/64/128DB64 64 54 2 5 1 6 2 2 1 22 1 3 6/8 - 3 3 6 10 7
AVR_DD
AVR16/32/64DD14 14 11 1 2 1 1 1 1 1 7 1 1 3/1 - 1 - 4 6 3
AVR16/32/64DD20 20 17 1 2 1 1 1 1 1 13 1 1 3/1 - 1 - 4 6 4
AVR16/32/64DD28 28 23 1 3 1 1 1 1 1 19 1 1 3/2 - 1 - 4 6 4
AVR16/32/64DD32 32 27 1 3 1 1 1 1 1 23 1 1 3/2 - 1 - 4 6 4
型番 pin GPIO TCA TCB TCD USART SPI TWI ADC AIN DAC AC AINP/N PTC ZCD OPAMP CCL EVSYS EVOUT
AVR_EA
AVR16/32/64EA28 28 23 2 4 - 3 1 1 1 20 1 2 5/2 - - - 4 6 3
AVR16/32/64EA32 32 27 2 4 - 3 1 1 1 24 1 2 5/2 - - - 4 6 4
AVR16/32/64EA48 48 41 2 4 - 3 1 1 1 28 1 2 5/2 - - - 4 6 6

表にない RTC WDT CRCSCAN 機能は各1。
GPIO は外部入力同期/非同期割込数。(tinyAVR-0/1/2 megaAVR-0)
GPIO は外部入力割込数に一致。
AIN は ADC合計チャネル数。
DAC は機能数に関わらず OUT端子は1。
AINP/N は 正/負入力合計チャネル数。
PTC は自己/相互容量チャネル数。
CCL は機能数。
EVSYS は非同期/同期チャネル数。(tinyAVR-0/1)
EVSYS は総チャネル数。

なお。AVR_EB系統にTCA/TCBはなく、代わりにTCE/TCFが存在する。

UPDI

tinyAVR-0/1/2 megaAVR-0 AVR_DA/DB/DD DU EA EB
NVMCTRL v0 v2 v4 v3 v5

NVMCTRL の仕様が異なる。 UPDI機能の USERROW外部書込方法は互換。

HV電圧 機能 端子 系統
12V UPDI/RESET PA0 tinyAVR-0/1
9V-12V UPDI/RESET PA0 tinyAVR-2
8.2V RESET PF6 AVR_DD/DU/EA/EB
- UPDI PF7 AVR_DD/DU/EA/EB

megaAVR-0 AVR_DA/DB は HV機能なし。(UPDI端子は専用)
何れも HV電圧印加は単発パルス。(レベルではない)
tinyAVR-2 の HV許可電圧は 9V〜12V。(12V推奨)
AVR_DD の PF6端子定格は 9V。(8.2V推奨)
AVR_DU/EA/EB の PF6端子 絶対 定格は 9V。(8.2V推奨)

UPDI REVID

型番
$10 ATtiny1614 ATtiny1616/3216 ATtiny1617/3217 AVR128DB
$20 ATtiny202/402 ATtiny204/404/804/1604 ATtiny406 806/1606 ATtiny807/1607 ATtiny212/412 ATtiny214/414/814 ATtiny416/816 ATtiny417/817
$30 ATmega808/1608/3208/4808 ATmega809/1609/3209/4809 AVR_DA AVR32DB AVR64DB AVR_DD AVR_EA
$40 ATtiny424/824/1624/3224 ATtiny426/826/1626/3226 ATtiny427/827/1627/3227

UPDI_STATUSA が返す UPDI実装の改訂番号。(用途不明)

AVR系統識別子

書込器使用時に照会すべき識別子。 PRODSIGと通称されるIOレジスタ領域にあり、 個々はヘッダファイルでSIGNATURE_0/1/2と命名されている。

宣言名 説明
SIGNATURE_0 $1E 固定(マジックナンバー)
SIGNATURE_1 $98 フラッシュメモリ量256KiB(本書記述対象には存在しない)
$97 フラッシュメモリ量128KiB
$96 フラッシュメモリ量64KiBまたは48KiB
$95 フラッシュメモリ量32KiB
$94 フラッシュメモリ量16KiB
$93 フラッシュメモリ量8KiB
$92 フラッシュメモリ量4KiB
$91 フラッシュメモリ量2KiB
$90 フラッシュメモリ量1KiB(本書記述対象には存在しない)
SIGNATURE_2 - 後述

SIGNATURE_1=$96の場合、コード中では __AVR_ARCH__が 102=64KiB か 103=48KiB かで容量を判定できる。
UPDI層では SIB先頭が 'mega'か'AVR' かで判定できる。
SIGNATURE_2は $51か $52が 48KiBである。
SIGNATURE_0のアドレスは一般に 0x1100だが、AVR_EB系統のみは 0x1080である。

SIGNATURE_1/2-型番対照表

$91 $92 $93 $94 $95 $96 $97
$07 128DA64
$08 128DA48
$09 128DA32
$0A 128DA28
$0B 128DB64
$0C 128DB48
$0D 128DB32
$0E 128DB28
$12 64DA64
$13 64DA48
$14 64DA32
$15 64DA28
$16 64DB64
$17 64DB48
$18 64DB32
$19 64DB28
$1A 64DD32
$1B 64DD28
$1C 64DD20
$1D 64DD14
$1E 64EA48
$1F 64EA32
$20 214 417 817 1617 64EA28
$21 212 416 816 1616 3216 64DU32
$22 204 414 814 1614 3217 64DU28
$23 202 412 807 1607
$24 806 1606
$25 406 804 1604
$26 404 808 1608 3227
$27 402 827 1609 3226
$28 416auto 826 1627 3224
$29 824 1626
$2A 427 809 1624
$2B 426
$2C 424
$30 3208
$31 16DD32 3209
$32 16DD28 32DA48
$33 16DD20 32DA32
$34 16DD14 32DA28
$35 16EA48 32DB48
$36 16EA32 32DB32
$37 16EA28 32DB28
$38 16DU32 32DD32
$39 16DU28 32DD28
$3A 16DU20 32DD20
$3B 16DU14 32DD14
$3C 32EA48
$3D 32EA32
$3E 16EB32 32EA28
$3F 16EB28 32DU32
$40 16EB20 32DU28
$49 16EB14
$4E 32DU20
$4F 32DU14
$51 4808
$52 4809

3〜4桁数値型番の末尾 08 または 09 は ATmega、その他は ATtiny を表す。
表中の空欄には他系統の品種が入っていて未使用というわけではない。

__AVR_ARCH__

マクロ定数__AVR_ARCH__は、デバイスのメモリマップ(およびリンカースクリプト)と密接な関係にある。

  • __AVR_ARCH__=103は、CODE領域とDATA領域の合計が 64KiB未満で、CODE領域はDATA領域中の一部に全て固定的に MAPPING されている。AVR**以外は SPM/ELPM を使用できない。
  • __AVR_ARCH__=103は、CODE領域が 64KiBで、FLMAP(0か1、初期値1)が指定でき、CODE領域は 32KiBずつ DATA領域に MAPPING できる。RAMPZレジスタはなく(0固定で)、SPM/ELPM で CODE領域にリニアにアクセスできる。
  • __AVR_ARCH__=104は、CODE領域が 128KiBで、FLMAP(0から3、初期値3)が指定でき、CODE領域は 32KiBずつ DATA領域に MAPPING できる。RAMPZレジスタがあり(0か1が指定でき)、SPM/ELPM で CODE領域にリニアにアクセスできる。
Num Linker FLMAP RAMPZ 型番
103 avrxmega3.x - - tinyAVR-0/1/2、mrgaAVR-0、AVR16**、AVR32**(AVR8**)
102 avrxmega2.x o - AVR64**
104 avrxmega4.x o o AVR128**

AVR8**に相当する製品の販売や、公開ATDFは確認されていない。(ブリーフノート中には記載がある)
ベクターテーブルの粒度_VECTOR_SIZEは、__AVR_ARCH__とは無関係に、CODE領域が 8KiB以下なら 2、そうでなければ 4となる。

内蔵フラッシュメモリ

型番-フラッシュメモリ量一覧

系統 pin 2KiB 4KiB 8KiB 16KiB 32KiB
tinyAVR-0
8 ATtiny202 ATtiny402
14 ATtiny204 ATtiny404 ATtiny804 ATtiny1604
20 ATtiny406 ATtiny806 ATtiny1606
24 ATtiny807 ATtiny1607
tinyAVR-1
8 ATtiny212 ATtiny412
14 ATtiny214 ATtiny414 ATtiny814 ATtiny1614
20 ATtiny416 ATtiny816 ATtiny1616 ATtiny3216
24 ATtiny417 ATtiny817 ATtiny1617 ATtiny3217
tinyAVR-2
14 ATtiny424 ATtiny824 ATtiny1624 ATtiny3224
20 ATtiny426 ATtiny826 ATtiny1626 ATtiny3226
24 ATtiny427 ATtiny827 ATtiny1627 ATtiny3227
系統 pin 8KiB 16KiB 32KiB 48KiB
megaAVR-0
28 ATmega808 ATmega1608 ATmega3208 ATmega4808
32 ATmega808 ATmega1608 ATmega3208 ATmega4808
40 ATmega4809(d)
48 ATmega809 ATmega1609 ATmega3209 ATmega4809
系統 pin 8KiB 16KiB 32KiB 64KiB 128KiB
AVR_DA
28 AVR32DA28 AVR64DA28 AVR128DA28
32 AVR32DA32 AVR64DA32 AVR128DA32
48 AVR32DA48 AVR64DA48 AVR128DA48
64 AVR64DA64 AVR128DA64
AVR_DB
28 AVR32DB28 AVR64DB28 AVR128DB28
32 AVR32DB32 AVR64DB32 AVR128DB32
48 AVR32DB48 AVR64DB48 AVR128DB48
64 AVR64DB64 AVR128DB64
AVR_DD
14 AVR16DD14 AVR32DD14 AVR64DD14
20 AVR16DD20 AVR32DD20 AVR64DD20
28 AVR16DD28 AVR32DD28 AVR64DD28
32 AVR16DD32 AVR32DD32 AVR64DD32
AVR_DU
14 AVR16DU14 AVR32DU14
20 AVR16DU20 AVR32DU20
28 AVR16DU28 AVR32DU28 AVR64DU28
32 AVR16DU32 AVR32DU32 AVR64DU32
AVR_EA
28 AVR16EA28 AVR32EA28 AVR64EA28
32 AVR16EA32 AVR32EA32 AVR64EA32
48 AVR16EA48 AVR32EA48 AVR64EA48
AVR_EB
14 AVR16EB14
20 AVR16EB20
28 AVR16EB28
32 AVR16EB32

AVR_EA の ioヘッダファイルは 2023/03時点では 64KiB品種だけしか公開されていない。

フラッシュメモリ量目

  • KiB -- キロバイト単位のフラッシュメモリ量(型番から一意に求まる)
  • 総量 -- フラッシュメモリ総バイト量
  • 粒度 -- フラッシュメモリページ単位(消去単位)バイト量
  • 総数 -- フラッシュメモリページ総数

消去/書換操作はページ粒度単位でとなる。
この情報はブートローダーのような自己書換機構の実装で重要。NVMCTRLを参照。
粒度はそのまま消去アライメント境界になる。

KiB 総量 粒度 総数 型番
2 2048 64 32 ATtiny202/204 ATtiny212/214
4 4096 64 64 ATtiny402/404/406 ATtiny412/414/416/417 ATtiny424/426/427
8 8192 64 128 ATtiny804/806/807 ATtiny814/816/817 ATtiny824/826/827
16 16384 64 256 ATtiny1604/1606/1607 ATtiny1614/1616/1617 ATtiny1624/1626/1627
32 32768 128 256 ATtiny3216/3217 ATtiny3224/3226/3227
8 8192 64 128 ATmega808/809
16 16384 64 256 ATmega1608/1609 AVR16EAnn AVR16EBnn
32 32768 128 256 ATmega3208/3209
48 49152 128 384 ATmega4808/4809
32 32768 64 512 AVR32EAnn
64 65536 128 512 AVR64EAnn
16 16384 512 32 AVR16DDnn AVR16DUnn
32 32768 512 64 AVR32DAnn AVR32DBnn AVR32DDnn AVR32DUnn
64 65536 512 128 AVR64DAnn AVR64DBnn AVR64DDnn AVR64DUnn
128 131072 512 256 AVR128DAnn AVR128DBnn

以下は ioヘッダファイルで関係する宣言。

宣言名 説明 備考
__AVR_ARCH__ AVRアーキテクチャ識別値 フラッシュメモリ量は 103:64KiB未満 102:64KiB 104:128KiB
MAPPED_PROGMEM_START データ空間内フラッシュメモリ領域先頭番地 0x8000または0x4000(megaAVRのみ)
PROGMEM_START フラッシュメモリ開始番地 常にゼロ
FLASHSTART
PROGMEM_SIZE フラッシュメモリ領域総バイト量
PROGMEM_PAGE_SIZE フラッシュメモリ消去単位バイト量
PROGMEM_END フラッシュメモリ終了番地 総バイト量-1
FLASHEND

tinyAVR-0/1/2 と megaAVR-0 と AVR16/32Dx では、フラッシュメモリ全領域はデータアドレス空間内で見える。ただし megaAVR-0 は先頭番地が異なる。
AVR64/128Dx では切替選択されている 32KiB領域のみがデータアドレス空間内で見える。

ブート/コード/データ領域分割

FUSE項目に書くブート領域/応用領域分割制御値は 前述のフラッシュメモリページ粒度量 ではなく 専用のページ量単位を持つ。 この情報は ioヘッダファイルには記載されておらず、 データシートを確認しなければ判明しない。

系統 粒度 2KiB 4KiB 8KiB 16KiB 32KiB 48KiB 64KiB 128KiB
tinyAVR-0/1/2 256 B 8 16 32 64 128
megaAVR-0 256 B 32 64 128 192
AVR DA/DB/DD/DU 512 B 16 32 64 128 256
AVR EA/EB 256 B 64 128 256

以下は ioヘッダファイルで関係する宣言。 いずれも応用コード内からは読出専用のデータメモリ。 ゼロ値はフラッシュメモリ領域の最後まで使うことを意味する。 (ページ総数値が書かれていると見做す)

宣言名 説明 備考
FUSE_APPEND 応用領域境界ページ番号FUSE番地 256B単位品種
FUSE_BOOTEND ブート領域境界ページ番号FUSE番地 256B単位品種
FUSE_CODESIZE 応用領域境界ページ番号FUSE番地 512B単位品種
FUSE_BOOTSIZE ブート領域境界ページ番号FUSE番地 512B単位品種
__vectors * 割込ベクタ表先頭番地 ブート領域がなければゼロ、非ゼロでブートローダー有
_etext * 応用プログラム直後の先頭番地 ここから __data_load_end 前までは SRAM定数初期化値
__data_load_end * フラッシュメモリ未使用先頭番地 これ-1の次の粒度境界までを書込器は書き換える

* extern 参照が必要。リンクプロセスで確定する。

内蔵SRAM量目

各品種のSRAM搭載量は型番(フラッシュ総量)とは関わりがなく、比例関係もない。

割込などで全レジスタ・演算フラグ・復帰番地をスタックに積む場合 1段で 35byteを消費する。

KiB 総量 先頭番地 型番
1/8 128 0x3F80 ATtiny202/204 ATtiny212/214
1/4 256 0x3F00 ATtiny402/404/406 ATtiny412/414/416/417
1/2 512 0x3E00 ATtiny804/806/807 ATtiny814/816/817 ATtiny424/426/427
1 1024 0x3C00 ATtiny1604/1606/1607 ATtiny824/826/827 ATmega808/809
2 2048 0x3800 ATtiny1614/1616/1617/3216/3217 ATtiny1624/1626/1627 ATmega1608/1609
2 2048 0x7800 AVR16DDnn AVR16DUnn AVR16EAnn AVR16EBnn
3 3072 0x3400 ATtiny3224/3226/3227
4 4096 0x3000 ATmega3208/3209
4 4096 0x7000 AVR32DAnn AVR32DBnn AVR32DDnn AVR32DUnn AVR32EAnn
6 6144 0x2800 ATmega4808/4809
6 6144 0x6800 AVR64EAnn
8 8192 0x6000 AVR64DAnn AVR64DBnn AVR64DDnn AVR64DUnn
16 16384 0x4000 AVR128DAnn AVR128DBnn

フラッシュ容量が同格のチップでもより後発の世代ほど SRAMは増量されている。

以下はioヘッダファイルで関係する宣言。

宣言名 説明 備考
INTERNAL_SRAM_START SRAM領域開始番地
RAMSTART
INTERNAL_SRAM_SIZE SRAM総バイト量
RAMSIZE
INTERNAL_SRAM_END SRAM領域終了番地 RAMSTART+RAMSIZE-1
RAMEND スタックポインタ初期値(0x3FFFか0x7FFF)

RAMSTART位置はチップ施錠時の USERROW特殊書込時に要求されるため これに対応する外部書込器は個別型番毎の相違を承知していなければならない。

内蔵EEPROM量目

EEPROM領域はバイト単位で書込/消去ができる。 外部書込器からはページ粒度単位で読み書きする。

avrdudeでの1バイト単位転送はFUSE操作にしか行えない制約がある。 AVR Dx/Ex系列でのioヘッダ記載粒度は1だがこの定義のままだと実行エラーになるので 普通は他系列に倣って 16や 8を設定する。
(既定の avrdude.conf は ioヘッダファイル通りに書かれ、 対策されていないので EEPROMをブロック読み書きが正常にできない)

  • 総量 -- EEPROM総バイト量
  • 粒度 -- EEPROMページ粒度バイト量
  • 総数 -- EEPROMページ総数
総量 粒度 総数 型番
64 32 2 ATtiny202/204 ATtiny212/214
128 32 4 ATtiny402/404/406/804/806/807 ATtiny412/414/416/417/814/816/817 ATtiny424/426/427/824/826/827
256 32 8 ATtiny1604/1606/1607 ATtiny1614/1616/1617 ATtiny1624/1626/1627 ATmega808/809/1608/1609
256 64 4 ATtiny3216/3217 ATtiny3224/3226/3227 ATmega1608/1609/3208/3209/4808/4809
256 1 256 AVR_DDnn AVR_DUnn
512 1 512 AVR_DAnn AVR_DBnn
512 8 64 AVR_EAnn AVR_EBnn

ページバッファが存在するため tinyAVR-0/1/2 と megaAVR-0 のEEPROMは、バルク転送により Flashメモリ並みの高速で書くことができる。AVR_EAも同様にバルク転送可能だが、粒度が小さいため高速ではない。 AVR_DA/DB/DD/DUの EEPROM粒度は公称1byteだが、実際は2byteペア単位で書くことができる。それ以上は NVMCTRL_STATUS を確認しながらでないと書けないため、盲目的なバルク転送はできない。ページバッファもないため非常に書き込みが遅い。

以下は ioヘッダファイルで関係する宣言。

宣言名 説明 備考
EEPROM_START EEPROM開始番地 本書対象の全型番で 0x1400
MAPPED_PROGMEM_START
EEPROM_SIZE EEPROM総量
EEPROM_PAGE_SIZE EEPROMページ粒度
E2PAGESIZE
EEPROM_END EEPROM終了番地 EEPROM_START + EEPROM_SIZE - 1
E2END

USERROW量目

USERROWあるいはUSER_SIGNATURESと呼ばれる領域は、 追加のEEPROM領域として使用できる。 この領域はチップ消去に影響されない。 応用コード内からはバイト単位で読み書き可能。 外部書込器からは通常、ページ粒度単位で読み書きする。 チップが施錠されている場合でも、この領域のみは特別な手順で一方的に書き込みできる。

想定される用途は一般に製品シリアル番号や工場書込初期値の保存である。
よってコード内では普通、アドレス直接指定のデータ空間として読出しのみ行い、 書換には外部書込器を使用する。

  • 総量 -- USERROW総バイト量
  • 粒度 -- USERROWページ粒度バイト量
  • 総数 -- USERROWページ総数
総量 粒度 総数 型番
32 32 1 以下を除く
64 64 1 ATmega3208/3209/4808/4809 AVR_EAnn AVR_EBnn
256 256 1 AVR_DUnn

以下はioヘッダファイルで関係する宣言。

宣言名 説明 備考
USER_SIGNATURES_START USERROW開始番地 0x1300、0x1080(AVR_Dx/EA)、0x1200(AVR_EB)
USER_SIGNATURES_SIZE USERROW総量
USER_SIGNATURES_PAGE_SIZE USERROWページ粒度

USERROWmegaAVR/tinyAVRではEEPROMとして、AVR_Dx以降ではFlashメモリとして実装されている。従って(施錠中のUPDI書き換えを例外として)書き換えと消去方法は全く異なる。
また施錠中のUPDI特殊書き換えは読み戻しができず、またSRAM先頭番地を知らなければ書き込めないため、これを実装した書換器実装は稀である。少なくともavrdudeは対応していない。

BOOTROW量目

AVR_DU/EB 系統で新たに設定された不揮発メモリ。総量はUSERROWに同じであるが、 番地は従来のSIGNATURE_x位置 0x1100 にあり、 AVR_EB系統非対応書込器ではここが PRODSIGSIGNATURES_START)として読まれることに注意を要する。 代わりに本来のSIGNATURE_xは 0x1080(従来のUSERSIG)に、USERROWは 0x1200 に、それぞれ番地が移動している。

  • このため仮にEA系統のブートローダーを書き込むと、BOOTROWに真の情報が隠蔽されて騙されることになる。EB系統には他に拡張されたFUSE保護機能があるため、専用のブートローダーや書込器対応が必要になければ真に意図したNVM制御は獲得できないだろう。
Symbol tinyAVR / megaAVR DA/DB/DD/EA DU/EB
SIGNATURES_START / SIGNATURE_0 0x1100 0x1100 0x1080
USER_SIGNATURES_START (USERROW) 0x1300 0x1080 0x1200
BOOTROW_START (BOOTROW) - - 0x1100
総量 粒度 総数 型番
64 64 1 AVR_EBnn
256 256 1 AVR_DUnn

CLKCTRL

CLKCTRL(クロック制御器)の仕様は3種類の世代に分かれる。

tinyAVR-0/1/2 megaAVR-0 AVR_DA/DB/DD DU EA/EB
最大20/16MHz選択 最大24MHz 最大32MHz 最大20/16MHz選択

20MHz/16MHz世代 (megaAVR, tinyAVR, AVR_EA)

まず主クロック発振器OSCHFの発振周波数を FUSE設定で 20MHzと16MHzから選択しなければならない。 これは応用コード内で動的に変更できないため F_CPU コンパイル定数と乖離する状況が発生しうる。 それに応用コードで動的に変更できる主クロック分周比を掛けることにより、 F_CPUは次のように選択できる。 普通には 1MHzの整数倍になるどれかを選択する。 (1マイクロ秒を CPUクロックの整数倍にするため)

分周比 20MHz 16MHz
1 20000000L 16000000L
2 10000000L 8000000L
4 5000000L 4000000L
6 3333333L 2666666L
8 2500000L 2000000L
10 2000000L 1600000L
12 1666666L 1333333L
16 1250000L 1000000L
24 833333L 666666L
32 625000L 500000L
48 416666L 333333L
64 312500L 250000L

リセット後の既定分周比は6であるから、3.33MHzか2.66MHz動作で CPUは起動する。

スタートアップコードにてF_CPUから設定すべき分周比を求める場合、 2MHz選択は両系統にあるため実行時に FUSE値を調べなければこれを確定できない。 同様にブートローダー実装でも、FUSEを調べて UART分周比を定める必要がある。

なお、主クロック発振器には超低電力発振器 OSCULPを選ぶことも出来る。 この場合は分周比1として 32.768kHzとするのが普通だが、 分周比64を選べば 512Hz駆動とすることも出来る。(実用性についてはともかく)

主クロック供給にEXTCLKを選択した場合でも 動的に主クロック元選択と分周比設定は必要だ。 それを行うまでは既定のOSCHFで動作する。 従って旧世代のようにFUSE設定を間違えて主クロック停止状態になることはない。 ただしこの 20MHz/16MHz世代 では外部クロック供給元に アナログ水晶発振 を使うことは出来ない。 方形波出力の デジタル発振器を用意する必要がある。

EXTCLK入力端子は多くの型番で USART0既定端子と排他選択になる。
外部クロック供給上限は不明。(データシートに明言なし。おそらく20MHz)
AVR_EA の CLKCTRL は同様に設定できるが、シンボル定義は異なるためソースの直交性はない。

24Mhz世代

前世代と異なり、主クロック周波数選択には FUSEを使わず、動的に変更できる。 これに分周比を動的に変更して掛けられるので、F_CPUは以下の表から自由に選択できる。 しかしながら普通は1MHzの整数倍になるどれかを選択するだろう。

  • 非公式に、主クロック供給には32MHzと28Mhzも選択できるが定格外であって動作保証はない。
  • AVR_DUでは公式に32MHzと28Mhzも選択可能になった。
分周比 24MHz 20MHz 16MHz 12MHz 8MHz 4MHz 2MHz 1MHz 32MHz 28Mhz
1 24000000L 20000000L 16000000L 12000000L 8000000L 4000000L 2000000L 1000000L 32000000L 28000000L
2 - 10000000L - 6000000L - - - 500000L - 14000000L
4 - 5000000L - 3000000L - - - 250000L - 7000000L
6 (4000000L) 3333333L 2666666L - 1333333L 666666L 333333L 166666L 5333333L 4666666L
8 - - - 1500000L - - 125000L - 3500000L
10 2400000L - 1600000L 1200000L 800000L 400000L 200000L 100000L 3200000L 2800000L
12 - 1666666L - - - - - 83333L - 2333333L
16 - - - 750000L - - - 62500L - 1750000L
24 - 833333L - - - - - 41666L - 1166666L
32 - - - 375000L - - - 31250L - 875000L
48 - 416666L - - - - - 20833L - 583333L
64 - - - 187500L - - - 15625L - 437500L

分周して他と重複する設定は除いた。 目的の動作周波数が同じなら分周しないほうが電力効率と EMI静粛性に勝る。
リセット後既定分周比は6であるから、4MHz動作で CPUは起動する。
AVR64DU28/32の初期ロット(A3シリコン)はエラッタにより20MHz動作が推奨される

なお、主クロック発振器には超低電力発振器 OSCULPを選ぶことも出来る。 この場合は分周比1として 32.768kHzとするのが普通だが、 分周比64を選べば 512Hz駆動とすることも出来る。(実用性についてはともかく)

主クロック供給にEXTCLKを選択した場合でも 動的に主クロック元選択と分周比設定は必要だ。 それを行うまでは既定のOSCHFで動作する。 従って旧世代のようにFUSE設定を間違えて主クロック停止状態になることはない。 この世代ではアナログ水晶発振子も、 方形波出力のデジタル発振器も利用できる。

EXTCLKあるいはXTAL入力端子は多くの型番で USART0既定端子と排他選択になる。
外部クロック供給は 32MHz まで支援。

EVSYS

EVSYS(事象システム)は旧世代AVRにはなかった周辺機能のひとつだ。 これは割込やCPUコード実行なしに、ある周辺機能が生成した事象イベントを 事象チャネル通信網を通じて 他の周辺機能に向けて転送・分配する。

EVSYSは tinyAVR-0系統で最初に採用されたが、 再三仕様が改定されたため以下の4世代が存在する。

版番号は本書で便宜的に付したもので、データシート原書に記述されたものではない。\

tinyAVR-0 tinyAVR-1 megaAVR-0 tinyAVR-2 AVR_DA/DB/DD DU/EA/EB
v1 v1.1 v2 v2.1 v2.2
  • v1.1以降は非同期事象元にPIT分周クロックを選べる。
  • v2では非同期/同期チャネル選択を使用部で区別しない。コード記述にも前後の互換性はない。
  • v2.1でTCBn計数器に事象計数が追加された。
  • v2とv2.1ではシンボル定義が異なるが糖衣構文(別名)を用意すれば前方互換にできる。
  • v2.2はv2.1とほぼ同じだがPORTとRTC_PITにEventGeneretorが導入された。
  • AVR_DUと AVR_EA/EBは同機能だが若干列挙体宣言名が異なる。

使用可能な事象チャネル数は型番により差異がある。

事象チャネル数 世代 型番
非同期2+同期1 v1 ATtiny202/204/402/404/406/804/806/807/1604/1606/1607
非同期4+同期2 v1.1 ATtiny212/214/412/414/416/417/814/816/817/1614/1616/1617/3216/3217
6 v2 ATmega808/1608/3208/4808
8 v2 ATmega809/1609/3209/4809
6 v2.1 ATtiny824/826/827/1624/1626/1627/3224/3226/3227 AVR_DDnn
8 v2.1 AVR_DA28/32 AVR_DB28/32
10 v2.1 AVR_DA48/64 AVR_DB48/64
6 v2.2 AVR64EA28/32/48 AVR_DUnn

tinyAVR-2が、tinyAVR-0/1とは EVSYS非互換であることに注意。

EVSYS v1x

この世代では事象チャネルに非同期型と同期型で明確な区別があり、分けて扱う必要がある。 事象使用部にも非同期型と同期型があり、同期使用部は非同期事象を受け取ることが出来ない。 非同期使用部はどちらの種別も受け取ることが出来る。

同期と非同期の区別は、事象処理にCPUクロックを必要とするか否かだ。 非同期型はCPUクロックと無関係に事象信号が伝播し、CPU休止状態でも生成される。 同期型はCPUクロックとタイミングを併せて(待機して)事象信号が伝播する。 従ってこれに満たない時間粒度の事象は無視されるかもしれない。

v1.1ではチャネル数が倍増し、PIT分周クロックに追加対応した。 これは DutyCycle 50%の非同期レベル事象である。

非同期チャネル生成部選択

ASYNCCH0 ASYNCCH1 ASYNCCH2 ASYNCCH3
$00 OFF
$01 CCL_LUT0
$02 CCL_LUT1
$03 AC0_OUT
$04 TCD0_CMPBCLR
$05 TCD0_CMPASET
$06 TCD0_CMPBSET
$07 TCD0_PROGEV
$08 RTC_OVF
$09 RTC_CMP
$0A PORTA_PIN0 PORTB_PIN0 PORTC_PIN0 PIT_DIV8192
$0B PORTA_PIN1 PORTB_PIN1 PORTC_PIN1 PIT_DIV4096
$0C PORTA_PIN2 PORTB_PIN2 PORTC_PIN2 PIT_DIV2048
$0D PORTA_PIN3 PORTB_PIN3 PORTC_PIN3 PIT_DIV1024
$0E PORTA_PIN4 PORTB_PIN4 PORTC_PIN4 PIT_DIV512
$0F PORTA_PIN5 PORTB_PIN5 PORTC_PIN5 PIT_DIV256
$10 PORTA_PIN6 PORTB_PIN6 AC1_OUT PIT_DIV128
$11 PORTA_PIN7 PORTB_PIN7 AC2_OUT PIT_DIV64
$12 UPDI AC1_OUT AC1_OUT
$13 AC1_OUT AC2_OUT AC2_OUT
$14 AC2_OUT

品種により実装されていない生成部は選択不可。
太字はv1(2ch+1ch品種)でも使用可能な事象。

同期チャネル生成部選択

SYNCCH0 SYNCCH1 SYNCCH0 SYNCCH1
$00 OFF $0B PORTC_PIN4 PORTB_PIN3
$01 TCB0 $0C PORTC_PIN5 PORTB_PIN4
$02 TCA0_OVF_LUNF $0D PORTA_PIN0 PORTB_PIN5
$03 TCA0_HUNF $0E PORTA_PIN1 PORTB_PIN6
$04 TCA0_CMP0 $1F PORTA_PIN2 PORTB_PIN7
$05 TCA0_CMP1 $10 PORTA_PIN3 TCB1
$06 TCA0_CMP2 $11 PORTA_PIN4
$07 PORTC_PIN0 $12 PORTA_PIN5
$08 PORTC_PIN1 PORTB_PIN0 $13 PORTA_PIN6
$09 PORTC_PIN2 PORTB_PIN1 $14 PORTA_PIN7
$0A PORTC_PIN3 PORTB_PIN2 $15 TCB1

品種により実装されていない生成部は選択不可。
SYNCCH0で扱える事象は v1(太字)と v1.1 で共通。

TCBnのシンボルはCAPTイベントを示す。 これは割込生成に同じだが、INTFLAGSビットを消去しなくとも関係なく 生成条件を満たせばパルス生成される点で割込と異なる。 これはTCAn事象等の他の事象イベントについても同じ。

非同期チャネル使用部

レジスタ名 使用部 レジスタ名 使用部
ASYNCUSER0 TCB0 ASYNCUSER6 TCD0EV0
ASYNCUSER1 ADC0 ASYNCUSER7 TCD0EV1
ASYNCUSER2 CCL_LUT0EV0 ASYNCUSER8 EVOUT0
ASYNCUSER3 CCL_LUT1EV0 ASYNCUSER9 EVOUT1
ASYNCUSER4 CCL_LUT0EV1 ASYNCUSER10 EVOUT2
ASYNCUSER5 CCL_LUT1EV1 ASYNCUSER11 TCB1
ASYNCUSER12 ADC1
$00 $01 $02 $03 $04 $05 $06
説明 OFF SYNCCH0 SYNCCH1 ASYNCCH0 ASYNCCH1 ASYNCCH2 ASYNCCH3

太字はv1(2ch+1ch品種)でも使用可能。

同期チャネル使用部

レジスタ名 使用部
SYNCUSER0 TCA0
SYNCUSER1 USART0
$00 $01 $02
説明 OFF SYNCCH0 SYNCCH1

太字はv1(2ch+1ch品種)でも使用可能。
TCA0は 計数事象で、形態は設定依存。
USART0は IrDA事象入力用。

TCA0事象入力が同期チャネル選択部に限定されていることに注意。 つまり非同期事象は直接計数対象に選べない。 この制限はv2で改正されたが、 v1でこれを緩和するには(TCA駆動サイクルのあいだ事象信号が継続するなら) 一旦非同期チャネル使用部のEVOUTnに転送し、 それと対応する同期チャネル選択部の PORTx_PIN2入力で受け取れば良い。 当然ながら複数のチャネル使用部と EVOUTnをひとつ消費する。

EVSYS v2.0/2.1

v2.0と v2.1には追加された事象以外に機能的な差はないが、 megaAVR-0 とそれ以外とでレジスタ名称が異なる。 以下では後発世代の記述を範として次のように読み替える。

  • 名称が違う=IOレジスタ番地が違うためもあるが、実現される機能は同一である。

事象システムレジスタ名相違対照表(EVSYS_~)

v2(megaAVR-0のみ) v2.1
STROBE SWEVENTA
- SWEVENTB
USERADCn USERADCnSTART
USEREVOUTx USEREVSYSEVOUTx
USERUSARTn USERUSARTnIRDA
USERTCAn USERTCAnCNTA
- USERTCAnCNTB
USERTCBx USERTCBnCAPT
- USERTCBnCOUNT

SWEVENTBは10チャネル品種のみにある。
megaAVR-0 は TCBで事象計数が出来ない。

型種別

記号 説明
A 非同期型
S 同期型

事象チャネル生成部選択(EVSYS_CHANNELn_~)

事象イベントに同期・非同期の区別はあるが、生成部-使用部の接続に制約はない。 異種接続はあいだに同期化回路が暗黙の内に挿入され、 故に使用部への事象到着は2~3CPUクロック遅延する。 非同期-非同期接続は CPU休止状態と無関係に(CPUクロックを待たずに)事象が到着する。

CHANNEL0 1 2 3 4 5 6 7 8 9
$00 OFF
$01 S UPDI_SYNC
$05 A MVIO
$06 A RTC_OVF
$07 A RTC_CMP
$08 A RTC_PIT_DIV8192 512 8192 512 8192 512 8192 512 8192 512
$09 A RTC_PIT_DIV4096 256 4096 256 4096 256 4096 256 4096 256
$0A A RTC_PIT_DIV2048 128 2048 128 2048 128 2048 128 2048 128
$0B A RTC_PIT_DIV1024 64 1024 64 1024 64 1024 64 1024 64
$10 A CCL_LUT0
$11 A CCL_LUT1
$12 A CCL_LUT2
$13 A CCL_LUT3
$14 A CCL_LUT4
$15 A CCL_LUT5
$20 A AC0_OUT
$21 A AC1_OUT
$22 A AC2_OUT
$24 S ADC0_RESRDY
$30 A ZCD0_OUT
$31 A ZCD1_OUT
$32 A ZCD2_OUT
$34 S OPAMP0_READY
$35 S OPAMP1_READY
$36 S OPAMP2_READY
$40 A PORTA_PIN0 PORTC_PIN0 PORTE_PIN0 PORTG_PIN0
$41 A PORTA_PIN1 PORTC_PIN1 PORTE_PIN1 PORTG_PIN1
$42 A PORTA_PIN2 PORTC_PIN2 PORTE_PIN2 PORTG_PIN2
$43 A PORTA_PIN3 PORTC_PIN3 PORTE_PIN3 PORTG_PIN3
$44 A PORTA_PIN4 PORTC_PIN4 PORTE_PIN4 PORTG_PIN4
$45 A PORTA_PIN5 PORTC_PIN5 PORTE_PIN5 PORTG_PIN5
$46 A PORTA_PIN6 PORTC_PIN6 PORTE_PIN6 PORTG_PIN6
$47 A PORTA_PIN7 PORTC_PIN7 PORTE_PIN7 PORTG_PIN7
$48 A PORTB_PIN0 PORTD_PIN0 PORTF_PIN0
$49 A PORTB_PIN1 PORTD_PIN1 PORTF_PIN1
$4A A PORTB_PIN2 PORTD_PIN2 PORTF_PIN2
$4B A PORTB_PIN3 PORTD_PIN3 PORTF_PIN3
$4C A PORTB_PIN4 PORTD_PIN4 PORTF_PIN4
$4D A PORTB_PIN5 PORTD_PIN5 PORTF_PIN5
$4E A PORTB_PIN6 PORTD_PIN6 PORTF_PIN6
$4F A PORTB_PIN7 PORTD_PIN7 PORTF_PIN7
CHANNEL0 1 2 3 4 5 6 7 8 9
$60 S USART0_XCK
$61 S USART1_XCK
$62 S USART2_XCK
$63 S USART3_XCK
$64 S USART4_XCK
$65 S USART5_XCK
$68 S SPI0_SCK
$69 S SPI1_SCK
$80 S TCA0_OVF_LUNF
$81 S TCA0_HUNF
$84 S TCA0_CMP0_LCMP0
$85 S TCA0_CMP1_LCMP1
$86 S TCA0_CMP2_LCMP2
$88 S TCA1_OVF_LUNF
$89 S TCA1_HUNF
$8C S TCA1_CMP0_LCMP0
$8D S TCA1_CMP1_LCMP1
$8E S TCA1_CMP2_LCMP2
$A0 S TCB0_CAPT
$A1 S TCB0_OVF
$A2 S TCB1_CAPT
$A3 S TCB1_OVF
$A4 S TCB2_CAPT
$A5 S TCB2_OVF
$A6 S TCB3_CAPT
$A7 S TCB3_OVF
$A8 S TCB4_CAPT
$A9 S TCB5_OVF
$B0 A TCD0_CMPBCLR
$B1 A TCD0_CMPASET
$B2 A TCD0_CMPBSET
$B3 A TCD0_PROGEV

品種により実装されていない生成部は選択不可。
RTC_PIT_DIVnn、USARTn_XCK、SPIn_SCK は DutyCycle 50%のクロックレベル信号。
v2.2(AVR_EA)ではRTC_PIT*PORT_PIN*が全て削除され、EventGeneretorが導入された。

事象チャネル使用部(EVSYS_USER~)

レジスタ名 レジスタ名 レジスタ名
CCLLUT0A A EVSYSEVOUTF A TCB3CAPT AS
CCLLUT0B A EVSYSEVOUTG A TCB3COUNT S
CCLLUT1A A USART0IRDA S TCB4CAPT AS
CCLLUT1B A USART1IRDA S TCB4COUNT S
CCLLUT2A A USART2IRDA S TCD0INPUTA A
CCLLUT2B A USART3IRDA S TCD0INPUTB A
CCLLUT3A A USART4IRDA S OPAMP0ENABLE A
CCLLUT3B A USART5IRDA S OPAMP0DISABLE S
CCLLUT4A A TCA0CNTA AS OPAMP0DUMP A
CCLLUT4B A TCA0CNTB S OPAMP0DRIVE A
CCLLUT5A A TCA1CNTA AS OPAMP1ENABLE A
CCLLUT5B A TCA1CNTB S OPAMP1DISABLE S
ADC0START A TCB0CAPT AS OPAMP1DUMP A
EVSYSEVOUTA A TCB0COUNT S OPAMP1DRIVE A
EVSYSEVOUTB A TCB1CAPT AS OPAMP2ENABLE A
EVSYSEVOUTC A TCB1COUNT S OPAMP2DISABLE S
EVSYSEVOUTD A TCB2CAPT AS OPAMP2DUMP A
EVSYSEVOUTE A TCB2COUNT S OPAMP2DRIVE A
$00 $01-$0A
説明 EVSYS_USER_OFF_gc EVSYS_USER_CHANNEL[0-9]_gc

品種により実装されていない使用部は選択不可。

TCAnCNTA と TCBnCAPT は同期・非同期事象のいずれでも緩衝なしに (1CPUサイクル内で)事象検出する。ただし計数の確実さは計時器駆動サイクルに依存。

EVSYS v2.2(AVR_EA/EB およびAVR_DU)

ほとんどv2.1を継承しているが、事象チャネル生成部からRTC_PIT*PORT_PIN*が全て削除され、EventGeneretorが導入された。 削除された事象に代わり以下が追加され、これに伴って全てのチャネルで機能が統一され、参照番号も全て振り直されている。

置き換えられた事象
RTC_PITEV0 RTC_PITEV1 *AVR_EA/EB
RTC_EVGEN0 RTC_EVGEN1 *AVR_DU
PORTA_EV0 PORTA_EV1
PORTB_EV0 PORTB_EV1
PORTC_EV0 PORTC_EV1
PORTD_EV0 PORTD_EV1
PORTE_EV0 PORTE_EV1
PORTF_EV0 PORTF_EV1

これらは新設されたRTC_PITEVGENCTRLAおよびPORTxEVGENCTRLレジスタに接続され、そちらで周波数選択およびピン番号を指定するようになった。要約すると、

  • 全ての事象チャネルは同等となり、機能によって番号を使い分ける必要はなくなった。
  • 各々は最大でもEV0EV1のふたつしか指定できなくなった。旧来に比べてRTC_PIT同時使用数は半減、PORT_PINは同時使用数が1/4に制限されたことになる。
  • チャネル間の差異がなくなったことに伴い、EVSYS_CHANNEL[n]_***_gcは全てEVSYS_CHANNEL_***_gcに改名・統一された。
  • AVR_EA/EBのRTC_PITEVnは、AVR_DUではRTC_EVGENnに改名された。

CCL/LUT

CCL(構成設定可能な注文論理回路:Configurable Custom Logic)は 旧世代AVRにはなかった周辺機能のひとつだ。 CPU動作と無関係に周辺機能同士あるいは外部端子との信号伝達を取り持つ。 この項は CCLの LUT(LookUp Table)への入力供給元選択について一覧する。

  • tinyAVR-0/1 と それ以後の USART と SPI の対応には相違がある。
系統 INSEL0 INSEL1 INSEL2 説明
共通
MASK 入力遮蔽(0固定:既定値)
FEEDBACK 自身のLUT[n]OUT(帰還)
LINK LUT[n+1]OUT(連結)
EVENTA 事象入力A(EVSYS)
EVENTB 事象入力B(EVSYS)
IO_IN0 IO_IN1 IO_IN2 外部端子から(PORTMUX)
tinyAVR-0
AC0_OUT AC0_OUT AC0_OUT AC0出力から
USART0_XCK USART0_TXD - USART0出力から
SPI0_SCK SPI0_MOSI SPI0_MISO SPI0出力から
TCA0_WO0 TCA0_WO1 TCA0_WO2 TCA0のWOnから
TCB0_WO TCB0_WO TCB0_WO TCB0のWOから
TCB1_WO TCB1_WO TCB1_WO TCB1のWOから
tinyAVR-1
AC0_OUT AC0_OUT AC0_OUT AC0出力から
AC1_OUT AC1_OUT AC1_OUT AC1出力から
AC2_OUT AC2_OUT AC2_OUT AC2出力から
USART0_XCK USART0_TXD - USART0出力から
SPI0_SCK SPI0_MOSI SPI0_MISO SPI0出力から
TCA0_WO0 TCA0_WO1 TCA0_WO2 TCA0のWOnから
TCB0_WO TCB0_WO TCB0_WO TCB0のWOから
TCB1_WO TCB1_WO TCB1_WO TCB1のWOから
TCD0_WOA TCD0_WOB TCD0_WOA TCD0のWOxから
tinyAVR-2
AC0_OUT AC0_OUT AC0_OUT AC0出力から
USART0_TXD USART1_TXD - USART[01]出力から
SPI0_MOSI SPI0_MOSI SPI0_SCK SPI0出力から
TCA0_WO0 TCA0_WO1 TCA0_WO2 TCA0のWOnから
TCB0_WO TCB1_WO - TCB[01]のWOから
megaAVR-0
AC0_OUT AC0_OUT AC0_OUT AC0出力から
USART0_TXD USART1_TXD USART2_TXD USART[012]出力から
SPI0_MOSI SPI0_MOSI SPI0_SCK SPI0出力から
TCA0_WO0 TCA0_WO1 TCA0_WO2 TCA0のWOnから
TCB0_WO TCB1_WO TCB2_WO TCB[012]のWOから
AVR_DA/DB
AC0_OUT AC1_OUT AC2_OUT AC[012]出力から
ZCD0_OUT ZCD1_OUT ZCD2_OUT ZCD[012]出力から
USART0_TXD USART1_TXD USART2_TXD USART[012]出力から
SPI0_MOSI SPI0_MOSI SPI0_SCK SPI0出力から
TCA0_WO0 TCA0_WO1 TCA0_WO2 TCA0のWOnから
TCA1_WO0 TCA1_WO1 TCA1_WO2 TCA1のWOnから
TCB0_WO TCB1_WO TCB2_WO TCB[012]のWOから
TCD0_WOA TCD0_WOB TCD0_WOC TCD0のWOxから
AVR_DD
AC0_OUT AC0_OUT AC0_OUT AC0出力から
ZCD3_OUT ZCD3_OUT ZCD3_OUT ZCD3出力から
USART0_TXD USART1_TXD USART1_TXD USART[01]出力から
SPI0_MOSI SPI0_MOSI SPI0_SCK SPI0出力から
TCA0_WO0 TCA0_WO1 TCA0_WO2 TCA0のWOnから
TCA1_WO0 TCA1_WO1 TCA1_WO2 TCA1のWOnから
TCB0_WO TCB1_WO TCB2_WO TCB[012]のWOから
TCD0_WOA TCD0_WOB TCD0_WOC TCD0のWOxから
AVR_EA
AC0_OUT AC1_OUT - AC[012]出力から
ZCD0_OUT ZCD1_OUT ZCD2_OUT ZCD[012]出力から
USART0_TXD USART1_TXD USART2_TXD USART[012]出力から
SPI0_MOSI SPI0_MOSI SPI0_SCK SPI0出力から
TCA0_WO0 TCA0_WO1 TCA0_WO2 TCA0のWOnから
TCA1_WO0 TCA1_WO1 TCA1_WO2 TCA1のWOnから
TCB0_WO TCB1_WO TCB2_WO TCB[012]のWOから

USARTn_xxx は 非同期USART または 同期USART主装置 動作時に有効。
SPIn_xxx は 主装置動作時に有効。
tinyAVR-0/1の SPIn_MISO 入力は結果的に外部からの信号入力に等価。(後続世代で廃止)
USART3以降 と TCAn_WO[345] と TCDn_WOD からの入力はない。

EVSYSに配送されていない信号も入力に含まれている点に注意。 例えば AVR_DD14/20品種で USART1_TXD端子の代替選択先が不足するのを CCL/LUT で補うことが出来る。

複数の TC[ABD]_WOn 信号を CCL/LUT で XOR すると 1bit PFM信号を得ることができる。

PORTMUX

PORTMUX(ポート多重器)は旧世代AVRにはなかった周辺機能のひとつだ。 これはマルチプレクサ/セレクタの集合で、 周辺機能と外部端子との内部配線を受け持つ。 代替配線先は事前に決められており、 クロスバー機構のような自由度はない。 周辺機能によって端子個別切替と PORT群単位切替とがある。

PORTMUX 対応世代

PORTMUX機能は EVSYS事象システムと密な関係にあり、 以下の2世代3種に分けることが出来る。

tinyAVR-0/1 megaAVR-0 tinyAVR-2 AVR_DA/DB/EA AVR_DD
v1 v2 v2'

v1/v2間は IOレジスタ名が異なり、EVOUTnの制御仕様も異なる。
AVR_DDは AVR_DBがベースだが独自の拡張がある。

PORTMUX 制御レジスタ対照表

v1 v2
CTRLA EVSYSROUTEA と CCLROUTEA
CTRLB USARTROUTEA と SPIROUTEA と TWIROUTEA
CTRLC TCAROUTEA
CTRLD TCBROUTEA

CTRLC は TCA0_WOn信号端子出力個別の有効・無効制御ビット。
tinyAVR-0/1/2以外の TCAROUTEA は TCA0_WOn 全体の対応 PORT群切替で、機能が違う。(制御互換性なし)

EVOUT 対応端子割付

各種の内部割込みや事象信号を外部端子に直接出力できる EVSYSの機能。

tinyAVR-0/1 EVOUT (v1)

  • 信号名は EVOUT0 EVOUT1 EVOUT2 となる。(数字)
    • 各々は次世代での EVOUTA EVOUTB EVOUTC と対応。(PORT[A-C])
  • CTRLA の対応ビット1でポート出力有効、0で無効。
    • 有効で該当PORT出力設定を覆す。(push-pull)
    • 代替ピン機能はない。
    • 無効でも EVSYSへの事象配送は有効。
機能 出力 8p 14p 20p 24p
EVOUT0 PA2
EVOUT1 PB2 ×
EVOUT2 PC2 × ×

tinyAVR-0/1 の EVOUT数は最大3。

megaAVR-0 tinyAVR-2 AVR_DA/DB/EA EVOUT (v2)

  • EVSYSROUTEAの該当ビット0で PIN2を既定選択、1で PIN7を代替選択。
    • EVSYSチャネル選択で EVOUTnに事象配送すると有効化され、
      PORT出力設定を覆す。(push-pull)
機能 代替 出力 14p 20p 24p 28p 32p 40p 48p 64p
EVOUTA DEFAULT PA2
ALT1 PA7
EVOUTB DEFAULT PB2 × × ×
ALT1 PB7 × × × × × ×
EVOUTC DEFAULT PC2 ×
ALT1 PC7 × × × × × ×
EVOUTD DEFAULT PD2 × × ×
ALT1 PD7 × × ×
EVOUTE DEFAULT PE2 × × × × ×
ALT1 PE7 × × × × × × ×
EVOUTF DEFAULT PF2 × × ×
ALT1 -* × × × × × × × ×
EVOUTG DEFAULT PG2 × × × × × × ×
ALT1 PG7 × × × × × × ×

* PF7は存在しないので無効。

AVR_DD EVOUT (v2')

機能 代替 出力 14p 20p 24p 28p 32p
EVOUTA DEFAULT PA2 ×
ALT1 PA7 ×
EVOUTC DEFAULT PC2
ALT1 PC7 × × × × ×
EVOUTD DEFAULT PD2 × × ×
ALT1 PD7
EVOUTF DEFAULT PF2 × × ×
ALT1 PF7

AVR_DD全外囲器に共通する端子はPC2/PD7/PF7で、他と異なる。
PF7は UPDI機能と排他。

CCL/LUT 対応端子割付

機能 IN0 IN1 IN2 OUT ALT 8p 14p 20p 24p 型番
CCL0 PA0 PA1 PA2 PA4 PB4 × × ATtiny406/806/1606 ATtiny1607 ATtiny816/1616/3216 ATtiny417/817/1617/3217 ATtiny426/826/1626/3226 ATtiny427/827/1627/3227
CCL0 PA0 PA1 PA2 PA4 - × × ATtiny202/402 ATtiny204/404/804/1604 ATtiny212/412 ATtiny214/414/814/1614 ATtiny424/824/1624/3224
CCL1 PC3 - - PA7 PC1 × × ATtiny406/806/1606 ATtiny1607 ATtiny816/1616/3216 ATtiny417/817/1617/3217 ATtiny426/826/1626/3226 ATtiny427/827/1627/3227
CCL1 - - - PA7 - × × ATtiny204/404/804/1604 ATtiny214/414/814/1614 ATtiny424/824/1624/3224
CCL2 PB0 PB1 PB2 PB3 PC6 × × × ATtiny427/827/1627/3227
CCL2 PB0 PB1 PB2 PB3 - × × ATtiny424/824/1624/3224 ATtiny426/826/1626/3226
CCL3 PC0 PC1 PC2 PC4 PA5 × × × ATtiny427/827/1627/3227
CCL3 PC0 PC1 PC2 - PA5 × × × ATtiny426/826/1626/3226
CCL3 - - - - PA5 × × × ATtiny424/824/1624/3224

代替設定可能なのは OUT端子のみで、INn端子は不変。
OUT先は EVSYS経由で EVOUTx に出すこともできる。
tinyAVR-0/1 の CCL/LUT数は2組。
tinyAVR-2 の CCL/LUT数は4組。

機能 IN0 IN1 IN2 OUT ALT 14p 20p 28p 32p 40p 48p 64p 型番
CCL0 PA0 PA1 PA2 PA3 PA6 × ATmega808/1608/3208/4808 ATmega809/1609/3209/4809 AVR_DA28/32/48/64 AVR_DB28/32/48/64 AVR_DD20/28/32 AVR_EA28/32/48
CCL0 PA0 PA1 - - - × × × × × × AVR_DD14
CCL1 PC0 PC1 PC2 PC3 PC6 × × × × ATmega809/1609/3209/4809 AVR_DA48/64 AVR_DB48/64 AVR_EA48
CCL1 PC0 PC1 PC2 PC3 - × × × ATmega808/1608/3208/4808 AVR_DA28/32 AVR_DB28/32 AVR_DD14/20/28/32 AVR_EA28/32
CCL2 PD0 PD1 PD2 PD3 PD6 × × ATmega808/1608/3208/4808 ATmega809/1609/3209/4809 AVR_DA28/32/48/64 AVR_EA28/32/48
CCL2 - PD1 PD2 PD3 PD6 × × × AVR_DB28/32/48/64 AVR_DD28/32
CCL2 - - - - PD6 × × × × × AVR_DD20/14
CCL3 PF0 PF1 PF2 PF3 PF6 × × × ATmega809/1609/3209/4809 ATmega808/1608/3208/4808 AVR_DA/DB64 AVR_DA/DB48 AVR_DA/DB32 AVR_EA32/48
CCL3 PF0 PF1 - - PF6 × × × × ATmega808/1608/3208/4808 AVR_DA/DB28 AVR_EA28
CCL4 PB0 PB1 PB2 PB3 PB6 × × × × × AVR_DA/DB64 AVR_DA/DB48 AVR_EA48
CCL5 PG0 PG1 PG2 PG3 PG6 × × × × × AVR_DA/DB64 AVR_DA/DB48 AVR_EA48

代替設定で切り替えられるのは OUT端子のみで、INn端子は不変。
OUT先は EVSYS経由で EVOUTx に出すこともできる。
megaAVR-0 の CCL/LUT数は 4組。
AVR_DA/DB48/64 の CCL/LUT数は 6組。
AVR_DA/DB32/28 の CCL/LUT数は 4組。
megaAVR-0 と AVR_DA/DB の PF6 は RESET機能と排他。

USART 対応端子割付

機能 代替 TxD RxD XCK XDIR 8p 14p 20p 24p 型番
USART0 DEFAULT PB2 PB3 PB1 PB0 × ATtiny204/404/804/1604 ATtiny406/806/1606 ATtiny1607 ATtiny214/414/814/1614 ATtiny416/1616/3216 ATtiny417/817/1617/3217 ATtiny424/824/1624/3224 ATtiny426/826/1626/3226 ATtiny427/827/1627/3227
USART0 DEFAULT PA6 PA7 PA3 PA0 × × × ATtiny202/402 ATtiny212/412
USART0 ALT1 PA1 PA2 PA3 PA4 × ATtiny204/404/804/1604 ATtiny406/806/1606 ATtiny1607 ATtiny214/414/814/1614 ATtiny416/1616/3216 ATtiny417/817/1617/3217 ATtiny424/824/1624/3224 ATtiny426/826/1626/3226 ATtiny427/827/1627/3227
USART0 ALT1 PA1 PA2 - - × × × ATtiny202/402 ATtiny212/412
USART1 DEFAULT PA1 PA2 PA3 PA4 × ATtiny424/824/1624/3224 ATtiny426/826/1626/3226 ATtiny427/827/1627/3227
USART1 ALT1 PC2 PC1 PC0 PC3 × ATtiny424/824/1624/3224 ATtiny426/826/1626/3226 ATtiny427/827/1627/3227

tinyAVR-0/1/2 の PA0 は RESET/UPDI機能と排他。
tinyAVR-0/1 の UARTは1組。
tinyAVR-2 の UARTは2組。

機能 代替 TxD RxD XCK XDIR 14p 20p 28p 32p 40p 48p 64p 型番
USART0 DEFAULT PA0 PA1 PA2 PA3 × ATmega808/1608/3208/4808 ATmega809/1609/3209/4809 AVR_DA28/32/48/64 AVR_DB28/32/48/64 AVR_DD20/28/32 AVR_EA28/32/48
USART0 DEFAULT PA0 PA1 - - × × × × × × AVR_DD14
USART0 ALT1 PA4 PA5 PA6 PA7 × ATmega808/1608/3208/4808 ATmega809/1609/3209/4809 AVR_DA28/32/48/64 AVR_DB28/32/48/64 AVR_DD20/28/32 2 AVR_EA28/32/48
USART0 ALT2 PA2 PA3 - - × × × AVR_DD20/28/32 AVR_EA28/32/48
USART0 ALT3 PD4 PD5 PD6 PD7 × × AVR_DD14/20/28/32 AVR_EA28/32/48
USART0 ALT4 PC1 PC2 PC3 - × × AVR_DD14/20/28/32 AVR_EA28/32/48
USART1 DEFAULT PC0 PC1 PC2 PC3 × × ATmega808/1608/3208/4808 ATmega809/1609/3209/4809 AVR_DA28/32/48/64 AVR_DB28/32/48/64 AVR_DD28/32 AVR_EA28/32/48
USART1 DEFAULT - * PC1 PC2 PC3 × × × × × AVR_DD14/20
USART1 ALT1 PC4 PC5 PC6 PC7 × × × × × ATmega809/1609/3209/4809(q) AVR_DA48/64 AVR_DB48/64 AVR_EA48
USART1 ALT1 PC4 PC5 -** - × × × × × × ATmega4809(d)
USART1 ALT2 PD6 PD7 - - × × AVR_DD14/20/28/32 AVR_EA28/32/48
機能 代替 TxD RxD XCK XDIR 14p 20p 28p 32p 40p 48p 64p 型番
USART2 DEFAULT PF0 PF1 PF2 PF3 × × ATmega808/1608/3208/4808 ATmega809/1609/3209/4809 AVR_DA32/48/64 AVR_DB32/48/64 AVR_EA32/48
USART2 DEFAULT PF0 PF1 - - × × × × × × ATmega808/1608/3208/4808(d) AVR_DA28 AVR_DB28 AVR_EA28
USART2 ALT1 PF4 PF5 - - × × × AVR_DA32/48/64 AVR_DB32/48/64 AVR_EA32/48
USART2 ALT1 PF4 PF5 PF6 - × × × ATmega808/1608/3208/4808(q) ATmega809/1609/3209/4809
USART3 DEFAULT PB0 PB1 PB2 PB3 × × × × ATmega809/1609/3209/4809 AVR_DA48/64 AVR_DB48/64
USART3 ALT1 PB4 PB5 PB6 PB7 × × × × × × AVR_DA64 AVR_DB64
USART3 ALT1 PB4 PB5 - - × × × × × ATmega809/1609/3209/4809 AVR_DA48 AVR_DB48
USART4 DEFAULT PE0 PE1 PE2 PE3 × × × × × AVR_DA48/64 AVR_DB48/64
USART4 ALT1 PE4 PE5 PE6 PE7 × × × × × × AVR_DA64 AVR_DB64
USART5 DEFAULT PG0 PG1 PG2 PG3 × × × × × × AVR_DA64 AVR_DB64
USART5 ALT1 PG4 PG5 PG6 PG7 × × × × × × AVR_DA64 AVR_DB64

megaAVR-0 と AVR_DA/DB/DD の PF6 は RESET機能と排他。
megaAVR-0 の USART2_ALTn には XCK代替あり。
megaAVR-0 28/32pin の UARTは3組各2選択。
megaAVR-0 40/48pin の UARTは4組各2選択。
AVR_DA/DB64 の UARTは6組各2選択。
AVR_DA/DB48 の UARTは5組各2選択。
AVR_DA/DB32/28 の UARTは3組各2選択。
AVR_DD の UARTは2組最大5選択。
* 対応外部端子はないが CCL/LUT 経由で外部端子に出力できる。(単線半二重動作は不可)
** 対応外部端子はないが EVSYS 経由で外部端子に出力できる。(同期主装置動作のみ)

XDIR は RS485動作時、XCK は同期動作時、RxDは受信有効時、TxDは送信有効時のみで使われ、 未動作または無効時は使用されないため空き端子は他の用途に用いても良い。

  • AVR_DD14/20 ではPC0端子が欠けているため複数USART同時使用には制約がある。 これについては [Special_AVR_DD14]が詳しい。

SPI 対応端子割付

機能 代替 MOSI MISO SCK SS 8p 14p 20p 24p 型番
SPI0 DEFAULT PA1 PA2 PA3 PA4 × ATtiny204/404/804/1604 ATtiny406/806/1606 ATtiny1607 ATtiny214/414/814/1614 ATtiny416/816/1616/3216 ATtiny417/817/1617/3217 ATtiny424/824/1624/3224 ATtiny426/826/1626/3226 ATtiny427/827/1627/3227
SPI0 DEFAULT PA1 PA2 PA3 PA0 × × × ATtiny202/402 ATtiny212/412
SPI0 ALT1 PC2 PC1 PC0 PC3 × × ATtiny406/806/1606 ATtiny1607 ATtiny416/816/1616/3216 ATtiny417/817/1617/3217 ATtiny426/826/1626/3226 ATtiny427/827/1627/3227
SPI0 ALT1 PC2 PC1 - - × × × ATtiny424/824/1624/3224
SPI0 ALT1 PA6 PA7 - - × × ATtiny202/402 ATtiny204/404/804/1604 ATtiny212/412 ATtiny214/414/814/1614

tinyAVR-0/1/2 の代替選択肢は2種。
tinyAVR-0/1/2 の PA0 は RESET/UPDI機能と排他。
SS端子の PORT方向が主装置動作、従装置動作の何れかを決定する。

tinyAVR-0/1/2 の 8pin/14pin品種は SCK/SS端子の代替先がないため代替選択は機能しない。 ただし SCKは CCL/LUTに配送されるので、シフトレジスタ接続等には使用可能。

機能 代替 MOSI MISO SCK SS 14p 20p 28p 32p 40p 48p 64p 型番
SPI0 DEFAULT PA4 PA5 PA6 PA7 × ATmega808/1608/3208/4808 ATmega809/1609/3209/4809 AVR_DA28/32/48/64 AVR_DB28/32/48/64 AVR_DD20/28/32 AVR_EA28/32/48
SPI0 ALT1 PC0 PC1 PC2 PC3 × × ATmega808/1608/3208/4808 ATmega809/1609/3209/4809 AVR_DA28/32/48/64 AVR_DB28/32/48/64
SPI0 ALT2 PE0 PE1 PE2 PE3 × × × × ATmega809/1609/3209/4809 AVR_DA48/64 AVR_DB48/64 AVR_EA48
SPI0 ALT3 PA0 PA1 PC0 PC1 × × × × AVR_DD28/32 AVR_EA28/32/48
SPI0 ALT3 PA0 PA1 - PC1 × × × × × AVR_DD14/20
SPI0 ALT4 PD4 PD5 PD6 PD7 × × AVR_DD14/20/28/32 AVR_EA28/32/48
SPI0 ALT5 PC0 PC1 PC2 PC3 × × × × AVR_DD28/32 AVR_EA28/32/48
SPI0 ALT5 - PC1 PC2 PC3 × × × × × AVR_DD14/20
SPI0 ALT6 PC1 PC2 PC3 PF7 × × AVR_DD14/20/28/32 AVR_EA28/32/48
SPI1 DEFAULT PC0 PC1 PC2 PC3 × × × AVR_DA28/32/48/64 AVR_DB28/32/48/64
SPI1 ALT1 PC4 PC5 PC6 PC7 × × × × × AVR_DA48/64 AVR_DB48/64
SPI1 ALT2 PB4 PB5 PB6 PB7 × × × × × × AVR_DA64 AVR_DB64
SPI1 ALT2 PB4 PB5 - - × × × × × × AVR_DA48 AVR_DB48

megaAVR-0 と AVR_DA/DB の代替選択肢は3種。
AVR_DA/DB は SPI2組。
AVR_DD の PF7 は UPDI機能と排他。
SS端子の PORT方向が主装置動作、従装置動作の何れかを決定する。

TWI 対応端子割付

機能 代替 SCL SDA 8p 14p 20p 24p 型番
TWI0 DEFAULT PB0 PB1 × ATtiny204/404/804/1604 ATtiny406/806/1606 ATtiny1607 ATtiny214/414/814/1614 ATtiny416/816/1616/3216 ATtiny417/817/1617/3217 ATtiny424/824/1624/3224 ATtiny426/826/1626/3226 ATtiny427/827/1627/3227
TWI0 DEFAULT PA1 PA2 × × × ATtiny202/402 ATtiny212/412
TWI0 ALT1 PA1 PA2 × ATtiny214/414/814/1614 ATtiny416/816/1616/3216 ATtiny417/817/1617/3217

tinyAVR-0/2 は代替設定未対応。
tinyAVR-1 の代替選択肢は2種。

機能 代替 SCL SDA SCL(S) SDA(S) 14p 20p 28p 32p 40p 48p 64p 型番
TWI0 DEFAULT PA2 PA3 PC2 PC3 × ATmega808/1608/3208/4808 ATmega809/1609/3209/4809 AVR_DA28/32/48/64 AVR_DB28/32/48/64 AVR_DD20/28/32 AVR_EA28/32/48
TWI0 ALT1 PA2 PA3 PF2 PF3 × × × ATmega808/1608/3208/4808 ATmega809/1609/3209/4809 AVR_DA32/48/64 AVR_DB32/48/64
TWI0 ALT1 PA2 PA3 - - × × × × × × ATmega808/1608/3208/4808
TWI0 ALT1 PA2 PA3 - - × × × × AVR_DA28 AVR_DB28 AVR_DD20/28/32 AVR_EA28/32
TWI0 ALT1 PA2 PA3 PC6 PC7 × × × × × AVR_DA48/64 AVR_DB48/64 AVR_EA48
TWI0 ALT2 PC2 PC3 PF2 PF3 × × × ATmega808/1608/3208/4808 ATmega809/1609/3209/4809
TWI0 ALT2 PC2 PC3 - - × × × × × × ATmega808/1608/3208/4808
TWI0 ALT2 PC2 PC3 - - × × × AVR_DA28/32 AVR_DB28/32 AVR_DD14/20/28/32 AVR_EA28/32
TWI0 ALT2 PC2 PC3 PC6 PC7 × × × × × AVR_DA48/64 AVR_DB48/64 AVR_EA48
TWI0 ALT3 PA0 PA1 PC2 PC3 × × × AVR_DD14/20/28/32
機能 代替 SCL SDA SCL(S) SDA(S) 14p 20p 28p 32p 40p 48p 64p 型番
TWI1 DEFAULT PF2 PF3 PB2 PB3 × × × × × AVR_DA48/64 AVR_DB48/64
TWI1 DEFAULT PF2 PF3 - - × × × × × AVR_DA28/32 AVR_DB28/32
TWI1 ALT1 PF2 PF3 PB6 PB7 × × × × × × AVR_DA64 AVR_DB64
TWI1 ALT1 PF2 PF3 - - × × × × × AVR_DA32/48 AVR_DB32/48
TWI1 ALT2 PB2 PB3 PB6 PB7 × × × × × × AVR_DA64 AVR_DB64
TWI1 ALT2 PB2 PB3 - - × × × × × × AVR_DA48 AVR_DB48

(S)は二元動作従装置端子。
megaAVR-0 の代替選択肢は3種。

TCA 対応端子割付

機能 代替 WO0 WO1 WO2 WO3 WO4 WO5 8p 14p 20p 24p 型番
TCA0 DEFAULT PB0 PB1 PB2 PA3 PA4 PA5 × ATtiny204/404/804/1604 ATtiny406/806/1606 ATtiny1607 ATtiny214/414/814/1614 ATtiny416/816/1616/3216 ATtiny417/817/1617/3217 ATtiny424/824/1624/3224 ATtiny426/826/1626/3226 ATtiny427/827/1627/3227
TCA0 DEFAULT PA3 PA1 PA2 PA3 - - × × × ATtiny202/402 ATtiny212/412
TCA0 ALT PB3 PB4 PB5 PC3 PC4 PC5 × × × ATtiny807/1607 ATtiny417/817 ATtiny427/827/1627/3227
TCA0 ALT PB3 PB4 PB5 PC3 - - × × × ATtiny406/806/1606 ATtiny416/816 ATtiny426/826/1626/3226
TCA0 ALT PB3 - - PC3 - - × × × ATtiny204/404/804/1604 ATtiny214/414 ATtiny424/824/1624/3224
TCA0 ALT PA7 - - - - - × × × ATtiny202/402 ATtiny212/412

tinyAVR-0/1 8pin 品種の既定の WO0/WO3 は共にPA3。同時有効化非推奨。WO0 のみ代替可。
tinyAVR-0/1/2系統の TCA0出力は、端子個別で標準/代替選択。PORT群切替ではない。

機能 代替 WO0 WO1 WO2 WO3 WO4 WO5 14p 20p 28p 32p 40p 48p 64p 型番
TCA0 DEFAULT PA0 PA1 PA2 PA3 PA4 PA5 × ATmega808/1608/3208/4808 ATmega809/1609/3209/4809 AVR_DA28/32/48/64 AVR_DB28/32/48/64 AVR_DD20/28/32 AVR_EA28/32/48
TCA0 DEFAULT PA0 PA1 - - - - × × × × × × AVR_DD14
TCA0 ALT1 PB0 PB1 PB2 PB3 PB4 PB5 × × × × × ATmega809/1609/3209/4809 AVR_DA48/64 AVR_DB48/64 AVR_EA48
TCA0 ALT2 PC0 PC1 PC2 PC3 PC4 PC5 × × × × ATmega809/1609/3209/4809 AVR_DA48/64 AVR_DB48/64 AVR_EA48
TCA0 ALT2 PC0 PC1 PC2 PC3 - - × × × × × ATmega808/1608/3208/4808 AVR_DA28/32 AVR_DB28/32 AVR_DD28/32 AVR_EA28/32
TCA0 ALT2 - PC1 PC2 PC3 - - × × × × × AVR_DD14/20
TCA0 ALT3 PD0 PD1 PD2 PD3 PD4 PD5 × × ATmega808/1608/3208/4808 ATmega809/1609/3209/4809 AVR_DA28/32/48/64 AVR_EA28/32/48
TCA0 ALT3 - PD1 PD2 PD3 PD4 PD5 × × × AVR_DB28/32/48/64 AVR_DD28/32
TCA0 ALT3 - - - - PD4 PD5 × × × × × AVR_DD14/20
TCA0 ALT4 PE0 PE1 PE2 PE3 PE4 PE5 × × × × ATmega809/1609/3209/4809 AVR_DA48/64 AVR_DB48/64
TCA0 ALT4 PE0 PE1 PE2 PE3 - - × × × × × × AVR_EA48
TCA0 ALT5 PF0 PF1 PF2 PF3 PF4 PF5 × × × ATmega808/1608/3208/4808 ATmega809/1609/3209/4809 AVR_DA32/48/64 AVR_DB32/48/64 AVR_DD32 AVR_EA32/48
TCA0 ALT5 PF0 PF1 - - - - × × × × × × ATmega808/1608/3208/4808 AVR_DA28 AVR_DB28 AVR_DD28 AVR_EA28
TCA0 ALT6 PG0 PG1 PG2 PG3 PG4 PG5 × × × × × × AVR_DA64 AVR_DB64
機能 代替 WO0 WO1 WO2 WO3 WO4 WO5 14p 20p 28p 32p 40p 48p 64p 型番
TCA1 DEFAULT PB0 PB1 PB2 PB3 PB4 PB5 × × × × × AVR_DA48/64 AVR_DB48/64 AVR_EA48
TCA1 ALT1 PC4 PC5 PC6 - - - × × × × × AVR_DA48/64 AVR_DB48/64 AVR_EA48
TCA1 ALT2 PE4 PE5 PE6 - - - × × × × × × AVR_DA64 AVR_DB64
TCA1 ALT2 PA4 PA5 PA6 - - - × × × × AVR_EA28/32/48
TCA1 ALT3 PG0 PG1 PG2 PG3 PG4 PG5 × × × × × × AVR_DA64 AVR_DB64
TCA1 ALT3 PD4 PD5 PD6 - - - × × × × AVR_EA28/32/48

megaAVR-0 の代替選択肢は6種で、PORT[A-F]に対応。PORT群切替。
AVR_DA/DB の代替選択肢は7種で、PORT[A-G]に対応。PORT群切替。
TCA1 は AVR_DA/DB48/64 にあり、代替選択肢は4種。

TCA は 8bit/16bit 計数/計時器だが、分周比で 10bit増し相当にすることができる。

TCB 対応端子割付

機能 WO ALT 8p 14p 20p 24p 型番
TCB0 PA5 PC0 × ATtiny807/1607 ATtiny406/806/1606 ATtiny416/816/1616/3216 ATtiny817/1617/3217 ATtiny426/826/1626/3226 ATtiny427/827/1627/3227
TCB0 PA5 - × ATtiny204/404/804 ATtiny214/414/814/1614 ATtiny424/824/1624/3224
TCB0 PA6 - × ATtiny202/402 ATtiny212/412
TCB1 PA3 PC4 × × × ATtiny1617/3217 ATtiny427/827/1627/3227
TCB1 PA3 - × × ATtiny1614 ATtiny1616/3216 ATtiny424/824/1624/3224

TCB1は tinyAVR-2 と tinyAVR-1 の 16KiB/32KiB品種にある。

機能 WO ALT 14p 20p 28p 32p 40p 48p 64p 型番
TCB0 PA2 PF4 × × × × ATmega809/1609/3209/4809 AVR_DA48/64 AVR_DB48/64 AVR_EA48
TCB0 PA2 PF4 × × × × × × ATmega808/1608/3208/4808 AVR_DA32 AVR_DB32 AVR_DD32 AVR_EA32
TCB0 PA2 - × × × × × ATmega808/1608/3208/4808 AVR_DA28 AVR_DB28 AVR_DD20/28 AVR_EA28
TCB1 PA3 PF5 × × × × ATmega809/1609/3209/4809 AVR_DA48/64 AVR_DB48/64 AVR_EA48
TCB1 PA3 PF5 × × × × × × ATmega808/1608/3208/4808 AVR_DA32 AVR_DB32 AVR_DD32 AVR_EA32
TCB1 PA3 - × × × × × ATmega808/1608/3208/4808 AVR_DA28 AVR_DB28 AVR_DD20/28 AVR_EA28
TCB2 PC0 PB4 × × × × × ATmega809/1609/3209/4809(q) AVR_DA48/64 AVR_DB48/64 AVR_EA48
TCB2 PC0 - × × × × ATmega4809(d) ATmega808/1608/3208/4808 AVR_DA28/32 AVR_DB28/32 AVR_DD28/32 AVR_EA28/32
TCB3 PB5 PC2 × × × × × ATmega809/1609/3209/4809(q) AVR_DA48/64 AVR_DB48/64 AVR_EA48
TCB3 - PC2 × × × × × × ATmega4809(d)
TCB4 PG3 PC6 × × × × × × AVR_DA64 AVR_DB64

AVR_DA/DB64 の TCB は 5組各2個別選択。
AVR_DA/DB48 の TCB は 4組各2個別選択。
AVR_DA/DB28/32 の TCB は 3組各2個別選択。
AVR_DD28/32 の TCB は3組。
AVR_DD20 の TCB は2組。
AVR_DD14 の TCB は2組だが WO端子なし。
megaAVR-0 40/48pin の TCB は 4組各2個別選択。
megaAVR-0 28/32pin の TCB は 3組各2個別選択。

TCB は 16bit計数/計時器だが、分周比で 1bit増し(二重傾斜動作併用で 2bit増し)相当にすることができる。

tinyAVR-2 と AVR_Dx以降は連続する2個のTCBを連結して 32bit計数/計時/捕獲器にすることができる。 これは 24MHz等速で 178.95秒までの 計数を可能とする。 またクロック元に EVSYSで RTC_PIT_DIV64を選ぶと 512Hz刻みで 97日までの連続累積計時が可能。

AVR_DD14には TCB[01]_WO 端子がないが、EVSYSや CCL/LUT経由で WO信号を転送できる。

TCD 対応端子割付

機能 WOA WOB WOC WOD 8p 14p 20p 24p 型番
TCD0 PA4 PA5 PC0 PC1 × × ATtiny416/816/1616/3216 ATtiny417/817/1617/3217
TCD0 PA4 PA5 - - × × × ATtiny214/414/1614
TCD0 PA6 PA7 - - × × × ATtiny212/412

TCD0 は tinyAVR-0/2 と megaAVR-0 にはない。
tinyAVR-1 では 代替選択不可。

機能 代替 WOA WOB WOC WOD 14p 20p 28p 32p 48p 64p 型番
TCD0 DEFAULT PA4 PA5 PA6 PA7 × × AVR_DA28/32/48/64 AVR_DB28/32/48/64 AVR_DD14/20/28/32
TCD0 ALT1 PB4 PB5 PB6 PB7 × × × × AVR_DA48/64 AVR_DB48/64
TCD0 ALT2 PF0 PF1 PF2 PF3 × × × AVR_DA32/48/64 AVR_DB32/48/64 AVR_DD32
TCD0 ALT2 PF0 PF1 - - × × × × × AVR_DA28 AVR_DB28 AVR_DD28
TCD0 ALT3 PG4 PG5 PG6 PG7 × × × × × AVR_DA64 AVR_DB64
TCD0 ALT4 PA4 PA5 PD4 PD5 × × AVR_DD14/20/28/32

AVR_DA/DB/DD の TCD0 代替は PORT群選択。

TCDは 12bit計時器/位相信号発生器だが、2段の分周比組み合わせで 8bit増し(二重傾斜動作併用で 9bit増し)相当にできる。

AVR_Dx以降では専用内蔵PLL を介して CPU主クロックと別に 48MHz 動作まで増速できる。

AC 対応端子割付

機能 AINP0 AINN0 AINP1 AINN1 AINP2 AINP3 OUT 8p 14p 20p 24p 型番
AC0 PA7 PA6 PB5 PB4 PB1 PB6 PA5 × × × ATtiny1617/3217 ATtiny427/827/1627/3227
AC0 PA7 PA6 PB5 PB4 PB1 - PA5 × × × ATtiny1616/3216 ATtiny426/826/1626/3226
AC0 PA7 PA6 - - PB1 - PA5 × × × ATtiny1614 ATtiny424/824/1624/3224
AC0 PA7 PA6 PB5 PB4 - - PA5 × × ATtiny807/1607 ATtiny406/806/1606 ATtiny416/816 ATtiny817
AC0 PA7 PA6 - - - - PA5 × × × ATtiny204/404/804 ATtiny214/414/814
AC0 PA7 PA6 - - - - PA3 × × × ATtiny202/402 ATtiny212/412
AC1 PA7 PA5 PA6 PB7 PB0 PB4 PB3 × × × ATtiny1617/3217
AC1 PA7 PA5 PA6 - PB0 PB4 PB3 × × × ATtiny1616/3216
AC1 PA7 PA5 PA6 - PB0 - PB3 × × × ATtiny1614
AC2 PA6 PA7 PB0 PB6 PB5 PB7 PB2 × × × ATtiny1617/3217
AC2 PA6 PA7 PB0 - PB5 - PB2 × × ATtiny1614 ATtiny1616/3216

AC1/2 は tinyAVR-1 の 16KiB/32KiB 限定。

機能 AINP0 AINN0 AINP1 AINN1 AINP2 AINN2 AINP3 OUT ALT 28p 32p 40p 48p 64p 型番
AC0 PD2 PD3 PD4 PD5 PD6 PD7 - PA7 - ATmega808/1608/3208/4808 ATmega809/1609/3209/4809
AC0 PD2 PD3 PE0 PD0 PE2 PD7 PD6 PA7 PC6 × × × AVR_DA48/64 AVR_DB48/64 AVR_EA48
AC0 PD2 PD3 - PD0 - PD7 PD6 PA7 - × × × AVR_DA28/32 AVR_DB28/32 AVR_EA28/32
AC1 PD2 PD5 PD3 PD0 PD4 PD7 PD6 PA7 PC6 × × × AVR_DA48/64 AVR_DB48/64 AVR_EA48
AC1 PD2 PD5 PD3 PD0 PD4 PD7 PD6 PA7 - × × × AVR_DA28/32 AVR_DB28/32 AVR_EA28/32
AC2 PD2 PD7 PD4 PD0 PE1 PD7 PD6 PA7 PC6 × × × AVR_DA48/64 AVR_DB48/64
AC2 PD2 PD7 PD4 PD0 PE1 PD7 PD6 PA7 - × × × AVR_DA28/32 AVR_DB28/32

AC0 の megaAVR-0 と AVR_Dx 以降は部分的ピン互換。
megaAVR-0 は AC0 のみで OUT端子代替選択不可。
AVR_DA/DB は AC0/1/2 を持ち OUT端子のみ代替選択可。

機能 AINP0 AINN0 AINN2 AINP3 AINN3 AINN4 OUT 14p 20p 28p 32p 型番
AC0 PD2 PD3 PD7 PD6 PC2 PC3 PA7 × × AVR_DD28/32
AC0 - - PD7 PD6 PC2 PC3 PA7 × × × AVR_DD20
AC0 - - PD7 PD6 PC2 PC3 - × × × AVR_DD14

AVR_DD は OUT端子代替選択を持たない。
PC[23]は MVIO構成FUSE が無効時(SYSCFG1_MVSYSCFG=SINGLE)に使用可能。

ADC 対応端子割付

機能 AIN0 AIN1 AIN2 AIN3 AIN4 AIN5 AIN6 AIN7 AIN8 AIN9 AIN10 AIN11 AIN12 AIN13 AIN14 AIN15 8p 14p 20p 24p 型番
ACD0 - PA1 PA2 PA3 PA4 PA5 PA6 PA7 PB5 PB4 PB1 PB0 PC0 PC1 PC2 PC3 × × ATtiny426/826/1626/3226 ATtiny427/827/1627/3227
ACD0 - PA1 PA2 PA3 PA4 PA5 PA6 PA7 - - PB1 PB0 - - - - × × × ATtiny424/824/1624/3224
ACD0 PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 PB5 PB4 PB1 PB0 - - - - × × ATtiny406/806/1606 ATtiny807/1607 ATtiny416/816/1616/3216 ATtiny417/817/1617/3217
ACD0 PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 - - PB1 PB0 - - - - × × × ATtiny204/404/804/1604 ATtiny414/814/1614
ADC0 PA0 PA1 PA2 PA3 - - PA6 PA7 - - - - - - - - × × × ATtiny202/402 ATtiny212/412
ADC1 PA4 PA5 PA6 PA7 PB7 PB6 PC0 PC1 PC2 PC3 PC4 PC5 - - - - × × × ATtiny1617/3217
ADC1 PA4 PA5 PA6 PA7 - - PC0 PC1 PC2 PC3 - - - - - - × × × ATtiny1616/3216
ADC1 PA4 PA5 PA6 PA7 - - - - - - - - - - - - × × × ATtiny1614

tinyAVR-0/1/2系統の PA0は UPDI/RESET機能と排他。
tinyAVR-1 の ADC0 は PTC有効時に使用不可。

機能 AIN0 AIN1 AIN2 AIN3 AIN4 AIN5 AIN6 AIN7 AIN8 AIN9 AIN10 AIN11 AIN12 AIN13 AIN14 AIN15 28p 32p 40p 48p 64p 型番
ACD0 PD0 PD1 PD2 PD3 PD4 PD5 PD6 PD7 PE0 PE1 PE2 PE3 PF2 PF3 PF4 PF5 × × × ATmega809/1609/3209/4809
ACD0 PD0 PD1 PD2 PD3 PD4 PD5 PD6 PD7 - - - - PF2 PF3 PF4 PF5 × × × × ATmega808/1608/3208/4808
ACD0 PD0 PD1 PD2 PD3 PD4 PD5 PD6 PD7 - - - - - - - - × × × × ATmega808/1608/3208/4808
機能 AIN0 AIN1 AIN2 AIN3 AIN4 AIN5 AIN6 AIN7 AIN8 AIN9 AIN10 AIN11 AIN12 AIN13 AIN14 AIN15 AIN16 AIN17 AIN18 AIN19 AIN20 AIN21 28p 32p 48p 64p 型番
ACD0 PD0 PD1 PD2 PD3 PD4 PD5 PD6 PD7 PE0 PE1 PE2 PE3 PE4 PE5 PE6 PE7 PF0 PF1 PF2 PF3 PF4 PF5 × × × AVR_DA64 AVR_DB64
ACD0 PD0 PD1 PD2 PD3 PD4 PD5 PD6 PD7 PE0 PE1 PE2 PE3 - - - - PF0 PF1 PF2 PF3 PF4 PF5 × × × AVR_DA48 AVR_DB48
ACD0 PD0 PD1 PD2 PD3 PD4 PD5 PD6 PD7 - - - - - - - - PF0 PF1 PF2 PF3 PF4 PF5 × × × AVR_DA32 AVR_DB32
ACD0 PD0 PD1 PD2 PD3 PD4 PD5 PD6 PD7 - - - - - - - - PF0 PF1 - - - - × × × AVR_DA28 AVR_DB28

AVR_DA の AIN16-21 は正入力専用。

機能 AIN1 AIN2 AIN3 AIN4 AIN5 AIN6 AIN7 AIN16 AIN17 AIN18 AIN19 AIN20 AIN21 AIN22 AIN23 AIN24 AIN25 AIN26 AIN27 AIN28 AIN29 AIN30 AIN31 14p 20p 28p 32p 型番
ADC0 PD1 PD2 PD3 PD4 PD5 PD6 PD7 PF0 PF1 PF2 PF3 PF4 PF5 PA2 PA3 PA4 PA5 PA6 PA7 PC0 PC1 PC2 PC3 × × × AVR_DD32 AVR_EA32/48
ADC0 PD1 PD2 PD3 PD4 PD5 PD6 PD7 PF0 PF1 - - - - PA2 PA3 PA4 PA5 PA6 PA7 PC0 PC1 PC2 PC3 × × × AVR_DD28 AVR_EA28
ADC0 - - - PD4 PD5 PD6 PD7 - - - - - - PA2 PA3 PA4 PA5 PA6 PA7 PC0 PC1 PC2 PC3 × × × AVR_DD20
ADC0 - - - PD4 PD5 PD6 PD7 - - - - - - - - - - - - - PC1 PC2 PC3 × × × AVR_DD14

AVR_DD の PC[123]は MVIO構成FUSE が無効時に使用可能。(FUSE.SYSCFG1.MVSYSCFG=SINGLE)

DAC 対応端子割付

機能 OUT 8p 14p 20p 24p 28p 32p 48p 64p 型番
DAC0 PA6 × × × × × × × ATtiny417/817/1617/3217
DAC0 PA6 × × × × × × × ATtiny416/816/1616/3216
DAC0 PA6 × × × × × × × ATtiny214/414/814/1614
DAC0 PA6 × × × × × × × ATtiny212/412
DAC0 PD6 × AVR_DA28/32/48/64 AVR_DB28/32/48/64 AVR_DD14/20/28/32 AVR_EA28/32/48

DAC機能は tinyAVR-0/2 と megaAVR-0 にはない。
DAC0 だけが OUT端子を持つ。DAC1/2に外部端子割当はない。

PTC 対応端子割付

機能 X0/Y0-3 4 5 6-9 10 11 14p 20p 24p 型番
ADC0 PA4-7 PB1 PB0 PC0-3 PC4 PC5 × × ATtiny1617/3217
ADC0 PA4-7 PB1 PB0 PC0-3 - - × × ATtiny1616/3216
ADC0 PA4-7 PB1 PB0 - - - ATtiny814 ATtiny816 ATtiny817
機能 X0/Y0-7 8-15 16-23 24-27 28-31 32-37 40-47 28p 32p 48p 64p 型番
ADC0 PA0-7 PB0-7 PD0-7 PE0-7 PF0-5 PG0-3 PG4-7 × × × AVR_DA64
ADC0 PA0-7 PB0-5 PD0-7 PE0-3 PF0-5 - - × × × AVR_DA48
ADC0 PA0-7 - PD0-7 - PF0-5 - - × × × AVR_DA32
ADC0 PA0-7 - PD0-7 - PF0,1 - - × × × AVR_DA28

PTC対応は掲出の型番に限られる。
AVR_DAは PORTC群と PF6以外の全外部PORT端子が PTC対応。
PTC有効化には専用プロプライエタリライブラリが必要。制御詳細非公開。ADC0を専有。

OPAMP 対応端子割付

機能 INP INN OUT 28p 32p 48p 64p 型番
OPAMP0 PD1 PD3 PD2 AVR_DB28/32/48/64
OPAMP1 PD4 PD7 PD5 AVR_DB28/32/48/64
OPAMP2 PE1 PE3 PE2 × × × AVR_DB64

AVR_DB系統だけが OPAMPnを持つ。
AVR_DB64 は3組。
AVR_DB28/32/48 は2組。

DACや VREFAを参照電圧として外付け部品なしに外部回路用 定電圧回路(VDD-1V以下/20mA程度まで)を実装することもできる。 これを自身の VDD2にチップ外から供給して復電圧動作を補助しても良い。

ZCD 対応端子割付

機能 ZCIN OUT ALT 14p 20p 28p 32p 48p 64p 型番
ZCD0 PD1 PA7 PC7 × × AVR_DA28/32/48/64 AVR_DB28/32/48/64
ZCD1 PE3 PA7 PC7 × × × × AVR_DA48/64 AVR_DB48/64
ZCD2 PE7 PA7 PC7 × × × × × AVR_DA64 AVR_DB64
ZCD3 PC2 PA7 - × × AVR_DD14/20/28/32

AVR_DA/DB64 は ZCD0/1/2 の3組。
AVR_DA/DB48 は ZCD0/1 の 2組。
AVR_DA/DB32/28 は ZCD0のみ。
AVR_DD は ZCD3のみ。
OUT端子のみ代替選択可。

その他特殊端子割付

系統 p UPDI RESET EXTCLK VREFA CLKOUT TOSC1 TOSC2 XTALHF1 XTALHF2
tinyAVR-0 8/14 PA0 PA3 - - - - - -
20/24 PA0 PA3 - PB5 - - - -
tinyAVR-1 8/14 PA0 PA3 - - - - - -
20/24 PA0 PA3 - PB5 PB3 PB2 - -
tinyAVR-2 14 PA0 PA3 PA5 - - - - -
20/24 PA0 PA0/PB4 PA3 PA5 PB5 PB3 PB2 - -
megaAVR-0 - 専用 PF6 PA0 PF7 PA7 PF0 PF1 - -
AVR_DA - 専用 PF6 PA0 PF7 PA7 PF0 PF1 - -
AVR_DB - 専用 PF6 PA0 PF7 PA7 PF0 PF1 PA0 PA1
AVR_DD 14 PF7 PF6 PA0 PF7 - PA0 PA1 PA0 PA1
20 PF7 PF6 PA0 PF7 PA7 PA0 PA1 PA0 PA1
28/32 PF7 PF6 PA0 PD7 PA7 PF0 PF1 PA0 PA1
AVR_EA - PF7 PF6 PA0 PD7 PA7 PF0 PF1 PA0 PA1

PA0 の RESET/UPDI 選択は、FUSE設定。(PORTMUXではない)
tinyAVR-2 の PB4 RESET代替選択は、FUSE設定。(PORTMUXではない)
AVR_DA/DB/DD は TOSCn→XTAL32Kn。(名称変更)(低速発振子/発振器入力)
XTALHFn は AVR_DB/DDのみ存在。(主クロック用高速水晶発振子入力対)

割込

割込時間考察

進行処理内容 周期 補足
進行中の命令終了 1 多重割込は4周期自動禁止
PCをスタックに格納 2
割込処理へ移動 3 JMP命令。8KiB以下品種では2周期(RJMP)
レジスタPUSH 1x 最大32レジスタ(〜32周期)
(全体フラグ保存) 3+1 拡張IOレジスタからLDS+PUSH
割込実処理実行 - 例えば周辺機能割込フラグ解除には1+2周期(LDI+STS)
(全体フラグ復帰) 2+2 POP+拡張IOレジスタへSTS
レジスタPOP 2x 最大32レジスタ(〜64周期)
スタックからPCを復帰 4 RETI命令
最短 10 空ベクタ復帰
最長 114 全数レジスタ+全体フラグ保存

スタック操作は自命令を含む最長4周期内の次命令まで割込自動禁止。

24Mhz動作の場合 1us=24周期 なので、最短0.416us、最長4.75us のあいだ主処理は進行しない。

割込実処理が IOレジスタをひとつ操作するだけなら全体フラグを変更しないので、 1ワークレジスタ保存+IO書換は 6周期消費であるから 計16周期必要で 0.66us 処理時間を要する。実用上はこれが最短。

外部端子割込

旧世代にある専用端子割込(EXTINT)は削除され、 PORT群割込(PCINT相当)だけとなった。 このため割込処理内で個別の端子別割込元判定分岐が必要となる。 このオーバーヘッドを避けるには次のようにする。

  • 割込イベントを起動トリガとして必要とする周辺機能には直接 EVSYS や CCL/LUT で事象配信する。
    • 割込ベクタとCPU処理が関係しない+全体割込禁止中でも動作するので、可能なら最良。
  • ひとつのPORT群でひとつの端子割込だけを有効にする。
    • 分岐判断をせずに済むので EXTINT 相当になる。
  • CCL/LUT 割込ベクタを使う。
    • 1ベクタだけだが EXTINT 相当をひとつ増やせる。
  • EVSYSで EVOUTに転送し、その先のPORT群割込ベクタを使う。
    • 直接PORT群割込に使わない(余っている)ベクタと端子を活用して EXTINT相当を増やす。

なお tinyAVRは各PORTのPIN2及びPIN6は非同期割込対応(CLK_PER非依存)である。 このため割込を許可する以前に、割込許可ビットが立っている場合がある。 従って割込許可前に許可ビットをクリアしないと意図しない割込が発生する場合がある。

例えば外部PUがなく内蔵PUを使用してかつLOWレベル割込とした場合、プルアップ設定以前のPOR時点で既に割込発生条件を満たしていることになり、INTCTRLをセットしてCLIすると同時に初回割込が発生してしまう。

割込処理効率化

  • 浮動小数点演算、除算を避ける。
    • 論外。
  • 32bit変数操作を避ける。
    • RMW(Read-Modify-Write)に伴う PUSH/POP/演算操作コストが重い。(8bit幅の12倍、16bit幅の4倍程度)
    • 長時間タイマー計数/計時/捕獲は、32bit連結 TCB対応品種なら効率よく実装できる。
  • 汎用GPIORレジスタを活用する。
    • ビットフラグRMWに長ける。
  • アセンブラ記述の活用。
    • 特にシビアな条件下では不可避。

RTC周期的休止解除

旧世代での WDT汎用割込ベクタは削除され、WDTは障害再起動専用になった。 変わって RTC(Real-Time-Counter)周辺機能が追加されたので、これを活用する。

RTCとは言うが計時機能やカレンダー保持機能はない。 ioヘッダファイルでの予約語なので他の RTCライブラリを使う時はシンボル衝突に注意。

  • PIT周期割込機能が、いかなる休止状態からでも CPUを活性化できる。
    • 通常は最長1秒周期。RTCを他の用途と兼務しないなら 32秒周期が可能。
  • 16bit汎用RTC計時は、アイドル/スタンバイ状態から CPUを活性化できる。
    • パワーダウン休止を使わないなら、65535秒(あるいはその32倍の2097120秒)までの長周期休止が可能。
    • パワーダウン休止中は計時が進まないので、PIT周期割込と組み合わせると更にその 32768倍までの長周期化ができる。

RTC計時は CPU主クロックと非同期なので、F_CPUと無関係に実時間計時ができる。(本来の用途)

  • EVSYSと 32bit連結TCBとも組み合わせて 512Hz(1953.125us)粒度の長周期計時ができる。
    • 8388608秒(97日)周期のシステム時計となり、割込も追加の保存変数もなしに delay/millis 相当関数を実装できる。
  • <setjmp.h> と組み合わせるとタイムアウト脱出が実装できる。
    • CPU処理で計数ポーリングせずに済むので CPUコードが単純になる。(無限ループで良い)

LINKS

multix.jp/てくにかるむ(休眠中)
Multix Zinnia Product SDK [*AVR]
AVR.JP(日本語訳)
AVR-LIBC(日本語訳)

Clone this wiki locally