「MSP430G2553 - I2C」の版間の差分

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
ナビゲーションに移動 検索に移動
124行目: 124行目:


== UCB0TXBUF : USCI_B0送信バッファレジスタ ==
== UCB0TXBUF : USCI_B0送信バッファレジスタ ==
送信するデータを書き込むレジスタである。<br>
UCB0TXBUFレジスタは、送信するデータを1バイトずつ書き込むレジスタである。<br>
このレジスタにデータを書き込むと、自動的に送信が開始される。<br>
<br>
<br>
このレジスタにデータを書き込むと、自動的に送信が開始される。<br>
データを送信する時、UCB0TXBUFレジスタが空になるのを待つ必要は無い。<br>
<br>
I2C通信では、以下のような手順でデータを送信する。<br>
# UCB0TXBUFレジスタにデータを書き込む。
# 書き込まれたデータが自動的に送信される。
# 送信が完了すると、<code>UCB0TXIFG</code>フラグがセットされる。
# 次のデータを送信する場合は、<code>UCB0TXIFG</code>フラグをクリアして、再度、<code>UCB0TXBUF</code>レジスタにデータを書き込む。
<br>
つまり、1バイトずつデータを送信することができるため、UCB0TXBUFレジスタが空になるのを待つ必要は無い。<br>
ただし、前のデータの送信が完了する前に新しいデータを書き込んでしまうと、データが上書きされてしまうため、注意が必要である。<br>
<br>
一般的には、<code>UCB0TXIFG</code>フラグを確認する、または、送信完了割り込みを使用して前のデータの送信が完了したことを確認した後に次のデータを書き込むことにより、<br>
データの送信タイミングを適切に制御できる。<br>
<br><br>
<br><br>



2024年6月3日 (月) 03:56時点における版

概要

I2C通信プロトコルでは、データは8ビット単位で送信される。

I2C通信でデータを送受信する場合、以下に示すようなデータフォーマットが使用される。

  1. スタートコンディション
  2. スレーブアドレス (7ビット) + 読み取り / 書き込みビット (1ビット)
  3. データバイト(8ビット)
  4. ACKまたはNACKビット
  5. 複数のデータバイトを送信する場合は、手順3と4を繰り返す。
  6. ストップコンディション


I2C通信を行う場合、各レジスタを適切に設定して、必要に応じて割り込み処理を実装することにより、MSP430G2553マイコンでI2C通信を行うことができる。

また、各レジスタの設定は、通信モード、クロック周波数、スレーブアドレス等、アプリケーションの要件に応じて行う。


UCB0CTL1レジスタ

UCB0CTL1レジスタの概要

USCI_B0 (Universal Serial Communication Interface, module B0) モジュールの制御レジスタの1つである。
このレジスタは、I2C通信やSPI通信等のシリアル通信プロトコルの設定や動作を制御するために使用される。

主な機能と設定は以下の通りである。

  • クロック源の選択 (UCSSEL)
    UCSSELビットを使用して、USCI_B0モジュールのクロック源を選択する。
    ACLK、SMCLK、または外部クロックから選択可能です。

  • 同期モード選択 (UCMODE)
    UCMODEビットを使用して、同期式通信プロトコル (I2C、SPI) を選択する。
    マスター / スレーブモード選択 (UCMST)
    UCMSTビットを使用して、USCI_B0モジュールをマスターまたはスレーブとして設定する。

  • データビット数の設定 (UC7BIT)
    UC7BITビットを使用して、データ長を7ビットまたは8ビットに設定する。

  • クロック位相とポラリティの設定 (UCCKPH, UCCKPL)
    UCCKPHビットとUCCKPLビットを使用して、SPIモードでのクロック位相とポラリティを設定する。

  • ソフトウェアリセット (UCSWRST)
    UCSWRSTビットを使用して、USCI_B0モジュールをリセットする。


これらの設定を適切に行うことにより、目的のシリアル通信プロトコルを実装して、他のデバイスとの通信を確立することができる。
UCB0CTL1レジスタは、USCI_B0モジュールの動作を細かく制御するための重要なレジスタの1つである。

UCB0CTL1レジスタは、I2C通信だけでなく、SPI通信でも使用される。
USCI_B0モジュールは、I2C通信とSPI通信の両方の通信プロトコルをサポートしているため、UCB0CTL1レジスタには両方のプロトコルに関連する設定が含まれている。
I2C通信に関連するビットは以下の通りである。

  • UCTR
  • UCTXSTT
  • UCTXSTP


UCB0CTL1レジスタの重要なビット

UCB0CTL1レジスタには、I2C通信モードで使用される3つの重要なビットがある。

