lbed/01-LEDチカチカ
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
[[lbed]]
#contents
2013/07/14からのアクセス回数 &counter;
** 実験ワークベンチ [#f00e8ff5]
プログラムを作成する場合には、いろいろな実験に必要な部品...
実験ワークベンチを用意すると便利です。
今回は、トラ技の2012/11号で付録についてきたMyARM基板とLPC...
((LPC11U14ボードのデバッガ部分))
を使用します。
写真では、LPC11U14のデバッガ部分を切り離して使用していま...
(([[LPC-Link2>http://akizukidenshi.com/catalog/g/gM-06706...
&ref(MyARMandLPC-LINK.png);
子供たちでも組み込みの実験をするには、安価でソースレベル...
そのため、1台2000円のLPC11U14ボードをワークベンチにするの...
DIPタイプで1個110円の[[LPC1114FN28>http://akizukidenshi.c...
は、外部クリスタルなしでも動作するので、子供たちの電子工...
** プログラミング環境 [#x407d0b7]
無償のプログラムミング環境LPCXpressoを以下のページからユ...
- http://lpcxpresso.code-red-tech.com/LPCXpresso/
Windowsを使用の方は、シリアル通信用のチップPL2303のドライ...
- http://www.prolific.com.tw/
** プロジェクトのインポート [#f2ffcd7a]
プロジェクトを新規に作成すると細かな設定ミスで動作しない...
ここでは、LBEDのトップページにあるLBED.ZIPを解凍して、ロ...
((ディレクトリ名に日本語が入らない場所に展開してください...
に入れたところから説明します。((新規にプロジェクトを用意...
私の使っているLPCXpressoのバージョンは、4.2.2です。
最初に、LPCXpressoを起動して、以下の手順でプロジェクトを...
- FIleメニュー→import…を選択し、GeneralからExisting Proje...
- Browse…ボタンからLBEDを展開したディレクトリからCMSISv2p...
- Finishボタンを押すと、Project ExploerにインポートしたCM...
- 同様に、LBED_LPC11xx, LBED_USERLIB, LBED_MAINをインポー...
*** LEDチカチカをコンパイルする [#t04ded10]
LBED_MAIN/srcにあるTestOLED.cppをnot_usedに移動し、代わり...
&ref(TestLEDProj.png);
LBED_MAINを選択し、右クリックしてBuild Projectを選択しま...
Console画面に
#pre{{
make --no-print-directory post-build
Performing post-build steps
arm-none-eabi-size "LBED_MAIN.axf"; # arm-none-eabi-objco...
checksum -p LPC1114FN_102 -d "LBED_MAIN.bin";
text data bss dec hexfilename
1600 4 28 1632 660LBED_MAIN.axf
}}
と表示されたらビルド成功です。
*** LEDチカチカを動かす [#r56f0295]
MyARM基板への電源は、LPC-Linkから供給します。
JP3をショートします。
LPC-LinkとMyARMの接続は、以下のようにします。
- LPC-Link 1番をMyARMのCN1の3.3Vに接続
- LPC-Link 2番をMyARMのCN1のSWDに接続
- LPC-Link 3番をMyARMのCN1のSWCに接続
- LPC-Link 10番をMyARMのCN1のGNDに接続
LPC-LinkをUSBに接続し、MyARMのLED3が点灯すれば接続完了で...
これで、LBED_MAINを選択し、トップのツールバーの虫のような...
&ref(toolbtns.png);
自動的にプログラムがMyARMに書き込まれ、以下のようなデバッ...
&ref(debugger.jpg);
緑の▲をクリックするとプログラムが動き出し、LED2が1秒間隔...
** ライブラリの構成 [#t3cfc097]
LBEDのクラスライブラリは、以下の4つのプロジェクトから構...
- CMSISv2p00_LPC11xx: LPC11xx用のCMSISでクリスタルなしで...
- LBED_LPC11xx: LBED用のライブラリ本体
- LBED_USERLIB: TexLCD, LM73, MARMEX_OB_oledのユーザライ...
- LBED_MAIN: テスト用のメインプログラム(not_usedのファイ...
ベースとなるDigitalOut, BusOut, PinNamesは、「そらみみの...
[[IDEを使わずにLPCXpresso LPC1768のプログラムを開発する>h...
を参考にさせて頂きました。
*** ピンの設定 [#n93d02f5]
MyARMは、できるだけピンの配置をmbedと合わせるように作られ...
ピンの番号付けは、mbedにならって左端から反時計回りに1番か...
&ref(pin_layout.png);
p5からp30までは、LBED_LPC11xx/inc/PinNames.hで実際のビン...
*** wait関数 [#tfd9d2a7]
mbedのwait_ms, wait_usとwaitの初期化関数wait_init関数をC...
ただし、wait_usは8MHzの4クロックでループを回ると仮定し...
wait_usは、周辺機器の初期化に使用されるケースが多く、MPU...
wait_api.h
#pre{{
void wait_ms(int ms);
void wait_us(int us);
void wait_init(void);
}}
*** DigitalOut [#y14377ce]
DigitalOutのsetupをGPIOとして使えるピンをチェックし、_gpi...
セットし、最後に_gpiio->DIRで出力用にセットしています。
setup
#pre{{
void DigitalOut::setup(PinName pin, const char* name)
{
_pin = pin;
_gpio = 0;
_mask = 0;
_io = 0;
if (_pin >= P0_0 && _pin <= P0_31) {
_gpio = LPC_GPIO0;
_mask = 1 << (_pin - P0_0);
switch(_pin - P0_0) {
case 1: _io = &LPC_IOCON->PIO0_1; *_io = 0xd0; ...
case 2: _io = &LPC_IOCON->PIO0_2; *_io = 0xd0; ...
case 3: _io = &LPC_IOCON->PIO0_3; *_io = 0xd0; ...
case 4: _io = &LPC_IOCON->PIO0_4; *_io = 0xd0; ...
case 5: _io = &LPC_IOCON->PIO0_5; *_io = 0xd0; ...
case 6: _io = &LPC_IOCON->PIO0_6; *_io = 0xd0; ...
case 7: _io = &LPC_IOCON->PIO0_7; *_io = 0xd0; ...
case 8: _io = &LPC_IOCON->PIO0_8; *_io = 0xd0; ...
case 9: _io = &LPC_IOCON->PIO0_9; *_io = 0xd0; ...
case 10: _io = &LPC_IOCON->SWCLK_PIO0_10; *_io ...
case 11: _io = &LPC_IOCON->R_PIO0_11; *_io = 0x...
}
} else if (_pin >= P1_0 && _pin <= P1_31) {
_gpio = LPC_GPIO1;
_mask = 1 << (_pin - P1_0);
switch(_pin - P1_0) {
case 0: _io = &LPC_IOCON->R_PIO1_0; *_io = 0xd0...
case 1: _io = &LPC_IOCON->R_PIO1_1; *_io = 0xd0...
case 2: _io = &LPC_IOCON->R_PIO1_2; *_io = 0xd0...
case 3: _io = &LPC_IOCON->SWDIO_PIO1_3; *_io = ...
case 4: _io = &LPC_IOCON->PIO1_4; *_io = 0xd0; ...
case 5: _io = &LPC_IOCON->PIO1_5; *_io = 0xd0; ...
case 6: _io = &LPC_IOCON->PIO1_6; *_io = 0xd0; ...
case 7: _io = &LPC_IOCON->PIO1_7; *_io = 0xd0; ...
case 8: _io = &LPC_IOCON->PIO1_8; *_io = 0xd0; ...
case 9: _io = &LPC_IOCON->PIO1_9; *_io = 0xd0; ...
}
} else if (_pin >= P2_0 && _pin <= P2_31) {
_gpio = LPC_GPIO2;
_mask = 1 << (_pin - P2_0);
} else if (_pin >= P3_0 && _pin <= P3_31) {
_gpio = LPC_GPIO3;
_mask = 1 << (_pin - P3_0);
}
if (_gpio) {
_gpio->DIR |= _mask;
}
}
}}
DigitalOut.hには、read, write, =, intを定義しています。
#pre{{
void write(int value)
{
if (_gpio) {
if (value) {
_gpio->DATA |= _mask;
} else {
_gpio->DATA &= ~ _mask;
}
}
}
int read()
{
return _gpio && (_gpio->DATA & _mask) ? 1 : 0;
}
DigitalOut& operator = (int value)
{
write(value);
return *this;
}
DigitalOut& operator = (DigitalOut& rhs)
{
write(rhs.read());
return *this;
}
operator int()
{
return read();
}
}}
*** たったこれだけ? [#z9d1dcbd]
最初のLEDチカチカに関連するプログラムは、本当にこれだけで...
*** 注意 [#j23f4920]
Ram領域が足りないとのリンクエラーが発生したので、調べたと...
http://todotani.cocolog-nifty.com/blog/2011/10/lpcxpresso...
この対処のために、pure_virtual.cpp
#pre{{
extern "C" void __cxa_pure_virtual() { while (1); }
}}
を定義しました。
** コメント [#na1ae117]
#vote(おもしろかった[3],そうでもない[0],わかりずらい[0])
皆様のご意見、ご希望をお待ちしております。
#comment_kcaptcha
終了行:
[[lbed]]
#contents
2013/07/14からのアクセス回数 &counter;
** 実験ワークベンチ [#f00e8ff5]
プログラムを作成する場合には、いろいろな実験に必要な部品...
実験ワークベンチを用意すると便利です。
今回は、トラ技の2012/11号で付録についてきたMyARM基板とLPC...
((LPC11U14ボードのデバッガ部分))
を使用します。
写真では、LPC11U14のデバッガ部分を切り離して使用していま...
(([[LPC-Link2>http://akizukidenshi.com/catalog/g/gM-06706...
&ref(MyARMandLPC-LINK.png);
子供たちでも組み込みの実験をするには、安価でソースレベル...
そのため、1台2000円のLPC11U14ボードをワークベンチにするの...
DIPタイプで1個110円の[[LPC1114FN28>http://akizukidenshi.c...
は、外部クリスタルなしでも動作するので、子供たちの電子工...
** プログラミング環境 [#x407d0b7]
無償のプログラムミング環境LPCXpressoを以下のページからユ...
- http://lpcxpresso.code-red-tech.com/LPCXpresso/
Windowsを使用の方は、シリアル通信用のチップPL2303のドライ...
- http://www.prolific.com.tw/
** プロジェクトのインポート [#f2ffcd7a]
プロジェクトを新規に作成すると細かな設定ミスで動作しない...
ここでは、LBEDのトップページにあるLBED.ZIPを解凍して、ロ...
((ディレクトリ名に日本語が入らない場所に展開してください...
に入れたところから説明します。((新規にプロジェクトを用意...
私の使っているLPCXpressoのバージョンは、4.2.2です。
最初に、LPCXpressoを起動して、以下の手順でプロジェクトを...
- FIleメニュー→import…を選択し、GeneralからExisting Proje...
- Browse…ボタンからLBEDを展開したディレクトリからCMSISv2p...
- Finishボタンを押すと、Project ExploerにインポートしたCM...
- 同様に、LBED_LPC11xx, LBED_USERLIB, LBED_MAINをインポー...
*** LEDチカチカをコンパイルする [#t04ded10]
LBED_MAIN/srcにあるTestOLED.cppをnot_usedに移動し、代わり...
&ref(TestLEDProj.png);
LBED_MAINを選択し、右クリックしてBuild Projectを選択しま...
Console画面に
#pre{{
make --no-print-directory post-build
Performing post-build steps
arm-none-eabi-size "LBED_MAIN.axf"; # arm-none-eabi-objco...
checksum -p LPC1114FN_102 -d "LBED_MAIN.bin";
text data bss dec hexfilename
1600 4 28 1632 660LBED_MAIN.axf
}}
と表示されたらビルド成功です。
*** LEDチカチカを動かす [#r56f0295]
MyARM基板への電源は、LPC-Linkから供給します。
JP3をショートします。
LPC-LinkとMyARMの接続は、以下のようにします。
- LPC-Link 1番をMyARMのCN1の3.3Vに接続
- LPC-Link 2番をMyARMのCN1のSWDに接続
- LPC-Link 3番をMyARMのCN1のSWCに接続
- LPC-Link 10番をMyARMのCN1のGNDに接続
LPC-LinkをUSBに接続し、MyARMのLED3が点灯すれば接続完了で...
これで、LBED_MAINを選択し、トップのツールバーの虫のような...
&ref(toolbtns.png);
自動的にプログラムがMyARMに書き込まれ、以下のようなデバッ...
&ref(debugger.jpg);
緑の▲をクリックするとプログラムが動き出し、LED2が1秒間隔...
** ライブラリの構成 [#t3cfc097]
LBEDのクラスライブラリは、以下の4つのプロジェクトから構...
- CMSISv2p00_LPC11xx: LPC11xx用のCMSISでクリスタルなしで...
- LBED_LPC11xx: LBED用のライブラリ本体
- LBED_USERLIB: TexLCD, LM73, MARMEX_OB_oledのユーザライ...
- LBED_MAIN: テスト用のメインプログラム(not_usedのファイ...
ベースとなるDigitalOut, BusOut, PinNamesは、「そらみみの...
[[IDEを使わずにLPCXpresso LPC1768のプログラムを開発する>h...
を参考にさせて頂きました。
*** ピンの設定 [#n93d02f5]
MyARMは、できるだけピンの配置をmbedと合わせるように作られ...
ピンの番号付けは、mbedにならって左端から反時計回りに1番か...
&ref(pin_layout.png);
p5からp30までは、LBED_LPC11xx/inc/PinNames.hで実際のビン...
*** wait関数 [#tfd9d2a7]
mbedのwait_ms, wait_usとwaitの初期化関数wait_init関数をC...
ただし、wait_usは8MHzの4クロックでループを回ると仮定し...
wait_usは、周辺機器の初期化に使用されるケースが多く、MPU...
wait_api.h
#pre{{
void wait_ms(int ms);
void wait_us(int us);
void wait_init(void);
}}
*** DigitalOut [#y14377ce]
DigitalOutのsetupをGPIOとして使えるピンをチェックし、_gpi...
セットし、最後に_gpiio->DIRで出力用にセットしています。
setup
#pre{{
void DigitalOut::setup(PinName pin, const char* name)
{
_pin = pin;
_gpio = 0;
_mask = 0;
_io = 0;
if (_pin >= P0_0 && _pin <= P0_31) {
_gpio = LPC_GPIO0;
_mask = 1 << (_pin - P0_0);
switch(_pin - P0_0) {
case 1: _io = &LPC_IOCON->PIO0_1; *_io = 0xd0; ...
case 2: _io = &LPC_IOCON->PIO0_2; *_io = 0xd0; ...
case 3: _io = &LPC_IOCON->PIO0_3; *_io = 0xd0; ...
case 4: _io = &LPC_IOCON->PIO0_4; *_io = 0xd0; ...
case 5: _io = &LPC_IOCON->PIO0_5; *_io = 0xd0; ...
case 6: _io = &LPC_IOCON->PIO0_6; *_io = 0xd0; ...
case 7: _io = &LPC_IOCON->PIO0_7; *_io = 0xd0; ...
case 8: _io = &LPC_IOCON->PIO0_8; *_io = 0xd0; ...
case 9: _io = &LPC_IOCON->PIO0_9; *_io = 0xd0; ...
case 10: _io = &LPC_IOCON->SWCLK_PIO0_10; *_io ...
case 11: _io = &LPC_IOCON->R_PIO0_11; *_io = 0x...
}
} else if (_pin >= P1_0 && _pin <= P1_31) {
_gpio = LPC_GPIO1;
_mask = 1 << (_pin - P1_0);
switch(_pin - P1_0) {
case 0: _io = &LPC_IOCON->R_PIO1_0; *_io = 0xd0...
case 1: _io = &LPC_IOCON->R_PIO1_1; *_io = 0xd0...
case 2: _io = &LPC_IOCON->R_PIO1_2; *_io = 0xd0...
case 3: _io = &LPC_IOCON->SWDIO_PIO1_3; *_io = ...
case 4: _io = &LPC_IOCON->PIO1_4; *_io = 0xd0; ...
case 5: _io = &LPC_IOCON->PIO1_5; *_io = 0xd0; ...
case 6: _io = &LPC_IOCON->PIO1_6; *_io = 0xd0; ...
case 7: _io = &LPC_IOCON->PIO1_7; *_io = 0xd0; ...
case 8: _io = &LPC_IOCON->PIO1_8; *_io = 0xd0; ...
case 9: _io = &LPC_IOCON->PIO1_9; *_io = 0xd0; ...
}
} else if (_pin >= P2_0 && _pin <= P2_31) {
_gpio = LPC_GPIO2;
_mask = 1 << (_pin - P2_0);
} else if (_pin >= P3_0 && _pin <= P3_31) {
_gpio = LPC_GPIO3;
_mask = 1 << (_pin - P3_0);
}
if (_gpio) {
_gpio->DIR |= _mask;
}
}
}}
DigitalOut.hには、read, write, =, intを定義しています。
#pre{{
void write(int value)
{
if (_gpio) {
if (value) {
_gpio->DATA |= _mask;
} else {
_gpio->DATA &= ~ _mask;
}
}
}
int read()
{
return _gpio && (_gpio->DATA & _mask) ? 1 : 0;
}
DigitalOut& operator = (int value)
{
write(value);
return *this;
}
DigitalOut& operator = (DigitalOut& rhs)
{
write(rhs.read());
return *this;
}
operator int()
{
return read();
}
}}
*** たったこれだけ? [#z9d1dcbd]
最初のLEDチカチカに関連するプログラムは、本当にこれだけで...
*** 注意 [#j23f4920]
Ram領域が足りないとのリンクエラーが発生したので、調べたと...
http://todotani.cocolog-nifty.com/blog/2011/10/lpcxpresso...
この対処のために、pure_virtual.cpp
#pre{{
extern "C" void __cxa_pure_virtual() { while (1); }
}}
を定義しました。
** コメント [#na1ae117]
#vote(おもしろかった[3],そうでもない[0],わかりずらい[0])
皆様のご意見、ご希望をお待ちしております。
#comment_kcaptcha
ページ名:
SmartDoc