MSP430G2553 - ポートピン
概要
MSP430G2553では、ポート1とポート2の2つのポートがあり、合計16本のGPIOを持つ。
- P1.0からP1.7までの8本のピンがポート1
- P2.0からP2.7までの8本のピンがポート2
各ポートピンは入力、出力、特殊機能のいずれかに設定できる。
特殊機能には、タイマ、UART、SPI、I2C等がある。
各ポートには、それぞれ3つの8ビットレジスタがある。
- PxDIR
- 各ピンの入出力方向を設定
- PxIN
- 各ピンの入力値を読み取り
- PxOUT
- 各ピンの出力値を設定
また、割り込み機能をサポートしており、各ポートにはそれぞれ割り込み用のレジスタがある。
- P1IE
- P2IE
- 割り込みを有効化
- P1IES
- P2IES
- 割り込みエッジ選択
- P1IFG
- P2IFG
- 割り込みフラグ
プルアップ / プルダウン抵抗を内蔵しており、各ポートのPxRENレジスタで有効化することができる。
ポートマッピング機能により、一部の特殊機能を異なるポートピンに割り当てることができる。
この概要から、MSP430G2553のポートピンは柔軟で多機能であり、様々なアプリケーションに適している。
各レジスタを適切に設定することにより、目的に合わせて各ポートピンを構成することができる。
4つの動作モード
MSP430マイコンでは、各ポートピンには複数の機能を割り当てることができる。
これらの機能は、ピンの動作モードと呼ばれている。
ピンの動作モードを選択するために、PxSELとPxSEL2の2つのレジスタが使用されている。
各ポートピンには、以下に示す4つの動作モードがある。
- I/O機能 (デジタル入出力)
- プライマリ・ペリフェラル機能
- セカンダリ・ペリフェラル機能
- ターシャリ・ペリフェラル機能
PxSELとPxSEL2の組み合わせにより、これらの動作モードが選択される。
- I/O機能 (デジタル入出力)
- PxSEL = 0, PxSEL2 = 0
- プライマリ・ペリフェラル機能
- PxSEL = 1, PxSEL2 = 0
- セカンダリ・ペリフェラル機能
- PxSEL = 0, PxSEL2 = 1
- ターシャリ・ペリフェラル機能
- PxSEL = 1, PxSEL2 = 1
I2C通信の場合、使用するピン (例: P1.6とP1.7) をターシャリ・ペリフェラル機能に設定する必要がある。
以下の例では、P1SELとP1SEL2の両方に同じ値 (BIT6 + BIT7) を設定している。
P1SEL |= BIT6 + BIT7;
P1SEL2 |= BIT6 + BIT7;
この設定により、P1.6とP1.7がI2C通信のSCLとSDAピンとして機能するようになる。
したがって、P1SELとP1SEL2に同じ値を設定することにより、ピンの動作モードをターシャリ・ペリフェラル機能に設定し、てI2C通信に必要なピン機能を有効にしている。
各ペリフェラル機能
プライマリ・ペリフェラル機能、セカンダリ・ペリフェラル機能、ターシャリ・ペリフェラル機能は、MSP430マイコンのピンに割り当てられた複数の機能を表している。
これらの機能は、ピンの動作モードと呼ばれ、PxSELとPxSEL2レジスタを使用して選択される。
これらの機能を使い分けることで、限られたピン数で多様な機能を実現することができる。
ピンの動作モードを適切に設定することにより、目的のペリフェラル機能を有効にして、マイコンを効率的に活用することができる。
ただし、全てのピンが全ての機能を持っているわけではないため、マイコンのデータシートを参照して、各ピンに割り当てられている機能を確認する必要がある。
また、同じピンに複数の機能を同時に割り当てることはできないため、使用する機能に応じてピンの設定を適切に行う必要がある。
プライマリ・ペリフェラル機能
ピンに割り当てられた最も一般的なペリフェラル機能である。
例えば、UARTの送受信ピン (TXD、RXD)、SPI通信のピン (SCLK、MOSI、MISO) 等がプライマリ・ペリフェラル機能に該当する。
PxSEL = 1, PxSEL2 = 0
の設定で有効になる。
セカンダリ・ペリフェラル機能
プライマリ・ペリフェラル機能の代替機能である。
同じピンに複数のペリフェラル機能を割り当てる場合に使用される。
例えば、タイマ出力、PWM出力、比較器の入力等がセカンダリ・ペリフェラル機能に該当する。
PxSEL = 0, PxSEL2 = 1
の設定で有効になる。
ターシャリ・ペリフェラル機能
プライマリおよびセカンダリ・ペリフェラル機能とは異なる第3の機能である。
一部のピンでのみ使用可能で、特定の用途に特化した機能である。
例えば、I2C通信のSCLとSDAピン、アナログ入力のピン等がターシャリ・ペリフェラル機能に該当する。
PxSEL = 1, PxSEL2 = 1
の設定で有効になる。
ポートの入出力
ポートの入出力方向はPxDIR (Port x Direction) レジスタで設定する。
入力ポートとして使用する場合でも、プルアップ抵抗を使用するためにPxOUTを設定することができる。
PxDIRレジスタ
- 1
- 出力方向
- 0
- 入力方向
PxOUTレジスタの役割
- 出力時
- 出力値 (High / Low) の設定
- 入力時
- プルアップ / プルダウン抵抗の選択
// 例: スイッチ入力の場合の一般的な設定
// P1.3を入力ポートに設定
// 内部プルアップ抵抗を有効
// スイッチOFF時はHighとなる
// スイッチON時 (GND接続時) はLowとなる
P1DIR &= ~BIT3; // P1.3を入力に設定
P1REN |= BIT3; // P1.3の内部抵抗を有効化
P1OUT |= BIT3; // P1.3をプルアップに設定
プルアップ / プルダウンの設定
PxREN (Port x Resistor Enable) レジスタ と PxOUTレジスタを組み合わせて使用することにより、プルアップ / プルダウンを設定できる。
この設定により、内部プルアップ抵抗が有効になる。
- PxRENレジスタで内部抵抗の有効 / 無効を設定
- ビットに1を書き込むと内部抵抗が有効
- ビットに0を書き込むと内部抵抗が無効
- PxOUTレジスタでプルアップ / プルダウンを設定
- PxRENが1、PxOUTが1の場合 -> プルアップ
- PxRENが1、PxOUTが0の場合 -> プルダウン
// 例: P1.3をプルアップする場合
P1REN |= BIT3; // P1.3の内部抵抗を有効化
P1OUT |= BIT3; // P1.3をプルアップに設定
もし、ポートを入力に設定して外部プルアップを使用する場合は、ポートを入力に設定、内部プルアップ / 内部プルダウンは無効にする。
- PxDIR = 0
- 入力方向に設定する。
- PxREN = 0
- 内部プルアップ / 内部プルダウンを無効化する。
- PxOUT = 0
- PxOUTは、PxRENが0 (プルアップ / プルダウン無効) の場合でも、入力ポートの読み取り値に影響を与える可能性がある。
- PxOUTを0に設定することにより、意図しない動作を防ぐことができる。
なお、PxSELとPxSEL2は、デジタルI/Oとして使用する場合は、両方とも0に設定する必要がある。
※注意
内部プルアップと外部プルアップを同時に使用することは推奨されない。
- 並列抵抗となるため、実効的なプルアップ抵抗値が下がる。
- 無駄な電流消費につながる。
- 内部プルアップと外部プルアップで異なる電圧レベルに引っ張られる可能性がある。
- 高精度や特定の抵抗値が必要な場合は、外部プルアップのみを使用する。
- それ以外の場合は内部プルアップのみを使用する。