やあやあこんばんは いつぞやぶりの更新でございます
今回は比較的ちゃんとした話。
でもいろんなサイトを経由してなんとか形にしたものなので変なこと書いていたらコメントください
記事の背景
自分でやってみて全然資料がないんですよね
プルダウンモードがなんちゃらかんちゃらだとか ポートの設定がーって感じで。
いつものノートのページをみてもよくわかんなかった人が多かったと思います
http://www.nxp-lpc.com/lpc_boards/lpcxpresso/note/note1.html (いつものサイト)
実際のコード
ポートの表 <https://openwsn.atlassian.net/wiki/display/OW/XpressoHack>より頂きました。
上の図はportInOutで使うであろう(?)ピンのポートで分類分けしたものです。
上に書いたノートのサイトでどういう関数、文法で書けばいいのかわかったけど全然ポートの分類分けしたデータがないいいい
みたいなことになったと思うんです。
それでportInOutのサイトを見たりLPC_GPIOで検索した人も多いのでは?
この表の添字の部分がビットアサインです 配列名みたい部分がポート番号になってます。
ex) p21 -> port2 の (0x01<<5)
HL出力として使うことを宣言する
題名から分かる通り今回は一番簡単な出力をやっていきます
ポートがわかればあとは簡単で ピンの入出力設定などの宣言をすればおしまいです。
LPC_GPIO@ の@に先ほど調べたポート番号を入れます。
LPC_GPIO@はオブジェクトポインタなのでアロー演算子を用いてアクセスします、
そうしてFIODIRにアクセスして、用いるピンのビットを1にして代入します。
複数入力する場合はビットの論理和などを用いると良いかもしれません
(間違って二回入力した場合足し算で指定した場合桁上りしてしまいます。)
ex) p21をOutに設定する。
LPC_GPIO2 -> FIODIR |= (0x01);
これで
arduino的にいうと pinMode(pin,OUTPUT);
mbedでいうと DigitalOut obj(p21);
を書き終えた段階です。
HLを制御
この章が一番簡単かもしれません。
HにするならFIOSETをつかって
LにするならFIOCLRを使います
使うとはどういうことなのかというと、 上の2つは変数です。
つまりここに先ほど見たビットアサインに対応するビットに0x01を入れれば良いのです
LPC_GPIO2 -> FIOSET(FIOCLR) = (0x01)
TIPS
小技、小ネタみたいなものを紹介できればいいかなーと
マクロ定数を使ってみては?
まず、上の記事を参考にコードを書けばわかると思いますが
結構ビットアサインを間違えて挙動がおかしいことになると思われます。
なのでマクロ(#define)やconstで一番はじめに宣言しておかばよいかと
例えば #define LED_RED (0x01 << 5 ) としておけば
LPC_GPIO -> FIOSET = LED_RED;
とすることができます。
FIOSETとかってなんの略?
これは私の見た記事だと確か
Fast(速い)のF IO (input/output) SET (セット) CLR (クリア) といった事が書いてあったような
最後に
ここまで結構大変でした。
LPCマイコンはNXPの合併のせいでいろいろ影響を受けているので
LPC1769に関しては廃盤になるし…
(新しいのはなんかLPC-LINKがおかしいと思うんです。はい。)
この記事に来る人はだいたい1769を使いたいひとかと思うんです。
全然資料がないんですよね…マイナーだし廃盤だし。
あと僕はそこまでのスピードを求める用途じゃないんですよね…
μsの世界かな-と思ってしまう今日このごろ(未検証)
あと大変だったのはサンプルコードがネットには転がってないし、
手元にあるのは結構大規模なコードなのでよくわかんないんですよね。
PWMとか…もうつらい。 そこらへんとI2Cとか
イーサネットとかがはあったのでもうてんやわんやで
低級言語を読み取ってる感じでした。 (詳しくは検索してください)
そっからDigitalOutだけひっこぬいたわけですが すべてやろうとすると心が折れそう。
mbedライブラリをnuclreo401とかに移植できるのに なんでlpc17xx.hなんて使わないといけないのだろうか…。
といったわけでこの辺でさようなら
ー ーーーーーーーーーーーー
初版2016年9月7日