📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

143行目: 143行目:


== UCB0RXBUF : USCI_B0受信バッファレジスタ ==
== UCB0RXBUF : USCI_B0受信バッファレジスタ ==
==== UCB0RXBUF : USCI_B0受信バッファレジスタとは ====
受信したデータを読み出すレジスタである。<br>
受信したデータを読み出すレジスタである。<br>
新しいデータを受信すると、<code>UCB0RXIFG</code>フラグがセットされる。<br>
新しいデータを受信すると、<code>UCB0RXIFG</code>フラグがセットされる。<br>
166行目: 167行目:
どちらの方法を使用するかは、アプリケーションの要件や設計に依存する。<br>
どちらの方法を使用するかは、アプリケーションの要件や設計に依存する。<br>
ただし、割り込み方式を使用する場合は、適切な割り込みハンドラを実装する必要がある。<br>
ただし、割り込み方式を使用する場合は、適切な割り込みハンドラを実装する必要がある。<br>
<br>
==== サンプルコード ====
以下の例では、MSP430G2553でI2C通信の受信割り込みを使用している。<br>
スレーブアドレスを0x48に設定して、マスターデバイスからのデータを受信している。<br>
<br>
I2C通信の受信割り込みを設定する手順を、以下に示す。<br>
# GPIOの設定
#: P1.6およびP1.7をI2Cピン (UCB0SCLとUCB0SDA) として設定する。
# USCI_B0の設定
#: I2Cモード、同期モード、スレーブアドレスを設定する。
# 受信割り込みの有効化
#: IE2レジスタの<code>UCB0RXIE</code>ビットを設定する。
# CPUをオフにして、割り込みを有効化する。
<br>
受信割り込みが発生する時、<code>USCI0RX_ISR</code>割り込みサービスルーチンが呼び出される。<br>
この割り込みサービスルーチン内で、<code>UCB0RXBUF</code>レジスタから受信データを読み出して、変数receivedDataに格納する。<br>
その後、<code>UCB0RXIFG</code>フラグをクリアして、次の受信割り込みに備える。<br>
<br>
マスターデバイスからデータを受信すると、変数receivedDataにデータが格納されるため、メインループまたは他の関数からこの変数にアクセスすることにより、受信したデータを処理できる。<br>
<syntaxhighlight lang="c">
#include <msp430.h>
#define SLAVE_ADDRESS 0x48
volatile unsigned char receivedData;
int main(void)
{
    WDTCTL = WDTPW | WDTHOLD;  // ウォッチドッグタイマを停止
    // GPIOの設定
    P1SEL  |= BIT6 | BIT7;      // I2C ピンを選択 (UCB0SDA は P1.7、UCB0SCL は P1.6)
    P1SEL2 |= BIT6 | BIT7;      // I2C ピンを選択 (UCB0SDA は P1.7、UCB0SCL は P1.6)
    // USCI_B0の設定
    UCB0CTL1  |= UCSWRST;            // ソフトウェアリセットを有効化
    UCB0CTL0  = UCMODE_3 | UCSYNC;  // I2Cモード、同期モード
    UCB0I2COA  = SLAVE_ADDRESS;      // スレーブアドレスを設定
    UCB0CTL1  &= ~UCSWRST;            // ソフトウェアリセットを解除
    IE2      |= UCB0RXIE;            // 受信割り込みを有効化
    __bis_SR_register(CPUOFF | GIE);  // CPUをオフにして、割り込みを有効化
    while(1) {
      // メインループ
      // ...略
    }
}
// USCI_B0受信割り込みサービスルーチン
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
    receivedData = UCB0RXBUF;  // 受信データを変数に格納
    UCB0RXIFG &= ~BIT0;        // 受信割り込みフラグをクリア
}
</syntaxhighlight>
<br><br>
<br><br>