2018年8月7日火曜日

MSP430マイコン 備忘録1 (MSP430F2619)

M2の小西です。

自身の研究で低消費電力マイコンを使いたかったため、色々ぐぐったところTI社のMSP430マイコンなるものがヒットしました。

MSP430について勉強し、組み込み、開発するまでのことを備忘録としてここに残します。(あまり資料が見つからなかった、というのもあります)

本記事では、
 ①エディタのインストール
 ②Lチカ(プログラミング導入)
まで、書きます。

今後、タイマー、PWM、ADC、DAC、I2CやTX/RXまで書ければと思います。

マイコン:MSP430F2619TPM, 16bit, ~16MHz, RAM:4kB, 64-Pin
書き込み機:MSP-TS430PM64 の MSP-FET Flash Emulation Tool

MSP-TS430PM64

MSP-FET Flash Emulation Tool
MSP430 64-pin Target Board


<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
①エディタのインストール(ユーザーズガイドやデータシートのDLも)
まずは、開発ツール(MSP-TS430PM64)のメーカーHPから必要なものをダウンロード。

①-(1)メーカー推奨の統合開発環境 Code Composer Studio (CCStudio) IDE を,
メーカーHP > Development Tools (5) > Code Composer Studio™ Integrated Development Environment for MSP Microcontrollers > Download > Download the latest CCS >
から、自身のPCに合ったインストーラをダウンロードします。
【私のPCはwin10 64bit なので、win用 Offline Installer を選択。32bit 版がDLされたが気にせずインストール! 】



①-(2)各種データシートとユーザーズガイド
・MSP430F2619 のデータシート
MSP430F2619TPM > MSP430x241x, 261x Datasheet

・MSP430F2619 のユーザーズガイド


・試作ターゲットボードのデータシード

・デバッグプローブ(MSP-FET Flash Emulation Tool)のユーザーズガイド
ユーザー・ガイド (2) > MSP Debuggers User's Guide

<--------------------------------------------------------------------------------------
(1)でDLした.zipを展開し、CCS_setup ~~.exeを実行。
※インストーラが存在するファイルパスにASCIIコードが含まれていると、インストーラが起動できませんでした。素直にダウンロードフォルダで実効するのが賢いか。
setup.exeを起動

インストールは基本OK連打しとけばいいが、3つ目あたりで「デバイスの選択」を迫られます。 CCStudioはMSP以外のいろんなマイコンの開発もできるっぽいのですが、今回はMSP430シリーズの開発のみなので、写真のように1つだけチェックして次に進みます。
まぁ、ぶっちゃけ「CCStudioのインストール MSP430」でぐぐった方が見やすい資料が出ます。
デバイスの選択 MSP430 ultra-low-power MCUs

インストールできたら起動しましょう。
Code Composer Studio IDE 起動画面

初期起動時にワークスペース(プログラムをまとめたプロジェクトを保存するところ)を設定します。たぶんここもパスにASCIIコードが入っていない方が賢明でしょう。
ワークスペースの設定

CCStudio for MSP で新規プロジェクトを作成しようとすると、下のような画面が出るはず。まず、Target は "MSP430x2xx Family" の中の "MSP430F2619" を選択。 Connection はPCとTarget boardを何で接続するか、を選択します。今回使うキットのMSP-FET Flash Emulation Tool で接続するとき、TI MSP430 USB1 [Default] を選択すれば通信できました。 Project name に任意のプロジェクト名を付けます。
新規プロジェクトの作成

新規プロジェクトが作成されるとこんな感じかと。 main.c にガンガンプログラムを書いていきましょう!!




>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
②Lチカ(プログラミング導入)
今回は押しボタンスイッチ1つ・LED3つを使って、ボタンを押すと光らせるLEDをぐるぐる切り替えるプログラム書きます。これを例にCCSでの書き方やユーザーズガイドのどこを見るかなどを書いていきます。

まずは、回路図。
回路図(青色線から右をブレッドボード上に実装)

そして、実験風景。
実験風景
タクトスイッチを押すことで光るLEDが切り替わっている。
 →  →

→  →  →  

 あとは、とりあえずコードを以下に示します。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

<1行目>
1. #include <msp430.h>     //MSP430F2619TPM
 MSP430シリーズマイコンを使用するためのヘッダーファイル。新規作成したとき
 から書いてあり、別段何かのファイルをコピーしないといけないとかそんなものは
 ない。

<5-10行>
5. // 端子設定 /////////////////////////////////////////////////////////
6. #define test_LED       0b00000001          // P1.0 test_LED
7. #define RED_LED       0b00000001          // P6.0 RED_LED
 ピンの割当て。ここではポートの指定はせず、ピンの指定だけします。Px.0が
 0b00000001であることに注意。


