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