ATmega328Pなどの割り込みピンについて

By のじみ, 2016年4月22日


http://www.atmel.com/images/atmel-8271-8-bit-avr-microcontroller-atmega48a-48pa-88a-88pa-168a-168pa-328-328p_datasheet_complete.pdf

共通のデータシートで観ているのでATmega48A/88A/168A/328Pなど共通だと思います。

データシートでの割り込みに関する記述はP.70あたり

ピンでの割り込みは2種類、単独ピンD2,D3の割り込みであり、割り込みのパターンを指定できるINT0,INT1と、複数本のピン変化をまとめたPCI0,PCI1,PCI2があります。(変化で割り込み発生、立ち上がりなどの指定はできない)3種類のPCIの内容は

PCI2:PCINT23,PCINT22,PCINT21,PCINT20,PCINT19,PCINT18,PCINT17,PCINT16

PCI1:PCINT14,PCINT13,PCINT12,PCINT11,PCINT10,PCINT9,PCINT8

PCI0:PCINT7,PCINT6,PCINT5,PCINT4,PCINT3,PCINT2,PCINT1,PCINT0

PCINT7からPCINT0はピンで言うとPB7からPB0、PCINT14からPCINT8はPC6からPC0に、PCINT23からPCINT16はPD7からPD0に対応しています。

INT0,INT1の設定はEICRAで割り込みパターン指定、EIMSKで有効化、割り込み時にEIFRにフラグビットが立ちます。

PCI0,PCI1,PCI2はPCICRで有効化、PCIFRにフラグビット、PCMSK0,PCMSK1,PCMSK2でグループ内のどのピンを割り込みに用いるかを設定します。

割り込みに用いるvector nameはINT0がINT0_vect,INT1がINT1_vect,PCI0がPCINT0_vect,PCI1がPCINT1_vect,PCI2がPCINT2_vectです。

ピンごとのPCINT名とPCIグループ名です。

 ピン名 PCINT名 PCIグループ名
PB7 PCINT7 PCI0
PB6 PCINT6
PB5 PCINT5
PB4 PCINT4
PB3 PCINT3
PB2 PCINT2
PB1 PCINT1
PB0 PCINT0
PC6 PCINT14  PCI1
PC5 PCINT13
PC4 PCINT12
PC3 PCINT11
PC2  PCINT10
PC1 PCINT9
PC0 PCINT8
PD7 PCINT23 PCI2
PD6 PCINT22
PD5 PCINT21
PD4 PCINT20
PD3 PCINT19
PD2 PCINT18
PD1 PCINT17
PD0 PCINT16

INTの設定

EIMSKで有効化

bit 7 6 5 4 3 2 1 0
EIMSK INT1 INT0

EIMSKでは下位2bitで1にすることで有効化。

EICRAで割り込み発生パターン指定

bit 7 6 5 4 3 2 1 0
EICRA ISC11 ISC10 ISC01 ISC00

ISC11,ISC10はINT1のISC01,ISC00はINT0の設定です。

ISC*1 ISC*0 パターン
0 0 Lレベル
0 1 変化
1 0 立ち上がり
1 1 立ち下がり

PCINTの設定

PCICRで有効化

bit 7 6 5 4 3 2 1 0
PCICR PCIE2 PCIE1 PCIE0

PCIE2,PCIE1,PCIE0はPCI2,PCI1,PCI0に対応しておりビットを立てると有効化。

PCMSKでマスク指定(有効ピンの指定)

表記はPCINT~

bit 7 6 5 4 3 2 1 0
PCMSK2 23 22 21 20 19 18 17 16
PCMSK1 14 13 12 11 10 9 8
PCMSK0 7 6 5 4 3 2 1 0

ピン名で表すと

bit 7 6 5 4 3 2 1 0
PCMSK2 PD7 PD6 PD5 PD4 PD3 PD2 PD1 PD0
PCMSK1 PC6 PC5 PC4 PC3 PC2 PC1 PC0
PCMSK0 PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0

参考

外部割り込み – hijouguchiの日記

AVR の 割り込み

What do you think?

コメントを残す

メールアドレスが公開されることはありません。


*