MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
MSP430G2553 - I2Cのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
MSP430G2553 - I2C
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == I2C通信プロトコルでは、データは8ビット単位で送信される。<br> <br> I2C通信でデータを送受信する場合、以下に示すようなデータフォーマットが使用される。<br> # スタートコンディション # スレーブアドレス (7ビット) + 読み取り / 書き込みビット (1ビット) # データバイト(8ビット) # ACKまたはNACKビット # 複数のデータバイトを送信する場合は、手順3と4を繰り返す。 # ストップコンディション <br> I2C通信を行う場合、各レジスタを適切に設定して、必要に応じて割り込み処理を実装することにより、MSP430G2553マイコンでI2C通信を行うことができる。<br> <br> また、各レジスタの設定は、通信モード、クロック周波数、スレーブアドレス等、アプリケーションの要件に応じて行う。<br> <br><br> == UCB0CTL1レジスタ == ==== UCB0CTL1レジスタの概要 ==== USCI_B0 (Universal Serial Communication Interface, module B0) モジュールの制御レジスタの1つである。<br> このレジスタは、I2C通信やSPI通信等のシリアル通信プロトコルの設定や動作を制御するために使用される。<br> <br> 主な機能と設定は以下の通りである。<br> * クロック源の選択 (UCSSEL) *: <code>UCSSEL</code>ビットを使用して、USCI_B0モジュールのクロック源を選択する。 *: ACLK、SMCLK、または外部クロックから選択可能です。 *: <br> * 同期モード選択 (UCMODE) *: <code>UCMODE</code>ビットを使用して、同期式通信プロトコル (I2C、SPI) を選択する。 *: マスター / スレーブモード選択 (UCMST) *: <code>UCMST</code>ビットを使用して、USCI_B0モジュールをマスターまたはスレーブとして設定する。 *: <br> * データビット数の設定 (UC7BIT) *: <code>UC7BIT</code>ビットを使用して、データ長を7ビットまたは8ビットに設定する。 *: <br> * クロック位相とポラリティの設定 (UCCKPH, UCCKPL) *: <code>UCCKPH</code>ビットと<code>UCCKPL</code>ビットを使用して、SPIモードでのクロック位相とポラリティを設定する。 *: <br> * ソフトウェアリセット (UCSWRST) *: <code>UCSWRST</code>ビットを使用して、USCI_B0モジュールをリセットする。 <br> これらの設定を適切に行うことにより、目的のシリアル通信プロトコルを実装して、他のデバイスとの通信を確立することができる。<br> UCB0CTL1レジスタは、USCI_B0モジュールの動作を細かく制御するための重要なレジスタの1つである。<br> <br> UCB0CTL1レジスタは、I2C通信だけでなく、SPI通信でも使用される。<br> USCI_B0モジュールは、I2C通信とSPI通信の両方の通信プロトコルをサポートしているため、UCB0CTL1レジスタには両方のプロトコルに関連する設定が含まれている。<br> I2C通信に関連するビットは以下の通りである。<br> * UCTR * UCTXSTT * UCTXSTP <br> ==== UCB0CTL1レジスタの重要なビット ==== <code>UCB0CTL1</code>レジスタには、I2C通信モードで使用される3つの重要なビットがある。<br> <br> 以下に示すビットは、I2C通信におけるデータの送受信や、スタート・ストップコンディションの制御に使用される。<br> マスターモードでは、<code>UCTXSTP</code>ビット、および、<code>UCTXSTT</code>ビットを適切に設定することにより、I2C通信のタイミングを制御できる。<br> スレーブモードでは、<code>UCTR</code>ビットを設定することにより、データの送信または受信を指定できる。<br> <br> ==== UCTR (Transmit / Receive Mode) ==== このビットは、I2Cスレーブモードでのデータの送受信方向を制御する。<br> * 0 *: 受信モード (スレーブはマスターからデータを受信) * 1 *: 送信モード (スレーブはマスターにデータを送信) <br> ==== UCTXSTT (Transmit START Condition) ==== このビットを<code>1</code>に設定する場合と、マスターモードでI2Cバスにスタートコンディションを送信する。<br> <br> <u>スタートコンディションは、データ転送の開始を示すために使用する。</u><br> * 0 *: 影響なし * 1 *: I2Cバスにスタートコンディションを送信 <br> ==== UCTXSTP (Transmit STOP Condition) ==== このビットを<code>1</code>に設定する場合、マスターモードでI2Cバスにストップコンディションを送信する。<br> <br> <u>ストップコンディションは、データ転送の終了を示すために使用する。</u><br> * 0 *: 影響なし * 1 *: I2Cバスにストップコンディションを送信 <br><br> == UCB0CTL0 : USCI_B0制御レジスタ0 == ==== UCSYNC : 同期モード有効ビット (I2Cモードの選択) ==== * 0 *: 非同期モード (UART通信) * 1 *: 同期モード (I2C、SPI通信) <br> ==== UCMODE : モード選択ビット (I2Cモードの選択) ==== * 00 *: 3線式SPI (UCxSIMO、UCxSOMI、UCxCLK) * 01 *: 4線式SPI (UCxSIMO、UCxSOMI、UCxCLK、UCxSTE) * 10 *: I2Cモード * 11 *: 予約済み <br> ==== UCMST : マスター / スレーブモード選択ビット ==== * 0 *: スレーブモード * 1 *: マスターモード <br> ==== UCTR : 送信 / 受信モード選択ビット (I2Cモードでのみ使用) ==== 応答確認の有効化を行うビットである。<br> * 0 *: 受信モード * 1 *: 送信モード <br><br> == UCB0BR0, UCB0BR1 : USCI_B0ボーレートレジスタ == <code>UCB0CLK</code>レジスタ、<code>UCB0BR0</code>レジスタ、<code>UCB0BR1</code>の3つのレジスタを組み合わせて、I2Cの通信速度を設定する。<br> <math>\mbox{ 通 信 速 度 } = \dfrac{\mbox{UCB0CLK}}{(\mbox{UCB0BR0} + \mbox{UCB0BR1} \times 256)}</math><br> <br><br> == UCB0I2CSA : USCI_B0 I2Cスレーブアドレスレジスタ == スレーブモードでは、自身のスレーブアドレスを設定する。<br> マスターモードでは、通信するスレーブデバイスのアドレスを設定する。<br> <br><br> == UCB0TXBUF : USCI_B0送信バッファレジスタ == UCB0TXBUFレジスタは、送信するデータを1バイトずつ書き込むレジスタである。<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> == UCB0RXBUF : USCI_B0受信バッファレジスタ == 受信したデータを読み出すレジスタである。<br> 新しいデータを受信すると、<code>UCB0RXIFG</code>フラグがセットされる。<br> <br> UCB0RXBUFレジスタは、I2C通信で受信したデータを格納するレジスタであり、8ビット幅を持つ。<br> I2C通信では、データは8ビット (1バイト) 単位で送受信される。<br> <br> マスターデバイスから1バイトのデータが送信されて、スレーブデバイス (MSP430G2553の場合) がそのデータを受信する時、以下の動作が行われる。<br> # 受信した1バイトのデータがUCB0RXBUFレジスタに格納される。 # <code>UCB0RXIFG</code> (USCI_B0受信割り込みフラグ) がセットされる。 <br> したがって、UCB0RXBUFレジスタは1バイト単位でデータを受信して、<code>UCB0RXIFG</code>フラグは1バイトの受信が完了したことを示す。<br> <br> <code>UCB0RXIFG</code>フラグがセットされることにより、新しいデータが受信されたことを示す。<br> このフラグは、ソフトウェアで明示的にクリアする必要がある。<br> <br> 一般的に、<code>UCB0RXIFG</code>フラグがセットされたことを検出するには、以下に示す2つの方法がある。<br> * ポーリング方式 *: <code>UCB0RXIFG</code>フラグを定期的に確認して、セットされたらデータを読み出す。 * 割り込み方式 *: <code>UCB0RXIE</code> (USCI_B0受信割り込み有効ビット) を有効にしておき、<code>UCB0RXIFG</code>フラグがセットされたら割り込みが発生するようにする。 <br> どちらの方法を使用するかは、アプリケーションの要件や設計に依存する。<br> ただし、割り込み方式を使用する場合は、適切な割り込みハンドラを実装する必要がある。<br> <br><br> == IE2 : 割り込み有効化レジスタ2 == ==== UCB0TXIE : USCI_B0送信割り込み有効ビット ==== * 0 *: 割り込み無効 * 1 *: 割り込み有効 <br> ==== UCB0RXIE : USCI_B0受信割り込み有効ビット ==== * 0 *: 割り込み無効 * 1 *: 割り込み有効 <br><br> == IFG2 : 割り込みフラグレジスタ2 == ==== UCB0TXIFG : USCI_B0送信割り込みフラグ ==== * 0 *: 割り込みなし * 1 *: 送信バッファが空になり、新しいデータを書き込み可能 <br> ==== UCB0RXIFG : USCI_B0受信割り込みフラグ ==== * 0 *: 割り込みなし * 1 *: 新しいデータが受信バッファに到着 <br><br> __FORCETOC__ [[カテゴリ:MSP430]]
MSP430G2553 - I2C
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse