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
の地雷を故意に仕込むことも可能なのでとてもお勧めですが絶対にやってはいけません!


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


なんと少し前にLPC1xxxシリーズもSWD接続・フラッシュ書き込み対応に
なっています!!

…でもまだちょっと不安定。さらなる改善を期待します。


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点滅のソースを…ご利用は自己責任で…


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

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

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

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


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


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



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


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


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

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




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

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


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



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

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



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

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



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


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

つずく

Go to top of page