<14行目>
14. void setup() { 初期設定関数の定義開始

<15行目>
15.     WDTCTL = WDTPW + WDTHOLD;       // Stop WathcDog Timer,
 ウォッチドッグタイマ(WDT)を停止させる
 (User's Guide  P.347 10.3.1 WDTCTL, Watchdog Timer+ Register)
 WDTCTLレジスタに書き込むとき上位2byteはパスワードであり常に 0x5AXX としなけ
 ればならず、WDTを停止させるには WDTHOLD を1にせねばならない。なので、
 0xXX80 と 0x5AXX をビット毎加算してWDTCTLに書き込む。
 (もし、WDTISx とかを 0 以外で書きたいなら、適宜 0xXX80 を適切な値にする)
 ※WDTPW と WDTHOLD はどこか(MSP430.h ??)で #define されているっぽい。
User's Guide  P.347  10.3.1 WDTCTL, Watchdog Timer+ Register

<16行目>
16.     SVSCTL &= ~SVSFG;
 低電圧フラグだけをクリア【Supply Voltage Supervisor (SVS)】
 (U. G.  P.340  9.3.1 SVSCTL, SVS Control Register)
 低電圧監視フラグ(SVSFG) は電源電圧が低電圧状態から復帰したときに 1 が立つ。
 次の電圧低下発生を検出できるよう、電源投入後フラグクリアする。

<17行目>
17.    SVSCTL = 0x60 + PORON;
 SVSCTLレジスタの上位4bit(VLDx)でRESETをかける閾値電圧を設定する。
 (U. G.  P.340  9.3.1 SVSCTL, SVS Control Register)
 0x60 (閾値:2.5V指定) を設定し、PORON (0x08) と合わせてSVSCTL に書き込む
 ことで一旦 Power on Reset を起こす。
U. G.  P.340  9.3.1 SVSCTL, SVS Control Register

<18行目>
18.    while(!(SVSCTL & SVSON));               // 電圧監視機能がONになるまで待機
 SVSON ビットはSVSの状態を表し、SVS動作し始めると 1 が立つ。これを利用して
 SVSON ビットが0=電源電圧が立ち上がるまで、の間whileにトラップされる。


<19-21行>
19.     DCOCTL = 0;                                    // Select lowest DCOx and MODx settings
20.     BCSCTL1 = CALBC1_8MHZ;               // Set RSELx
21.    DCOCTL = CALDCO_8MHZ;               // Set DCOx and MODx
 内部の基本クロック周波数を指定する。ここからマスタークロック(MCLK)やサブメ
 インクロック(SMCLK)を持ってくる。
 (U. G.  P.283  5.3.1 DCOCTL, DCO Control Register
 (U. G.  P.283  5.3.2 BCSCTL1, Basic Clock System Control Register 1)
 19行目:一旦DCOCTLを 0 にクリアする(何の意味が? UGがやれと言うので。)

 ═ 基本クロックの決め方 
 DCOCTLの上位3bit(DCOx)とBCSCTL1の下位4bit(RSELx)の組み合わせにて基  
 本クロックは決定され、おおよその目安はデータシートに載っている。           
 (Datasheet  P.42  DCO Frequency)                    
DCOx と RSELx による基本周波数の選択

Datasheet  P.42  DCO Frequency
 ║ただし、1MHZとか16MHZだとかのよく使われる周波数はあらかじめきっかりの
 ║周波数を出すための設定が埋め込まれており、これが CALDCO_8MHZや CALB 
 C1_8MHZ である。DCOをCAL(libration)された8MHZに設定” = CALDCO    
 _8MHZ。                                 
 

20, 21行目:CALDCO_8MHZ や CALBC1_8MHZ を活用して簡単設定♪


<23-35行目>
 各I/Oピンの設定
34.    P6DIR = RED_LED | BLUE_LED | GREEN_LED;     // P6.0, P6.4, P6.7;OUT, the others;IN
35.    P6REN = 0x00;                      // P6 set to Pullup/Pulldown Disable

 (U. G.  P.328  8.2.1 Input Register PxIN:入力データレジスタ
 (U. G.  P.328  8.2.2 Output Registers PxOUT:出力データレジスタ
 (U. G.  P.329  8.2.3 Direction Registers PxDIR:入力/出力決定用レジスタ
 (U. G.  P.329  8.2.4 Pullup/Pulldown Resistor Enable Registers PxREN
             :Pullup/Pulldown のEnable/Disable用データレジスタ
 (U. G.  P.329  8.2.5 Function Select Registers PxSEL and PxSEL2          )
                 :I/O以外の機能指定用データレジスタ
 ①INPUTピンにしたい場合
  1-1 DIR=0; 入力ピン化
  1-2 REN=X; 任意でPullup/Pulldown の Enable/Disableを選択
  1-3 OUT=X; Pullup/Pulldown の 選択 (↑Enableの場合)
 ②OUTPUTピンにしたい場合
  2-1 DIR=1; 出力ピン化
  2-2 OUT=X; High/Lowを書き込む
 ③FUNCTION切り替え
  3-1 DIR=X;機能に適した方を選択 (ADCならINPUT)
  3-2 SEL=1;機能によってはSEL2も変更


<46,47行>
46.   if((P6IN & BUTTON) == BUTTON){          //P6.1のButton は押すとHIGHが入力される

ポート6入力レジスタのBUTTON(0b00000010), すなわち P6.1 の状態を判定


47.       if(i == 0){         P6OUT = RED_LED;   }
ポート6出力レジスタのRED_LED(0b00000001), すなわち P6.0 を HIGHにする



<><><><><><><><><><><><><><><><><><><><><><><><>
以上。

0 件のコメント:

コメントを投稿