freescale Freedom KL25Zを使う

# freescale Freedom KL25Zを使う

# 2012.11
使ってみる
UARTを使う
CodeWarriorのプロジェクトのコピーの作り方
CodeWarrior10.3SEのインストール
I2Cインターフェースの液晶表示器HT1603B（aitendo）を使う
single-wireインターフェースの湿度温度センサDHT11を使う
SDカードスロットを実装する

## 使ってみる

## とりあえずFreescaleのWebサイトにあるチュートリアル
Kinetis L Series Tutorial - Touch-Sensing with Processor Expert
の通りにやってみる。
タッチセンサを操作するとPWMで赤LEDの明るさが変わる、というプログラムをスクラッチ
から作るというもの。始める前に

FRDM-KL25Z: Kinetis L Series Freedom Development Platform　KL25Z本体
CW-MCU-10-3: CodeWarrior for Microcontrollers 10.3　開発環境
FRDM-KL25Z Schematic　回路図
Example Project Code　サンプルコード

を用意しろとあるが最後のサンプルコードは必要ない（関係もない、たぶん）。
開発環境のCodeWarrior 10.3は
30日試用版しかないがそれを入れる。無料版（SE）のある10.2にすればよかったか。
ただ30日後には10.3SEがリリースされるかも。
「Launch」ボタンを押すとチュートリアルのビデオがスタートする。
ビデオの通りにまず「Components Library」から使う機能を選択、
「Component Inspector」でパラメーター、コンポーネントの名前、生成する
コード（関数など）を設定、Generate Processor Expert Codeでプログラムの
雛型を自動生成、若干のコード（5行くらい）を打ち込み、
buildまで特に問題なく行くが、CodeWarriorからKL25Zに書き込むときにデバイスが
接続されていないと文句を言われ書き込めない。
これはブートローダとしてデバッグ機能を書き込んでおかないといけなかったのだ。

FRDM-KL25Z_QSP: FRDM-KL25Z Quick start package

の中に入っているOpenSDA Applicationsの中のMSD-FRDM-KL25Z_Pemicro_v105.SDA
（←元々ボードに書き込んである）ではなく
DEBUG-APP_Pemicro_v102.SDAを書き込んでおく必要があった
のだ（そうするとボードをつないだときにデバイスマネージャーの
"Jungo"の下層に"PEMicro OpenSDA Debug Driver"というのが現れる・バージョンに
よっては他の場所のことも）。これは
知らないとわからない・・・・
やっと無事に書き込めたがタッチセンサを操作しても何も起きない。タッチセンサを
操作したときに発生する割り込みのコールバック関数であるEvents.cの中の
void TSS1_fCallBack0(TSS_CONTROL_ID u8ControlId)に飛んでないないような雰囲気も
あったがこれはブレークポイントの設定の問題だったようで（？）、反応しない
原因はPWM用のタイマが動いていなかったからでした。PWMのタイマに
使っていたTU1:TimerUnit_LDDのPropertiesが

Initialization

Enabled in init. code : yes
Auto initialization : no

となっていたのだが、一方コードが

TU1_Init(NULL);
Error = TU1_Enable(NULL);

と、TU1_Init()でタイマがEnableになっていたのにさらにTU1_Enable()としたのが
いけなかったようで
TU1_Enable()の行を削除
したら所望通り動くように。

動かない原因を探るためいろいろ試す過程でLEDにつながっているbitのオンオフも
してみたのだが、これには
Tutorial: Bits and Pins with Kinetis and the FRDM-KL25Z Board
がとても参考になり。

## UART（->SDAのUSB）を使う

## Tutorial: printf() and “Hello World!” with the Freedom KL25Z Board
に従ってデバッグ用のUSBポート経由でUARTを使う。1byteの数値を
（ascii文字列に変換して）UARTポートに出力する関数

void APP_Test(UINT8 pos) {
unsigned char buf[]="ABC\r\n";
buf[2]=pos%10+'0'; pos/=10;
buf[1]=pos%10+'0'; pos/=10;
buf[0]=pos/10+'0';
SendString(buf, &deviceData);
}

をApplication.c内に追加。上のチュートリアルビデオのプログラムの
タッチセンサイベントを扱うEvents.c内の
void TSS1_fCallBack0(TSS_CONTROL_ID u8ControlId)
の中に

APP_Test(AnalogSlider.Position);

を追加してタッチセンサの出力値をモニタできるようにする。

（まだ続く予定）

8218 [ .. 06 Dec 2012]

mm@ils.uec.ac.jp