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 のユーザーズガイド
・試作ターゲットボードのデータシード
・デバッグプローブ(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)
 0x
60 (閾値:2.5V指定) を設定し、PORON (0x0
8) と合わせて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にする
<><><><><><><><><><><><><><><><><><><><><><><><>