忍者ブログ

Azukish

消えゆく世界と流れる未来に最後の灯を since 2006/4/3

2019/05/18

MSP-EXP430G2同士で通信してみるの巻

久しぶりの更新がこんなんでいいのか感 is ある、が、メモ程度で書いてみる。
今回の内容としては、タイトルの通りMSP-EXP430G2同士で通信させてみるということだが、下記のような通信のループを設定した。
PC→USB (UART)→MSP-EXP430G2553[1]→SPI→MSP-EXP430G2553[2]→USB (UART)→PC
これで何ができるってわけでもないけど、まあ何かに役立つでしょう (適当)


方法としては、まずは下記のようなプログラムを別々のプロジェクトを作って書く。

PCからUARTで受けてSPIを送信するプログラム (プログラム1)
#include <msp430.h>
#include <msp430g2553.h>

int main(void) {
    WDTCTL = WDTPW | WDTHOLD;   // Stop watchdog timer

    DCOCTL = 0; // Select lowest DCOx and MODx settings
    BCSCTL1 = CALBC1_1MHZ; // Set DCO
    DCOCTL = CALDCO_1MHZ;

    P1SEL  |= BIT1+BIT5+BIT6+BIT7;
    P1SEL2 |= BIT1+BIT5+BIT6+BIT7; // Enable RXD (P1.1) SPI (P1.5-1.7)

    UCA0CTL1 |= UCSSEL_2;   // USCI clock source = SMCLK = 1MHz at default
    UCA0BR0 = 0x68;         // Frequency divider for UART
    UCA0BR1 = 0x00;         // 9600Hz is needed, but 1MHz/104=9615Hz is set
    UCA0MCTL = UCBRS0;      // UCBRSx=1    UCA0CTL1 |= UCSSEL_2;   // USCI clock source = SMCLK = 1MHz at default

    UCB0CTL0 |= UCMST;
    UCB0CTL1 |= UCSSEL_2;   // USCI clock source = SMCLK = 1MHz at default
    UCB0BR0 = 0x68;         // Frequency divider for SPI
    UCB0BR1 = 0x00;         // 9600Hz is needed, but 1MHz/104=9615Hz is set
    UCB0CTL1 &= ~UCSWRST;

    UCA0CTL1 &= ~UCSWRST;   // Initialize UCSI state machine
    UC0IE |= UCA0RXIE;      // USCI_A0 RX interrupt

    __bis_SR_register(CPUOFF + GIE);
}

#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void) {
    char a;
    if (IFG2 & UCA0RXIFG) {
        a = UCA0RXBUF;
        UCB0TXBUF = a;
    }
}


もう一つのMSP-EXP430G2からSPIを受信してその内容をPCにUARTで書き込むプログラム (プログラム2)
#include <msp430.h>
#include <msp430g2553.h>

int main(void) {
    WDTCTL = WDTPW | WDTHOLD;   // Stop watchdog timer

    DCOCTL = 0; // Select lowest DCOx and MODx settings
    BCSCTL1 = CALBC1_1MHZ; // Set DCO
    DCOCTL = CALDCO_1MHZ;

    P1SEL  |= BIT2+BIT5+BIT6+BIT7;
    P1SEL2 |= BIT2+BIT5+BIT6+BIT7; // Enable TXD (P1.2) SPI (P1.5-1.7)

    UCA0CTL1 |= UCSSEL_2;   // USCI clock source = SMCLK = 1MHz at default
    UCA0BR0 = 0x68;         // Frequency divider for UART
    UCA0BR1 = 0x00;         // 9600Hz is needed, but 1MHz/104=9615Hz is set
    UCA0MCTL = UCBRS0;      // UCBRSx=1    UCA0CTL1 |= UCSSEL_2;   // USCI clock source = SMCLK = 1MHz at default


    UCB0CTL1 |= UCSSEL_2;   // USCI clock source = SMCLK = 1MHz at default
    UCB0BR0 = 0x68;         // Frequency divider for SPI
    UCB0BR1 = 0x00;         // 9600Hz is needed, but 1MHz/104=9615Hz is set
    UCB0CTL1 &= ~UCSWRST;

    UCA0CTL1 &= ~UCSWRST;   // Initialize UCSI state machine
    UC0IE |= UCB0RXIE;      // USCI_A0 RX interrupt

    __bis_SR_register(CPUOFF + GIE);
}

#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void) {
    char a;
    if (IFG2 & UCB0RXIFG) {
        a = UCB0RXBUF;
        UCA0TXBUF = a;
    }
}
見りゃ分かると思うけど、ほとんどコピペ。
プログラム1を選択してMSP-EXP430G2をひとつだけUSBに差し込んでデバッグ。一度実行→停止してからUSBを引っこ抜く。(MSP-EXP430G2[1]とする)
プログラム2を選択して別のMSP-EXP430G2を挿してデバッグ。一度実行→停止。(これをMSP-EXP430G2[2]とする。
[2]が書き込まれたMSP-EXP430G2が割り当てられたCOMポートの番号をデバイスマネージャか何かで確認。[1]も挿して同様に確認する。
Terminalを開いてSerial Terminalを選択して、COMポートに[1]を選択。同じようにして[2]のCOMポートを選択したターミナルも開く。
この状態で[1]の方のターミナルに文字を書くと[2]のターミナルにその文字が出てくるぞ!それだけです。はい。

P.S. いつの間にかMSP-EXP430G2が廃止になってMSP-EXP430G2ETとかいうやつが推奨品になってるっぽいっすね。
価格は$10だし、刺さっている素子はMSP430G2553と前のやつと変わらないけど、個人的にはMicro USBになってるのがデカい。
あと、コレ系だとBluetooth 5に対応したCC2642Rの評価ボードとかも弄ってみたいですね。積むだけになりそうだが。。。

2018/5/22追記: 接続はP1.5、P1.6、P1.7同士を接続します。

拍手

コメント













カウンター

カレンダー

05 2019/06 07
S M T W T F S
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

アーカイブ

AD

Azkishはamazon.co.jpを宣伝しリンクすることによって サイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。