modernAVR周辺機能比較一覧

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

## 掲載対象製品系統

- tinyAVR-0/1/2系統
  - tinyAVR-1 はアナログ周辺機能重視品種。
  - tinyAVR-2 はUSART2組＋SRAM強化品種。
- megaAVR-0系統
  - アナログ周辺回路は別電源区画。（AVDD/VDDが直結していない）
- AVR_DA/DB/DD系統
  - AVR_DA はアナログ周辺機能重視品種。
  - AVR_DB は OPAMP機能と復電圧対応品種。（32pin以下ではPD0相当端子がVDD2に代替）
  - AVR_DD は復電圧対応品種。（少ピン）
  - AVR_DB/DD は主クロック用に外部高速水晶発振子を使用可能。（DA以前は方形波発振器のみ）

> これ以前のAtmel世代製品（非UPDI品種）については論じない。\
> AVR_EA系統は2022末時点ではデータシート非公開（未発売）だが 64KiB品種の ioヘッダファイルのみ公開済。

- 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                  |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

> 表にない 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 は総チャネル数。

## UPDI

|tinyAVR-0/1/2 megaAVR-0|AVR_DA/DB/DD
|-|-
|UPDI v0|UPDI v2

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

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

> 何れも HV電圧印加は単発パルス。（レベルではない）\
> tinyAVR-2 の HV許可電圧は 9V〜12V。（12V推奨）\
> AVR_DD の PF6端子定格は 9V。（12V非推奨）\
> megaAVR-0 AVR_DA/DB は HV機能なし。（UPDI端子は専用）

### 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 ATtiny809/1609/3209/4809 AVR_DA AVR32DB AVR64DB AVR_DD
|$40|ATtiny424/824/1624/3224 ATtiny426/826/1626/3226 ATtiny427/827/1627/3227

> UPDI_STATUSA が返す UPDI実装の改訂番号。（用途不明）

### AVR系統識別子

書込器使用時に照会すべき識別子。

|宣言名|値|説明|
|----|--|----|
|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_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
|$22|204   |414   |814   |1614  |3217
|$23|202   |412   |807   |1607
|$24|      |      |806   |1606
|$25|      |406   |804   |1604
|$26|      |404   |808   |1608  |3227
|$27|      |402   |827   |1609  |3226
|$28|      |      |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|      |      |      |      |32DB48
|$36|      |      |      |      |32DB32
|$37|      |      |      |      |32DB28
|$38|      |      |      |      |32DD32
|$39|      |      |      |      |32DD28
|$3A|      |      |      |      |32DD20
|$3B|      |      |      |      |32DD14
||
|$51|      |      |      |      |      |4808
|$52|      |      |      |      |      |4809

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

## 内蔵フラッシュメモリ

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

|系統|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_EA
||28|*AVR8EA28*|*AVR16EA28*|*AVR32EA28*|AVR64EA28
||32|*AVR8EA32*|*AVR16EA32*|*AVR32EA32*|AVR64EA32
||48|*AVR8EA48*|*AVR16EA48*|*AVR32EA48*|AVR64EA48

> AVR_EA の ioヘッダファイルは 2022末時点では 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
|32|32768|128|256|ATmega3208/3209
|48|49152|128|384|ATmega4808/4809
|8|8192|64|128|*AVR8EAnn*
|16|16384|64|256|*AVR16EAnn*
|16|16384|64|512|*AVR32EAnn*
|64|65536|64|1024|AVR64EAnn
|16|16384|512|32|AVR16DDnn
|32|32768|512|64|AVR32DAnn AVR32DBnn AVR32DDnn
|64|65536|512|128|AVR64DAnn AVR64DBnn AVR64DDnn
|128|131072|512|256|AVR128DAnn AVR128DBnn

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

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

> tinyAVR-0/1/2 と megaAVR-0 と AVR16/32Dx では、フラッシュメモリ全領域はデータアドレス空間内で見える。\
> 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/EA|512 B| |  |16|32|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
|1|1024|0x7C00|*AVR8EAnn*
|2|2048|0x3800|ATtiny1614/1616/1617/3216/3217 ATtiny1624/1626/1627 ATmega1608/1609
|2|2048|0x7800|AVR16DDnn *AVR16EAnn*
|3|3072|0x3400|ATtiny3224/3226/3227
|4|4096|0x3000|ATmega3208/3209
|4|4096|0x7000|AVR32DAnn AVR32DBnn AVR32DDnn *AVR32EAnn*
|6|6144|0x2800|ATmega4808/4809
|6|6144|0x6800|AVR64EAnn
|8|8192|0x6000|AVR64DAnn AVR64DBnn AVR64DDnn
|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系列でのioヘッダ記載粒度は1だがこの定義だと実行エラーになるので普通は他系列に倣って 32や 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(32)|256(8)|AVR_DDnn
|512|1(32)|512(16)|AVR_DAnn AVR_DBnn
|512|8|64|AVR_EAnn

