[MSP430] USCI-SPI
ここではMSP 430 G 2553 MCUに基づいて記述する.
詳細は製品シリーズによって異なる場合があります.
1.USCI-SPIとは?
7- or 8-bit data length LSB-first or MSB-first data transmit and receive 3-pin and 4-pin SPI operation Master or slave modes Independent transmit and receive shift registers Separate transmit and receive buffer registers Continuous transmit and receive operation Selectable clock polarity and phase control Programmable clock frequency in master mode Independent interrupt capability for receive and transmit Slave operation in LPM4 いくつか見てみましょう. 3-pin and 4-pin SPI operation SPI通信回線は、3ピンまたは4ピンに設定することができる.3針は一般的なCLK、SIMO、SOMIを指し、4針は3針にSTE線を加えたものを指す.STEはSlave Transmit Enableの略で、1つのバスに複数のプライマリノードが存在するピンです. Independent interrupt capability for receive and transmit SPI TXとRXに対してそれぞれ独立してISRを記述できるそうです. Slave operation in LPM4 LPM 4モードでSlaveモードで動作できるそうです.
3.USCI-SPIチャート
UCXxCTLy - USCI_Xx control register UCXxBRy - USCI_Xx baud rate control register UCXxSTAT - USCI_Xx status register UCXxRXBUF - USCI_Xx receive buffer register UCXxTXBUF - USCI_Xx transmit buffer register IE2 - SFR interrupt enable register 2 IFG2 - SFR interrupt flag register 2 UC1IE - USCI_X1 interrupt enable register UC1IFG - USCI_X1 interrupt flag register
SPI通信を初期化するためのレジスタ.
SPIクロック周波数を設定するレジスタです.
各種状態関連フラグを管理するレジスタ.
SPI RXバッファレジスタ.
SPI TXバッファレジスタ.
UCA 0、UCB 0のTX、RX割り込みをアクティブにするレジスタ.
UCA 0,UCB 0のTX,RX割り込みフラグレジスタ.
UCA 1,UCB 1のTX,RXはアクティブレジスタを中断する.
UCA 1,UCB 1のTX,RX割り込みフラグレジスタ.
5.準備物
USCI A 0を用いた三線通信(Master) USCI B 0を用いた三線通信(slave)
USCI A 0を使用してMasterモードでSPIを使用する例.全部で5本の線を使います. P1.2 -> Data Out (UCA0SIMO) P1.1 <- Data In (UCA0SOMI) P1.4 -> Serial Clock Out (UCA0CLK) P1.0 -> LED P1.5 -> Slave reset 以下に、1から1に数字を増やし、slaveにSPI通信を送信する例を示す.次のコードはマスターコードに使用され、従属コードは例2のコードを使用すればよい. P1.2とP 1です.7接続性(MOMI) P1.1とP 1です.6接続性(MISO) P1.4とP 1です.接続5(CLK)-そうですか? コードを実行すると、プライマリ・ノードは1から1にデータを追加し、SPIプロトコルに従ってセカンダリ・ノードにデータを送信し、ノードから受信したデータをプライマリ・ノードに再送信します.動作を直接確認するには、オシロスコープまたは論理ロケータを使用する必要があります.そうしないと、追加のコードが必要です.
USCI B 0を使用してSlaveモードでSPIを使用する例.全部で3本の線を使います. P1.7 <- Data In (UCB0SIMO) P1.6 -> Data Out (UCB0SOMI) P1.5 -> Serial Clock In (UCABCLK)
詳細は製品シリーズによって異なる場合があります.
1.USCI-SPIとは?
シリアルエージェントインタフェース(SPI)は、UARTと同様に、チップ間でデータを交換するためのシリアル通信プロトコルである.3本または4本の回線を使用し、シフトレジスタを使用するのが特徴です.UARTやI 2 Cに比べて通信速度が速いという利点がある.
MSP 430 x 2 xxモデルでは、USCIモジュールのSPIモードを用いてSPI通信を行うことができる.
USCI AとUSCI Bは両方ともSPIをサポートしているので、どちらかのモードをSPIモードとして選択することができる.
2.USCI-SPI特性
USCI-SPIの特徴は以下の通りである.
USCI-SPIの特徴は以下の通りである.
3.USCI-SPIチャート
USCI-SPIのグラフは以下の通りです.
USCI-UARTで説明した内容とほぼ似ています.(実際にも似ています).選択したクロックソースを乗算器または除算器、極性および位相制御することによってSPIクロックを生成し、出力およびTX、RXモジュールをCLKピンで挿入する.TXモジュールはクロックに従ってデータを伝送し、RXモジュールはクロックに従ってデータを受信する.
4.相関レジスタ
USCI-SPIに関するレジスタは以下のようになります.UCAとUCBの2つの共通の部分を合わせてUCXで表現します.
USCI-SPIに関するレジスタは以下のようになります.UCAとUCBの2つの共通の部分を合わせてUCXで表現します.
1. UCXxCTLy
SPI通信を初期化するためのレジスタ.
2. UCXxBRy
SPIクロック周波数を設定するレジスタです.
3. UCXxSTAT
各種状態関連フラグを管理するレジスタ.
4. UCXxRXBUF
SPI RXバッファレジスタ.
5. UCXxTXBUF
SPI TXバッファレジスタ.
6. IE2
UCA 0、UCB 0のTX、RX割り込みをアクティブにするレジスタ.
7. IFG2
UCA 0,UCB 0のTX,RX割り込みフラグレジスタ.
8. UC1IE
UCA 1,UCB 1のTX,RXはアクティブレジスタを中断する.
9. UC1IFG
UCA 1,UCB 1のTX,RX割り込みフラグレジスタ.
5.準備物
SPIを使用する最も一般的な方法は、MCU制御を使用してSPIをサポートするアナログまたはデジタルセンサである.しかし、これは別個のセンサを必要とするので、本明細書の例では、MSP 430 G 2553の2つのUSCI−SPIをプライマリノードおよびスレーブノードとして使用する.
2つのUSCI−SPIで使用されるGPIO対が異なるため、それらを接続するために1本のジャンプ線が必要である.ジャンプラインを3本用意しましょう(SIMO, SOMI, CLK)
文章を書く考えですが、ジャケットの糸さえなかったらどうしますか?
6.例
2つの例を見てみましょう.例では、制御センサの例を除外します.
2つの例を見てみましょう.例では、制御センサの例を除外します.
1.USCI A 0による三線通信(Master)
USCI A 0を使用してMasterモードでSPIを使用する例.全部で5本の線を使います.
#include <msp430.h>
unsigned char MST_Data, SLV_Data;
int main(void)
{
volatile unsigned int i;
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
P1OUT = 0x00; // P1 setup for LED & reset output
P1DIR |= BIT0 + BIT5;
P1SEL = BIT1 + BIT2 + BIT4;
P1SEL2 = BIT1 + BIT2 + BIT4;
UCA0CTL0 |= UCCKPL + UCMSB + UCMST + UCSYNC; // 3-pin, 8-bit SPI master
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 |= 0x02; // /2
UCA0BR1 = 0; //
UCA0MCTL = 0; // No modulation
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
IE2 |= UCA0RXIE; // Enable USCI0 RX interrupt
P1OUT &= ~BIT5; // Now with SPI signals initialized,
P1OUT |= BIT5; // reset slave
__delay_cycles(75); // Wait for slave to initialize
MST_Data = 0x01; // Initialize data values
SLV_Data = 0x00;
UCA0TXBUF = MST_Data; // Transmit first character
__bis_SR_register(LPM0_bits + GIE); // CPU off, enable interrupts
}
#pragma vector=USCIAB0RX_VECTOR // Test for valid RX and TX character
__interrupt void USCIA0RX_ISR(void)
{
volatile unsigned int i;
while (!(IFG2 & UCA0TXIFG)); // USCI_A0 TX buffer ready?
if (UCA0RXBUF == SLV_Data) // Test for correct character RX'd
P1OUT |= BIT0; // If correct, light LED
else
P1OUT &= ~BIT0; // If incorrect, clear LED
MST_Data++; // Increment master value
SLV_Data++; // Increment expected slave value
UCA0TXBUF = MST_Data; // Send next value
__delay_cycles(50); // Add time between transmissions to
} // make sure slave can keep up
MSP-EXT 430 G 2ボードのGPIOヘッダをジャンパを使用して下に接続し、コードを実行します.2.USCI B 0による三線通信(slave)
USCI B 0を使用してSlaveモードでSPIを使用する例.全部で3本の線を使います.
#include <msp430.h>
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
while (!(P1IN & BIT4)); // If clock sig from mstr stays low,
// it is not yet in SPI mode
P1SEL = BIT7 + BIT6 + BIT5;
P1SEL2 = BIT7 + BIT6 + BIT5;
UCB0CTL1 = UCSWRST; // **Put state machine in reset**
UCB0CTL0 |= UCCKPL + UCMSB + UCSYNC; // 3-pin, 8-bit SPI master
UCABCTL1 &= ~UCSWRST; // **Initialize USCI state machine**
IE2 |= UCA0RXIE; // Enable USCI0 RX interrupt
__bis_SR_register(LPM4_bits + GIE); // Enter LPM4, enable interrupts
}
#pragma vector=USCIAB0RX_VECTOR // Echo character
__interrupt void USCI0RX_ISR (void)
{
while (!(IFG2 & UCB0TXIFG)); // USCI_B0 TX buffer ready?
UCA0TXBUF = UCB0RXBUF;
}
コードを実行すると、プライマリノードから受け取ったデータがそのまま再送信されます.同様に、動作を直接チェックする場合は、オシロスコープまたは論理ロケータを使用する必要があります.そうしないと、追加のコードが必要になります.Reference
この問題について([MSP430] USCI-SPI), 我々は、より多くの情報をここで見つけました https://velog.io/@pikamon/MSP430-9テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol