![](https://habrastorage.org/storage2/e59/aac/829/e59aac829e587062f7506a857fae95a3.jpg)
おそらく、MSP430をプログラムするために座ったのはこれが初めてではありません。 そうでない場合は、このトピックに関する以前の記事、 パート1 、 パート2を読むことをお勧めします。
この記事では、マイクロコントローラーの周辺機器のグラフィカル構成ツール-Graceを検討し、ウォッチドッグの原理に精通し、仮想COMポートを(プログラマーを介して)使用します。 伝統的に、小さなコード例が考慮され、理解に必要なすべてのリンクが提供されます。
はじめに
最初の記事でCode Composer Studioについて言及しましたが、これは検討を拒否しましたが、最近、A.V。Sokolovのおかげで、1つのプラグイン、 Graphical Peripheral Configuration Tool(Grace)を入手しました。
別のMSP430周辺モジュールを構成する必要があるたびに、多くの問題が発生します。 そのような困難には、特定のモジュールのレジスタのリストの無知、特定のマイクロコントローラーの特徴的な機能、または英語のドキュメントの不十分な理解が含まれます。 これらのいずれの場合でも、Graceは便利です。
恵み
このツールは、次のリンクから Code Composer Studio v5でダウンロードしてインストールできます。 これを行うには、Texas Instruments Webサイトで登録します。
CCSをインストールしたら、[ プロジェクト テンプレート]エリアで [ プロジェクト]→ [ 新しいCCSプロジェクト] を選択し、 [ デバイス]エリア で [ 空のプロジェクト]→ [ 空の猶予(MSP430)プロジェクト] を選択します。
「猶予-ようこそ」画面が表示されたらすぐに、 デバイス概要キーを押します。 次の図が表示されます。
![](https://habrastorage.org/storage2/ba2/a9f/115/ba2a9f115598f2408040d404d1a317df.jpg)
特定のデバイスをクリックすると、その設定に進みます。これはいくつかのモードで実行できます。 モードはデバイスによって異なる場合がありますが、通常は基本ユーザー 、 パワーユーザー、およびレジスターです。 ベーシックユーザーとパワーユーザーは、周辺機器を直感的にすばやく設定できるように設計されています。 レジスタには、すべてのデバイスレジスタのリストが表示され、それらの値を変更できます。
ヒント:マイクロコントローラーのデータシートには、 Texas Instrumentsの WebサイトからダウンロードできるMSP430xxxxファミリーユーザーガイドファイルで通常読み取ることができるすべてのレジスターおよびパラメーターに関する、対象のデバイスに関する完全な情報が常に含まれているわけではありません。
私はすでにWorkbenchを仕事に使用しているので、セットアップが完了した後、すべての構成データをそこに転送する必要があります。 これを行うには、[ プロジェクト ] → [ すべてビルド ]をクリックし、プロジェクトフォルダーで/ src / csl /ディレクトリーを見つけます。このフォルダーには、各デバイスの構成を持つすべての* .cファイルが含まれています。
コード例
次のコードは、プログラマーに組み込まれたUSB-UARTブリッジで動作します。ウォッチドッグの使用もコードに含まれていますが、最初に最初に行うことです。
- #include "msp430f2274.h"
- #include <string>
- void UARTWriteString ( string str ) ;
- bool watchdogReset = true ;
- void main ( void )
- {
- WDTCTL = WDT_MRST_32 ; //自動的にウォッチドッグ
- // 32ms後にシステムを再起動します。
- BCSCTL1 = CALBC1_1MHZ ; //基本クロックシステムのクロック周波数を設定します。
- DCOCTL = CALDCO_1MHZ ; //時計を設定します
- //デジタル制御発振器の周波数。
- P3SEL = BIT4 + BIT5 ; //関数P1.4 / P1.5をUARTのTXD / RXDとして選択します。
- UCA0CTL1 | = UCSWRST ; //このビットはUART割り込み操作と操作をブロックします
- //干渉しないようにレジスタをシフトします
- //構成(UARTをほぼ無効にします)。
- UCA0CTL1 | = UCSSEL_2 ; // UARTは
- // SMCLK(サブメインクロック)、つまり1MHZから。
- UCA0BR0 = 0x68 ; // SMCLKの分周器(1000000/9600)。
- UCA0BR1 = 0x00 ;
- UCA0MCTL = 0x04 ; //変調マスクを定義します。
- //これにより、エラーを最小限に抑えることができます。
- UCA0CTL1 & = 〜UCSWRST ; // UARTを再びオンにします。
- P1DIR | = BIT0 ; // LEDをセットアップします。
- P1DIR | = BIT1 ;
- P1OUT & = 〜BIT0 ;
- P1OUT & = 〜BIT1 ;
- UARTWriteString ( "--- Hello、Habr!---" ) ;
- 符号なし charデータ。
- while ( true )
- {
- while ( ! ( IFG2 & UCA0RXIFG ) ) //受信バッファーの準備ができているかどうかを確認します。
- if ( watchdogReset )
- WDTCTL = WDTPW + WDTCNTCL ; //ウォッチドッグタイマーをゼロにリセットします。
- データ= UCA0RXBUF ;
- if ( data == 0x01 )
- {
- UARTWriteString ( "---緑色のLEDをオフにします 。.--- " ) ;
- P1OUT & = 〜BIT1 ;
- }
- else if ( data == 0x02 )
- {
- UARTWriteString ( "---緑色のLEDを点灯します。---" ) ;
- P1OUT | = BIT1 ;
- }
- else if ( data == 0x03 )
- {
- UARTWriteString ( "---赤いLEDの状態を切り替えます 。.--- " ) ;
- P1OUT ^ = BIT0 ;
- }
- 他に
- {
- UARTWriteString ( "---受信したデータが一致しません.---" ) ;
- watchdogReset = false ;
- }
- }
- }
- void UARTWriteString ( string str )
- {
- int strSize = str。 長さ ( ) ;
- for ( int i = 0 ; i < strSize ; i ++ )
- {
- WDTCTL = WDTPW + WDTCNTCL ; //ウォッチドッグタイマーをゼロにリセットします。
- while ( ! ( IFG2 & UCA0TXIFG ) ) ; //送信バッファの準備ができているかどうかを確認します。
- UCA0TXBUF = str [ i ] ;
- }
- }
コンピューター側からCOMポートを操作するには、ソフトウェアが必要です。私の選択はCOM Port Toolkitでした。 正確にあなたが選ぶもの-それは重要ではありません。
例が正確に何をするかを理解するのに役立つ短いビデオ。
以前の記事とは異なり、プログラムコード内でわかりやすいコメントを直接提供しようとしました。 今回はコードで使用される各レジスタを説明する理由はありません。 いくつかの側面に注意を払いたいだけです。
- UCA0BR0 、 UCA0BR1 、およびUCA0MCTLの値を計算するには、優れたオンライン計算機があります。
- SMCLK-外部共振器(インストールされている場合)または分周器1、2、4 、または8を使用するDCOからの信号。周辺機器のクロック信号として使用されます。
- この例では、ウォッチドッグは意図された目的に使用されていません。このコードはその動作の原理のみを説明しています。 ポイントは、プログラムがWDTCTLレジスタのWDTCNTCLビットを32ミリ秒以内に1に設定しない場合( WDT_MRST_32 )、システムが再起動することです。 ウォッチドッグは、ソフトウェアがフリーズするのを防ぐために必要です。
- WDTCTLレジスタには16ビットがあり、最初の8ビットはレコードが作成されるたびにWDTPWに設定する必要があります。 これは、ソフトウェア障害が発生した場合に誤って書き込みからレジスタを保護するメカニズムです。
- 基本クロックシステムの説明と設定は、この記事全体の機会です。MSP430には非常に柔軟なクロックシステムがあり、Graceを使用して簡単に設定できることを理解してください。
- このデバッグ方法を使用すると、プログラム全体の速度が大幅に低下しますが、割り込みハンドラーを含め、コードの実行順序を確実に決定できます。
おわりに
書く時間が長いほど、素材はより複雑で大きくなります。 この記事は、初心者向けのシリーズの最後から2番目になります。
次回は、以前に答える時間がなかったすべての質問に触れます。
この記事がお役に立てば幸いです、読者。