以下は 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 AVR8/16/32/64EAnn

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

|宣言名|説明|備考|
|-------|---|-|
|USER_SIGNATURES_START|USERROW開始番地|0x1300または0x1080（AVR Dx以降）
|USER_SIGNATURES_SIZE|USERROW総量
|USER_SIGNATURES_PAGE_SIZE|USERROWページ粒度

## CLKCTRL

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

|tinyAVR-0/1/2 megaAVR-0|AVR_DA/DB/DD|AVR_EA|
|-|-|-|
|最大20/16MHz選択|最大24MHz|最大20MHz（詳細不明）|

AVR_EA系統の詳細は 2022年末時点ではデータシート未公開のため、他の2形式について論じる。

### 20MHz/16MHz世代

まず主クロック発振器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）

### 24Mhz世代

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

- 非公式に、主クロック供給には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は起動する。

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

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

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

## EVSYS

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

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

> 版番号は本書で便宜的に付したもので、データシート原書に記述されたものではない。\
> AVR EA系統は詳細不明のため現時点では論じない。

|tinyAVR-0|tinyAVR-1|megaAVR-0|tinyAVR-2 AVR_DA/DB/DD|
|-|-|-|-|
|v1|v1.1|v2|v2.1|

- v1.1以降は非同期事象元にPIT分周クロックを選べる。
- v2では非同期/同期チャネル選択を使用部で区別しない。コード記述にも前後の互換性はない。
- v2.1でTCBn計数器に事象計数が追加された。
- v2とv2.1ではシンボル定義が異なるが糖衣構文（別名）を用意すれば前方互換にできる。

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

|事象チャネル数|世代|型番|
|--|--|--|
|非同期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|

> 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 v2x

v2と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%のクロックレベル信号。

#### 事象チャネル使用部（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|tiny

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

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

## 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から

> 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|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 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
|CCL0|PA0|PA1|-  |-  |-  |○|×|×|×|×|×|×|AVR_DD14
||
|CCL1|PC0|PC1|PC2|PC3|PC6|×|×|×|×|○|○|○|ATmega809/1609/3209/4809 AVR_DA48/64 AVR_DB48/64
|CCL1|PC0|PC1|PC2|PC3|-  |○|○|○|○|×|×|×|ATmega808/1608/3208/4808 AVR_DA28/32 AVR_DB28/32 AVR_DD14/20/28/32
||
|CCL2|PD0|PD1|PD2|PD3|PD6|×|×|○|○|○|○|○|ATmega808/1608/3208/4808 ATmega809/1609/3209/4809 AVR_DA28/32/48/64
|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
|CCL3|PF0|PF1|-  |-  |PF6|○|○|○|×|×|×|×|ATmega808/1608/3208/4808 AVR_DA/DB28
||
|CCL4|PB0|PB1|PB2|PB3|PB6|×|×|×|×|×|○|○|AVR_DA/DB64 AVR_DA/DB48
||
|CCL5|PG0|PG1|PG2|PG3|PG6|×|×|×|×|×|○|○|AVR_DA/DB64 AVR_DA/DB48

> 代替設定で切り替えられるのは 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|PC1|×|○|○|○|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
|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
|USART0|ALT2   |PA2|PA3|-  |-  |×|○|○|○|×|×|×|AVR_DD20/28/32
|USART0|ALT3   |PD4|PD5|PD6|PD7|○|○|○|○|×|×|×|AVR_DD14/20/28/32
|USART0|ALT4   |PC1|PC2|PC3|-  |○|○|○|○|×|×|×|AVR_DD14/20/28/32
||
|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
|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
|USART1|ALT1   |PC4|PC5|-\*\*|-  |×|×|×|×|○|×|×|ATmega4809(d)
|USART1|ALT2   |PD6|PD7|-  |-  |○|○|○|○|×|×|×|AVR_DD14/20/28/32
||
|__機能__|__代替__|__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
|USART2|DEFAULT|PF0|PF1|-  |-  |×|×|○|×|×|×|×|ATmega808/1608/3208/4808(d) AVR_DA28 AVR_DB28
|USART2|ALT1   |PF4|PF5|-  |-  |×|×|×|○|○|○|○|AVR_DA32/48/64 AVR_DB32/48/64
|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は送信有効時のみで使われ、未動作または無効時は使用されないため空き端子は他の用途に用いても良い。

