LPCXpresso(LPC1114)はぢめました

20120130追:
OpenOCDで書き込みとデバッグできるようになったから熟読すべし



なんてうかうかしてるうちにXpressoのLPC1768版登場ですって奥さん!ねむいさんは
中華製1768ボードを買ってしまいましたので今すげぇ涙目です!!!
(でもいいんだ、こっちの方が自由度あるし!!全然負け惜しみじゃないし)

さて、LPC1768の件も語ることが多いので次回にゆだねるとして、今回は巷で流行りの
LPCXPressoを使用してみました。今回はLPC1114版の方を使用します。
まずは環境作りなんですが、いつもの通りCodeRedが提供しているEclipseベースのIDE
ガン無視でコマンドラインからのビルド環境を構築しました。構築にあたりtodotani氏
Lynx-EyED氏microBuilder.euほかのページを参考にさせてもらいました。

構築と言ってもやってることはLPC2388やSTM32でやってたことと全く同一で、リンカ
スクリプトとスタートアップコードをLPC1114用にこさえるだけです。Cortex-M0も
CMSISライブラリが提供されていてSTM32のものと似たような構成にすれば間違いなく
正しく初期化し、動作するものを作ることができます。
私はさらにこれに加えてNxP製のARMマイコンに特有のCRPのセクションを追加しました。
(まだありますけど後述)普段は使用しないのですが万が一のこと考えてです。
CRP無効にしていますがもちろん他のプロテクションレベルにもできます。
親切心を装って"とりあえずこのプログラム書き込んで試してみて"なんてCRPLevel3
の地雷を故意に仕込むことも可能なのでとてもお勧めですが絶対にやってはいけません!

un
んでもってLPCXpressoのIDEに同梱されていたLED点滅のサンプルをビルドし、書き込み
ます。書き込みの際にはLPCLinkではなくてSTM8S-DiscoveryのST-LINK部分を改造した
Versaloonを使用してみました。

un
なんと少し前にLPC1xxxシリーズもSWD接続・フラッシュ書き込み対応になっています!!
un
…でもまだちょっと不安定。さらなる改善を期待します。


LPC2388で経験されている方も多いでしょうが、大切なことなので2度言いますが
NxP製ARMマイコン書き込みの際に注意しなければならないのは電源投入->リセット後必ず
実行されるビルドインされたブートローダによるVectorCheckSumチェックです。
これはどういうものかというと特定のアドレスまでの(大抵はVector領域)のチェックサムを
とった値とさらに別の特定のアドレスの値をたして0に(2の補数をとる)ならなかった場合、
フラッシュ上のユーザプログラムを実行せず強制的にISPのアドレスにすっ飛ぶという仕組み。
(これにCRPも絡みますが細かいことは各自UserManualで確認のこと)

OpenOCD等でLPC系のARMマイコンのcfgファイルに"calc_checksum"と言う単語があるの
はそのためです。calc_checksumを有効にしているとフラッシュの書き込みアルゴリズム
の中でVector領域のチェックサムの2の補数を取った数がLPC2388なら0x00000014に書き
込まれます。これによりユーザプログラムが実行できるわけですが、今度は0x00000014に
違う値が書き込まれていることになってしまうため、べリファイが通りません…
…OpenOCDの仕様上どちら立たずなのでしょか…
JTAGkey2Cloneの時も述べましたが、どうせほとんど変更とか無いですからスタート
アップにあらかじめ自分で計算して書き込んでおけばcalc_checksum無しでもダイジョブで、
かつOpenOCDからベリファイも使用できるようになりますすみません脱線しました。


話を戻すと、上記のVector領域のチェックサムの2の補数を置くべき場所はLPC1114
では0x0000001cになります。ここにあらかじめ計算しておいた値を書いておけば良いです。
LPCExpressoにビルドインされているLPC-Linkフラッシュライタは自前で計算&書き込み
できます。VersaloonもVSProg上では"-A"のオプションを付けることにより対応可能になり
ますがOpenOCDで使うときの為スタートアップコードに書き込んでおきました。
SimonQian氏のサイトを見てると、もうそろそろOpenOCD0.5.x系にも対応するよ〜な記述が
みられますね…。自分の使いやすい環境で開発するのが一番なので今後の対応を
期待しています!

