マイコンとか自作 MIDI 音源とか (旧 segtter's core dump) http://segtter.iza-yoi.net/
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
半年以上前に購入して以来放置していた 8pin ARM マイコン,LPC810 をとりあえず試食してみた.しばらくの間 mbed などの手軽な開発手法ばかり触ってきたので,良いリハビリになるかもしれない.
開発環境の準備
開発環境は LPCXpresso IDE を使用.動作はそれなりに重いけど,ビルドコンフィグ周りの面倒を見てくれるので,gcc + コマンドライン・ツールよりはある程度スタートは早いかも.開発元の作成した CMSIS コア・ライブラリ一式も一緒にインストールされる (インポートは手動).
ハードウェアの準備
LPC-Link 等のデバッガ基板,もしくは ISP 書き込み用のシリアル・インターフェースを用意.今回は,秋月電子の USB-UART モジュールと ZIF ソケットを組み合わせた基板を新しく作成.
LPC1114 と LPC810 両方に対応するため,28pin DIP.この 2 種類の IC は,1pin 位置を合わせたときに ISP 関連の端子が競合しないので,単純にソケット側で分岐するだけでも一応動く.
Intel HEX ファイル出力設定
LPCXpresso で自動的に作られたプロジェクトは,.axf および .bin ファイルのみを生成し,Intel HEX 形式ファイル (.hex) は生成しない.以下の情報を参考に,objcopy.exe をビルド時に呼び出すよう変更すると,Intel HEX ファイルが Debug/Release 各ビルドディレクトリに生成されるようになる.FlashMagic や lpcsp 等のツール経由で書き込む場合に有用.
Iketronix: How to generate .hex files from Code Red's LPCXpresso to use with FlashMagic
早速 L チカ
最初にメモリ空間を直接叩いてペリフェラルを動かす方法で GPIO を触るコードを書いて,L チカしてみた.
プロジェクト作成時にソースの雛形が用意されるので,main 関数のみ次のように変更.
int main() {
// クロック設定を確認し,SystemCoreClock を再計算
SystemCoreClockUpdate();
// IOCON, SWM, GPIO ブロックにクロックを供給
LPC_SYSCON->SYSAHBCLKCTRL |= (1<<18) | (1<<8) | (1<<6);
// PIO0_2, 3 に割り当てられた SWD 機能を無効化
LPC_SWM->PINENABLE0 |= (1<<3) | (1<<2);
// PIO0_2, 3 を出力に設定
LPC_GPIO_PORT->DIR0 = 0b001100;
// PIO0_2, 3 を high, low に設定し,一定時間ごとに交互に入れ替える
LPC_GPIO_PORT->SET0 = 0b000100;
while (1) {
LPC_GPIO_PORT->NOT0 = 0b001100;
for (i = 0; i < 500000; i++); // 時間稼ぎ暫定実装
}
return 0;
}
ユーザーマニュアル首っ引きで行う開発も悪くないけど,AVR マイコンで遊んでいた時と同じような感覚でやるには少々分量が多い.この時点で I2C マスター・デバイスとしてキャラクタ LCD と通信するプログラムまで既に書いてみたが,今後は開発環境同梱のドライバ・ライブラリや LPCOpen などのライブラリを積極的に利用したほうが良さそうだ.
つづく
開発環境の準備
開発環境は LPCXpresso IDE を使用.動作はそれなりに重いけど,ビルドコンフィグ周りの面倒を見てくれるので,gcc + コマンドライン・ツールよりはある程度スタートは早いかも.開発元の作成した CMSIS コア・ライブラリ一式も一緒にインストールされる (インポートは手動).
ハードウェアの準備
LPC-Link 等のデバッガ基板,もしくは ISP 書き込み用のシリアル・インターフェースを用意.今回は,秋月電子の USB-UART モジュールと ZIF ソケットを組み合わせた基板を新しく作成.
LPC1114 と LPC810 両方に対応するため,28pin DIP.この 2 種類の IC は,1pin 位置を合わせたときに ISP 関連の端子が競合しないので,単純にソケット側で分岐するだけでも一応動く.
Intel HEX ファイル出力設定
LPCXpresso で自動的に作られたプロジェクトは,.axf および .bin ファイルのみを生成し,Intel HEX 形式ファイル (.hex) は生成しない.以下の情報を参考に,objcopy.exe をビルド時に呼び出すよう変更すると,Intel HEX ファイルが Debug/Release 各ビルドディレクトリに生成されるようになる.FlashMagic や lpcsp 等のツール経由で書き込む場合に有用.
Iketronix: How to generate .hex files from Code Red's LPCXpresso to use with FlashMagic
早速 L チカ
最初にメモリ空間を直接叩いてペリフェラルを動かす方法で GPIO を触るコードを書いて,L チカしてみた.
プロジェクト作成時にソースの雛形が用意されるので,main 関数のみ次のように変更.
int main() {
// クロック設定を確認し,SystemCoreClock を再計算
SystemCoreClockUpdate();
// IOCON, SWM, GPIO ブロックにクロックを供給
LPC_SYSCON->SYSAHBCLKCTRL |= (1<<18) | (1<<8) | (1<<6);
// PIO0_2, 3 に割り当てられた SWD 機能を無効化
LPC_SWM->PINENABLE0 |= (1<<3) | (1<<2);
// PIO0_2, 3 を出力に設定
LPC_GPIO_PORT->DIR0 = 0b001100;
// PIO0_2, 3 を high, low に設定し,一定時間ごとに交互に入れ替える
LPC_GPIO_PORT->SET0 = 0b000100;
while (1) {
LPC_GPIO_PORT->NOT0 = 0b001100;
for (i = 0; i < 500000; i++); // 時間稼ぎ暫定実装
}
return 0;
}
ユーザーマニュアル首っ引きで行う開発も悪くないけど,AVR マイコンで遊んでいた時と同じような感覚でやるには少々分量が多い.この時点で I2C マスター・デバイスとしてキャラクタ LCD と通信するプログラムまで既に書いてみたが,今後は開発環境同梱のドライバ・ライブラリや LPCOpen などのライブラリを積極的に利用したほうが良さそうだ.
つづく
PR
この記事にコメントする
プロフィール
HN:
KX89
性別:
男性
最新記事
(04/03)
(07/15)
(07/08)
(06/29)
(06/25)
P R