以下に示すビットは、I2C通信におけるデータの送受信や、スタート・ストップコンディションの制御に使用される。
マスターモードでは、UCTXSTPビット、および、UCTXSTTビットを適切に設定することにより、I2C通信のタイミングを制御できる。
スレーブモードでは、UCTRビットを設定することにより、データの送信または受信を指定できる。

UCTR (Transmit / Receive Mode)

このビットは、I2Cスレーブモードでのデータの送受信方向を制御する。

  • 0
    受信モード (スレーブはマスターからデータを受信)
  • 1
    送信モード (スレーブはマスターにデータを送信)


UCTXSTT (Transmit START Condition)

このビットを1に設定する場合と、マスターモードでI2Cバスにスタートコンディションを送信する。

スタートコンディションは、データ転送の開始を示すために使用する。

  • 0
    影響なし
  • 1
    I2Cバスにスタートコンディションを送信


UCTXSTP (Transmit STOP Condition)

このビットを1に設定する場合、マスターモードでI2Cバスにストップコンディションを送信する。

ストップコンディションは、データ転送の終了を示すために使用する。

  • 0
    影響なし
  • 1
    I2Cバスにストップコンディションを送信



UCB0CTL0 : USCI_B0制御レジスタ0

UCSYNC : 同期モード有効ビット (I2Cモードの選択)

  • 0
    非同期モード (UART通信)
  • 1
    同期モード (I2C、SPI通信)


UCMODE : モード選択ビット (I2Cモードの選択)

  • 00
    3線式SPI (UCxSIMO、UCxSOMI、UCxCLK)
  • 01
    4線式SPI (UCxSIMO、UCxSOMI、UCxCLK、UCxSTE)
  • 10
    I2Cモード
  • 11
    予約済み


UCMST : マスター / スレーブモード選択ビット

  • 0
    スレーブモード
  • 1
    マスターモード


UCTR : 送信 / 受信モード選択ビット (I2Cモードでのみ使用)

応答確認の有効化を行うビットである。

  • 0
    受信モード
  • 1
    送信モード



UCB0BR0, UCB0BR1 : USCI_B0ボーレートレジスタ

UCB0CLKレジスタ、UCB0BR0レジスタ、UCB0BR1の3つのレジスタを組み合わせて、I2Cの通信速度を設定する。



UCB0I2CSA : USCI_B0 I2Cスレーブアドレスレジスタ

スレーブモードでは、自身のスレーブアドレスを設定する。
マスターモードでは、通信するスレーブデバイスのアドレスを設定する。


UCB0TXBUF : USCI_B0送信バッファレジスタ

UCB0TXBUFレジスタは、送信するデータを1バイトずつ書き込むレジスタである。
このレジスタにデータを書き込むと、自動的に送信が開始される。

データを送信する時、UCB0TXBUFレジスタが空になるのを待つ必要は無い。

I2C通信では、以下のような手順でデータを送信する。

  1. UCB0TXBUFレジスタにデータを書き込む。
  2. 書き込まれたデータが自動的に送信される。
  3. 送信が完了すると、UCB0TXIFGフラグがセットされる。
  4. 次のデータを送信する場合は、UCB0TXIFGフラグをクリアして、再度、UCB0TXBUFレジスタにデータを書き込む。


つまり、1バイトずつデータを送信することができるため、UCB0TXBUFレジスタが空になるのを待つ必要は無い。
ただし、前のデータの送信が完了する前に新しいデータを書き込んでしまうと、データが上書きされてしまうため、注意が必要である。

一般的には、UCB0TXIFGフラグを確認する、または、送信完了割り込みを使用して前のデータの送信が完了したことを確認した後に次のデータを書き込むことにより、
データの送信タイミングを適切に制御できる。


UCB0RXBUF : USCI_B0受信バッファレジスタ

受信したデータを読み出すレジスタである。

新しいデータを受信すると、UCB0RXIFGフラグがセットされる。


IE2 : 割り込み有効化レジスタ2

UCB0TXIE : USCI_B0送信割り込み有効ビット

  • 0
    割り込み無効
  • 1
    割り込み有効


UCB0RXIE : USCI_B0受信割り込み有効ビット

  • 0
    割り込み無効
  • 1
    割り込み有効



IFG2 : 割り込みフラグレジスタ2

UCB0TXIFG : USCI_B0送信割り込みフラグ

  • 0
    割り込みなし
  • 1
    送信バッファが空になり、新しいデータを書き込み可能


UCB0RXIFG : USCI_B0受信割り込みフラグ

  • 0
    割り込みなし
  • 1
    新しいデータが受信バッファに到着