### 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
|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
||
|SPI0|ALT3   |PA0|PA1|PC0|PC1|×|×|○|○|×|×|×|AVR_DD28/32
|SPI0|ALT3   |PA0|PA1|-  |PC1|○|○|×|×|×|×|×|AVR_DD14/20
|SPI0|ALT4   |PD4|PD5|PD6|PD7|○|○|○|○|×|×|×|AVR_DD14/20/28/32
|SPI0|ALT5   |PC0|PC1|PC2|PC3|×|×|○|○|×|×|×|AVR_DD28/32
|SPI0|ALT5   |-  |PC1|PC2|PC3|○|○|×|×|×|×|×|AVR_DD14/20
|SPI0|ALT6   |PC1|PC2|PC3|*PF7*|○|○|○|○|×|×|×|AVR_DD14/20/28/32
||
|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
|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
|TWI0|ALT1   |PA2|PA3|PC6|PC7|×|×|×|×|×|○|○|AVR_DA48/64 AVR_DB48/64
|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
|TWI0|ALT2   |PC2|PC3|PC6|PC7|×|×|×|×|×|○|○|AVR_DA48/64 AVR_DB48/64
|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
|TCA0|DEFAULT|PA0|PA1|-  |-  |-  |-  |○|×|×|×|×|×|×|AVR_DD14
|TCA0|ALT1   |PB0|PB1|PB2|PB3|PB4|PB5|×|×|×|×|○|×|○|ATmega809/1609/3209/4809 AVR_DA48/64 AVR_DB48/64
|TCA0|ALT2   |PC0|PC1|PC2|PC3|PC4|PC5|×|×|×|×|○|○|○|ATmega809/1609/3209/4809 AVR_DA48/64 AVR_DB48/64
|TCA0|ALT2   |PC0|PC1|PC2|PC3|-  |-  |×|×|○|○|×|×|×|ATmega808/1608/3208/4808 AVR_DA28/32 AVR_DB28/32 AVR_DD28/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
|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|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
|TCA0|ALT5   |PF0|PF1|-  |-  |-  |-  |×|×|○|×|×|×|×|ATmega808/1608/3208/4808 AVR_DA28 AVR_DB28 AVR_DD28
|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
|TCA1|ALT1   |PC4|PC5|PC6|-  |-  |-  |×|×|×|×|×|○|○|AVR_DA48/64 AVR_DB48/64
|TCA1|ALT2   |PE4|PE5|PE6|-  |-  |-  |×|×|×|×|×|×|○|AVR_DA64 AVR_DB64
|TCA1|ALT3   |PG0|PG1|PG2|PG3|PG4|PG5|×|×|×|×|×|×|○|AVR_DA64 AVR_DB64

> 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
|TCB0|PA2|PF4|×|×|×|○|×|×|×|ATmega808/1608/3208/4808 AVR_DA32 AVR_DB32 AVR_DD32
|TCB0|PA2|-  |×|○|○|×|×|×|×|ATmega808/1608/3208/4808 AVR_DA28 AVR_DB28 AVR_DD20/28
||
|TCB1|PA3|PF5|×|×|×|×|○|○|○|ATmega809/1609/3209/4809 AVR_DA48/64 AVR_DB48/64
|TCB1|PA3|PF5|×|×|×|○|×|×|×|ATmega808/1608/3208/4808 AVR_DA32 AVR_DB32 AVR_DD32
|TCB1|PA3|-  |×|○|○|×|×|×|×|ATmega808/1608/3208/4808 AVR_DA28 AVR_DB28 AVR_DD20/28
||
|TCB2|PC0|PB4|×|×|×|×|×|○|○|ATmega809/1609/3209/4809(q) AVR_DA48/64 AVR_DB48/64
|TCB2|PC0|-  |×|×|○|○|○|×|×|ATmega4809(d) ATmega808/1608/3208/4808 AVR_DA28/32 AVR_DB28/32 AVR_DD28/32
||
|TCB3|PB5|PC2|×|×|×|×|×|○|○|ATmega809/1609/3209/4809(q) AVR_DA48/64 AVR_DB48/64
|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
|AC0|PD2|PD3|-  |PD0|-  |PD7|PD6|PA7|-  |○|○|×|×|×|AVR_DA28/32 AVR_DB28/32
||
|AC1|PD2|PD5|PD3|PD0|PD4|PD7|PD6|PA7|PC6|×|×|×|○|○|AVR_DA48/64 AVR_DB48/64
|AC1|PD2|PD5|PD3|PD0|PD4|PD7|PD6|PA7|-  |○|○|×|×|×|AVR_DA28/32 AVR_DB28/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
ADC0|PD1|PD2|PD3|PD4|PD5|PD6|PD7|PF0|PF1|-  |-  |-  |-  |PA2|PA3|PA4|PA5|PA6|PA7|PC0|PC1|PC2|PC3|×|×|○|×|AVR_DD28
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

> 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|PF7|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相当を増やす。

### 割込処理効率化

- 浮動小数点演算、除算を避ける。
  - 論外。
- 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コードが単純になる。（無限ループで良い）