概要
MSP430F149では、ポート1からポート6までの6つのポートがあり、合計48本のGPIOを持つ。
- P1.0からP1.7までの8本のピンがポート1
- P2.0からP2.7までの8本のピンがポート2
- P3.0からP3.7までの8本のピンがポート3
- P4.0からP4.7までの8本のピンがポート4
- P5.0からP5.7までの8本のピンがポート5
- P6.0からP6.7までの8本のピンがポート6
各ポートピンは入力、出力、特殊機能のいずれかに設定できる。
ペリフェラルには、タイマ、UART、SPI、ADC等がある。
各ポートには、それぞれ基本的な4つのレジスタがある。
- PxDIR
- 各ピンの入出力方向を設定
- PxIN
- 各ピンの入力値を読み取り
- PxOUT
- 各ピンの出力値を設定
- PxSEL
- I/O機能とペリフェラル機能を選択
また、ポート1とポート2のみが割り込み機能をサポートしており、それぞれ割り込み用のレジスタがある。
- P1IE、P2IE
- 割り込みを有効化
- P1IES、P2IES
- 割り込みエッジ選択
- P1IFG、P2IFG
- 割り込みフラグ
※注意
MSP430F149には内蔵プルアップ / プルダウン抵抗機能がないため、必要に応じて外部抵抗を使用する必要がある。
この概要から、MSP430F149のポートピンは柔軟で多機能であり、様々なアプリケーションに適している。
各レジスタを適切に設定することにより、目的に合わせて各ポートピンを構成することができる。
2つの動作モード
MSP430F149マイコンでは、各ポートピンには複数の機能を割り当てることができる。
これらの機能は、ピンの動作モードと呼ばれている。
ピンの動作モードを選択するために、PxSELレジスタが使用されている。
各ポートピンには、以下に示す2つの動作モードがある。
- I/O機能 (デジタル入出力)
- ペリフェラル機能
PxSELレジスタにより、これらの動作モードが選択される。
- I/O機能 (デジタル入出力)
- PxSEL = 0
- ペリフェラル機能
- PxSEL = 1
UART通信の場合、使用するピン (例: P3.4とP3.5) をペリフェラル機能に設定する必要がある。
以下の例では、P3SELレジスタにBIT4とBIT5を設定している。
P3SEL |= BIT4 + BIT5; // P3.4とP3.5をペリフェラル機能に設定
この設定により、P3.4とP3.5がUART通信のTXDとRXDピンとして機能するようになる。
したがって、PxSELに適切な値を設定することにより、ピンの動作モードをペリフェラル機能に設定し、UART通信に必要なピン機能を有効にしている。
ペリフェラル機能
ペリフェラル機能は、MSP430F149マイコンのピンに割り当てられた特殊な機能を表している。
これらの機能は、ピンの動作モードと呼ばれ、PxSELレジスタを使用して選択される。
これらの機能を使い分けることで、限られたピン数で多様な機能を実現することができる。
ピンの動作モードを適切に設定することにより、目的のペリフェラル機能を有効にして、マイコンを効率的に活用することができる。
ただし、全てのピンが全ての機能を持っているわけではないため、マイコンのデータシートを参照して、各ピンに割り当てられている機能を確認する必要がある。
また、同じピンに複数の機能を同時に割り当てることはできないため、使用する機能に応じてピンの設定を適切に行う必要がある。
ペリフェラル機能の例
ピンに割り当てられた特殊な機能である。
例えば、以下のような機能がペリフェラル機能に該当する。
- UARTの送受信ピン (TXD、RXD)
- SPI通信のピン (SCLK、MOSI、MISO)
- タイマ出力、PWM出力
- ADCの入力ピン
- 比較器の入力
PxSEL = 1の設定で有効になる。
一部のペリフェラル機能では、PxDIRレジスタで入出力方向を設定する必要がある場合がある。
詳細はデータシートの各ペリフェラルのセクションを参照すること。
ポートの入出力
ポートの入出力方向はPxDIR (Port x Direction) レジスタで設定する。
PxDIRレジスタ
- 1
- 出力方向
- 0
- 入力方向
PxOUTレジスタの役割
- 出力時
- 出力値 (High / Low) の設定
- 入力時
- 通常は使用しないが、読み取りは可能
// 例: スイッチ入力の場合の一般的な設定
// P1.3を入力ポートに設定
// 外部プルアップ抵抗を使用
// スイッチOFF時はHighとなる
// スイッチON時 (GND接続時) はLowとなる
P1DIR &= ~BIT3; // P1.3を入力に設定
P1SEL &= ~BIT3; // P1.3をI/O機能に設定
// 外部プルアップ抵抗を接続してください
プルアップ / プルダウンの設定
MSP430F149には内蔵プルアップ / プルダウン抵抗機能がない。
したがって、プルアップまたはプルダウンが必要な場合は、外部抵抗を使用する必要がある。
外部プルアップ抵抗の推奨値は10kΩ~47kΩである。
外部プルダウン抵抗の推奨値も同様に10kΩ~47kΩである。
// 例: P1.3を入力として使用し、外部プルアップ抵抗を接続する場合
P1DIR &= ~BIT3; // P1.3を入力に設定
P1SEL &= ~BIT3; // P1.3をI/O機能に設定
// ハードウェア側で、P1.3とVccの間に10[kΩ]~47[kΩ]のプルアップ抵抗を接続してください
- 外部プルアップ抵抗を使用する場合の接続方法
- ポートピンとVccの間にプルアップ抵抗を接続する。
- ポートピンを入力に設定する (PxDIR = 0)
- ポートピンをI/O機能に設定する (PxSEL = 0)
- 外部プルダウン抵抗を使用する場合の接続方法
- ポートピンとGNDの間にプルダウン抵抗を接続する。
- ポートピンを入力に設定する (PxDIR = 0)
- ポートピンをI/O機能に設定する (PxSEL = 0)
※重要
MSP430F149には内蔵プルアップ / プルダウン抵抗がないため、必要に応じて外部抵抗を使用すること。
- スイッチやボタン入力には、通常プルアップ抵抗が必要である。
- 未使用のピンは、消費電力を抑えるために出力に設定する、または、外部プルダウン抵抗を接続することが推奨される。
- I2C通信には、SDAとSCLピンに外部プルアップ抵抗 (通常2.2[kΩ]~10[kΩ]) が必須である。
割り込み機能
MSP430F149では、ポート1とポート2のみが割り込み機能をサポートしている。
ポート3からポート6には割り込み機能がない。
割り込み機能を使用するためのレジスタ (ポート1とポート2のみ)
- PxIE (Port x Interrupt Enable)
- 各ピンの割り込みを有効化 / 無効化
- ビット = 0: 割り込み無効
- ビット = 1: 割り込み有効
- PxIES (Port x Interrupt Edge Select)
- 割り込みエッジを選択
- ビット = 0: 立ち上がりエッジで割り込み
- ビット = 1: 立ち下がりエッジで割り込み
- PxIFG (Port x Interrupt Flag)
- 割り込みフラグ
- ビット = 0: 割り込み要求なし
- ビット = 1: 割り込み要求あり
// 例: P1.3をボタン入力として使用し、立ち下がりエッジで割り込みを発生させる
P1DIR &= ~BIT3; // P1.3を入力に設定
P1SEL &= ~BIT3; // P1.3をI/O機能に設定
P1IES |= BIT3; // P1.3の割り込みエッジを立ち下がりに設定
P1IFG &= ~BIT3; // P1.3の割り込みフラグをクリア
P1IE |= BIT3; // P1.3の割り込みを有効化
__enable_interrupt(); // 全体の割り込みを有効化
- 割り込みハンドラの例
// ポート1の割り込みハンドラ
#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void)
{
if (P1IFG & BIT3) // P1.3の割り込みかチェック
{
// ここに割り込み処理を記述
// ...略
P1IFG &= ~BIT3; // P1.3の割り込みフラグをクリア
}
}
※注意
- ポート1とポート2の割り込みは、それぞれ単一の割り込みベクタを共有する。
- 複数のピンで割り込みが発生した場合、割り込みハンドラ内でどのピンが割り込みを発生させたかを判定する必要がある。
- 割り込みハンドラ内で、処理したピンの割り込みフラグを必ずクリアすること。