てわけで基本のLED点滅のソースを…ご利用は自己責任で…
un

次はLPC1769でもやってみましょか…

いないさんのおしりに顔をうずめてくんかくんかしたい

※今日の日記は7月上旬くらいまでの内容です

(いないさんの)ぱんつだけカフェ…ぱんつだけカフェ…ぐふふ…
……おお失礼、ここ最近会社近くのカプセルホテルで寝泊まりするような生活になって
から意識が夢うつつな状況が多くなって…(注:6月末〜7月上旬の頃の話です(重文))


最初はTFT液晶モジュール使ってなんか作るのが目的のはずでしたが今やいろんな種類
のモジュールを手にいれて動かすこと''だけ''が目的になってしまっています…。
でも8~16bitバスorSPI制御タイプのモジュールはあらかたやりつくしたのでそろそろ次
の段階に進もう か な と思っています(←同じこと言ってばっかですがー)


さて今回も、前回taobaoやaitendoで購入した液晶モジュールの火入れをやってきたい
と思います。まずは国内でも売られているのでご存知の方も多いでしょうけど3.5inch,
QVGAな少し大きめのモジュールを…。


un
コントローラICはSSD2119。8,16bitバス&SPI&(改造でRGB)も制御に使用できます。

un
いつものごとくSTM32で…powerMCU製のTFT液晶モジュール基板はコネクタに出ている足
配置が2.8,3.2,3.5"とすべて共通で、後はプログラムをこさえるだけなので楽です。
…と思いきや3.5"のモジュールだけタッチパネルのPENIRQポート番号が違ってました!!
いやぁ慣れって怖いですねぇ…(しれっと)

un
てわけでタッチパネル制御も…コンパイルオプションでタテヨコ対応です。STM32ライ
ブラリのバージョンも上がったことだしそろそろSTM32/LPC2388用の液晶モジュール
制御プログラムも更新しましょうかね。

液晶モジュール&SSD2119のデータシートを眺めているとこのモデルは上記CPUバス・SPI
バスインターフェースの他にもSH2Aで使えるRGBインターフェースも使用できるようです。
ただし基板には足が出ていないので自分で残りの足が出るように改造する必要があり
ますね。まぁこちらは追々と…。



un
次に3.0inchでWQVGA(240x400)の縦長なLCDモジュールです。これはモジュールのデー
タシートを貰うことができませんでしたが、ネット上には同じ型種のモデルが存在し
ピン配置も容易に推測できます。IM0,IM1が外部に引き出されており、8bit,16bit,
18bitCPUバスで制御可能です。コントローラはR61509Vだそうです。得体が知れないの
でタッチパネルが無い安い方を購入しましたが案の定バリバリのユーズド品でした…。

16:9のWQVGAな画面を利用して某シングルCDのジャケットを…ドンピシャの画像…

un
今の若い子って(まぁ私もわかいですけお)シングルCDとか知ってるのかしら…あ、
…失礼、さぁ次、次…(使ってるうちに反射板が剥がれました。なんじゃこりゃorz)



最後にaitendoさんで20%引きセールやってた頃に購入した0.94inch,96x64ピクセルの
OLEDモジュールALO-095BWNN-J9を。こちらはキャリーボードとセットも販売されて
いて、なぜかセットで購入した方がOLEDモジュール単体で買うより非常に格安でお得と
なっています(2010/07/05現在)
…???何で??値段設定間違えてる??それともセットのはなんかの不具合品??

まぁいいや、STM32でとにかく動かしてみました。現在Lynx-EyED氏も活用されていますね。
このモジュールは8bitCPUバスでも行けますがピクセル数が少ないのでSPIの方が
繋げる線も少なく楽でしょう。

un
un
ちっさ!めっちゃちっさ!…いつも3.2inchとか弄ってるのでやたら小さいです。

それとLynx-EyED氏も経験されてしまってるようですが、私もOLEDは焼きつくという事実を
すっかり忘れてしまっていて、冒頭のいないさんの臀部の絵を表示したままうっかり
放置して焼きつかせてしまいました!!!みんなも気をつけよう!



…とまあ液晶モジュールはこのくらいにして次回は塩漬けにしていた各種評価ボードを
消化していこうと思います。


まずはCortex-M0なLPC1114のボード…

つずく

Go to top of page