2013年3月11日月曜日

LaunchPad UART,UART,UART,,,,

 Texas Instruments MSP430G2553のUART機能を試しました。しかし、ほんの些細なことに気付けず、お手上げ一歩手前、結構手こずりました。
 以下に、その顛末を記します。
 
UART機能を使う場合、Tx/Rxをクロス配線
1.Software UARTの検証
 もともと、MSP430LaunchPadには、UART機能の無い、MSP430G2231が付属していてデモプログラムはPCとの間でSoftUARTによる通信を実現していました。
 そこで、MCUをUART機能を持つMSP430G2553に置き換え、Software UARTを試すことにしました。
 1)CCS Ver4で新規プロジェクトを作成、
 作成時のProject Templatesで [Grace Examples/Hello world via software UART]を選択
 2)実行(Debug)
PCのターミナルソフト(ボーレート2400)で「Hello world.」を確認
2.UART機能の検証
 まずは、送信(TX)のみのプロジェクトを作成。
 1)新規プロジェクトを作成。
 作成時のProject Templatesで[Empty MSP430 Grace Project]を選択
 2)GraceでUART機能を設定
Grece Device OverViewで[USCI  A0 UART...]を選び、UARTの端子設定、ボーレート設定を行いました。
3)実行(Debug)
software UARTと同様にPCのターミナルソフトでMSP430からの通信を待つが音沙汰なし。
4)試行錯誤
 まず、P1.1、P1.2のピンの設定に問題があると思い、GraceでGPIOの設定を先に、その後UART設定を行う。Graceでの設定と、src/csl/GPIO_init.c等のソースコードの内容に祖語があると思いジタバタ、(プロジェクトのビルドでGraceの設定内容がソースコードに反映されることに気付くのは結構経ってから)
 UARTのボーレートが正しく設定されていないと思い、Basic Clock System(BCS)の設定を1、8、12、16MHzで試す
  等々、試行錯誤を繰り返す。

3.「え! こんなことが。。。」
 試行錯誤を散々繰り返した、もう、MSP430のUART機能はデータシートだけの機能とあきらめ、BaseBoadを作成、一応、UARTの入出力Pinを用意、LCD表示を確かめた後、だめ元で、UART機能をBaseBoad上で試す。すると、PCのターミナルソフトに「Hello world.」の表示が、、「え! なんで」と言う気持ちになりました。
   
 そこで、BaseBoad上のMSP430をLaunchPadに戻して、UARTの通信を確かめると、沈黙
Stellaris-MSP430 UART
つくづくLanchPadを眺めると、P1.1(TXD)、P1,2(RXD)の表記に目が留まりました。
「うそ!TX/RX 逆じゃないか!!」
つまり、LaunchPad MSP430 デモプログラムのSoftwareUARTのTX/RXピン構成が、MSP430G2553のUARTのTX/RXピン構成と逆になっているということです。
そこで、LaunchPad上のTX/RX配線をクロスさせ、試行錯誤で作成したプログラムを試すと殆どがUARTの機能が実現されていたことを確認しました。


4.Stallaris UART
 Stallaris LM4F120 のUART機能はさほどの苦労もなく試すことが出来ました。試したプログラムは SDカードのテキストファイルを読み込み、1行ごとにUART出力、これをMSP430で受けてLCD表示するといったものです。


Memo
1.MSP430のUART 受信(RX)は1バイト毎のRX割り込みで取り込み。
初め、RX(UCA0RXIFG)割り込みフラグクリアまで受信データを取り込む形で試しました。すると、受信データの最後の1バイトのみ取り込んだ結果になりました。
そこで、いろいろ試しているうちに、受信データのバイト数分RX割り込みが発生することがわかり、割り込み毎に1バイトづつ取り込むように修正、あとは、受信データの終わりの認識方法をどうするか、、、タイマを使い周期的に受信バイト数の監視を行い、増減なしで受信完了の処理を行うようにしました。
 

0 件のコメント:

コメントを投稿