ソフトウエア開発手順 -GPIO + デバッグ-
1.スイッチ・マトリックス・ツールでポートの定義
スイッチ・マトリックス・ツールを使って、ポートの定義をします。
スイッチ・マトリックス・ツールのインストール方法はこちら。
スイッチ・マトリックス・ツールを実行します。
DIP8を選択します。
UARTポートの選択
5,8ピンをUARTとして使用するので、UARTの選択をします。
- ICの画の中のUSART0を選択します。
- Pin番号5をマウスでクリックし、選択メニューの中から、U0_RXDを選択します。
- 同様にPin番号8にU0_TXDを割り当てます。
2.プロジェクトの作成
プロジェクトは、サンプルのプロジェクトをImportして作成します。
トラ技のWebサイトでもサンプルの公開がされていますが、LPCXpressoにあるサンプルを使用してみます。
LPCXpressoを実行します。
ファイルを選択します。
ファイルは、
C:\nxp\LPCXpresso_7.1.1_125\lpcxpresso\Examples\NXP\LPC800\NXP_LPC8xx_SampleCodeBundle.zip
を選択し、Nextを押します。
まずは、GPIOの動作を確認したいので、
- Blinky
を、その他に、
- CMSIS_CORE_LPC8xx
- CMSIS_DSPLIB_CM0
- lpc800_driver_lib
の3つのプロジェクトを選択します。この3つのプロジェクトはBlinkyで必要になります。
選択したら、Finishボタンを押します。
3.Initial処理の追加
スイッチ・マトリックス・ツールで作成した処理を追加します。
Project ExplorerのBlinkyを開き、srcからmain.cをダブルクリックして、ファイルを開きます。
Switch Matrix Toolの下のTabから、swm.cを選択します。
今回は、Initial関数をBlinlyのソースにコピーします。
コピーした関数をBlinkyのmain.cにペーストし、main.cに呼び出し部を作成します。
#include "lpc8xx_clkconfig.h" #include "lpc8xx_gpio.h" #include "lpc8xx_mrt.h" extern uint32_t mrt_counter; void SwitchMatrix_Init() { /* Enable SWM clock */ LPC_SYSCON->SYSAHBCLKCTRL |= (1<<7); /* Pin Assign 8 bit Configuration */ /* U0_TXD */ /* U0_RXD */ LPC_SWM->PINASSIGN0 = 0xffff0100UL; /* Pin Assign 1 bit Configuration */ /* SWCLK */ /* SWDIO */ /* RESET */ LPC_SWM->PINENABLE0 = 0xffffffb3UL; } /* Main Program */ int main (void) { uint32_t regVal; SystemCoreClockUpdate(); SwitchMatrix_Init(); /* Config CLKOUT, mostly used for debugging. */
4.デバッガの接続
デバッガ基板とPCをUSBケーブルで接続します。
5.コンパイルと接続
ファイルを保存したら、デバッグボタンを押します。
デバッグボタンを押すと、コンパイルを実行してデバッグ状態になります。
デバッガが立ち上がらない時は...
Connect Errorが出る時は、デバッグポートが他の機能に割り当てられている事が考えられます。
その時には、
- デバッガからUSBケーブルを抜きます。
- LPC810のリセットPin(1番Pin)をLowにしたまま、USBケーブルをデバッガにつなぎます。
- LPC810のリセットPinをHighにします。
- この状態で、デバッガを起動します。(デバッグボタンを押します)
Targetの変更
このままコンパイルをすると、次のエラーがでます。
原因は、このサンプルがLPC810のものではないからです。確認してみましょう。
Project ExplorerのBlinkyを選択した状態で、マウスの右ボタンをクリックし、Propertiesを開きます。
C/C++ Build内のMCP settingsを選択します。
TargetがLPC812になっていますので、LPC810に変更し、OKを押します。
ポートの変更
サンプルではPort0.7、16、17を使用しています。今回はPort0.4なのでその部分を変更します。
/* Set port p0.7 to output */ <span style="font-size: 13px;">GPIOSetDir( 0, 7, 1 );</span> /* Set port p0.16 to output */ GPIOSetDir( 0, 16, 1 ); /* Set port p0.17 to output */ GPIOSetDir( 0, 17, 1 );
/* Set port p0.4 to output */ GPIOSetDir( 0, 4, 1 );
while以下の部分も変更します。
変更後のソースは、
#ifdef __USE_CMSIS #include "LPC8xx.h" #endif #include "lpc8xx_clkconfig.h" #include "lpc8xx_gpio.h" #include "lpc8xx_mrt.h" extern uint32_t mrt_counter; void SwitchMatrix_Init() { /* Enable SWM clock */ LPC_SYSCON->SYSAHBCLKCTRL |= (1<<7); /* Pin Assign 8 bit Configuration */ /* U0_TXD */ /* U0_RXD */ LPC_SWM->PINASSIGN0 = 0xffff0100UL; /* Pin Assign 1 bit Configuration */ /* SWCLK */ /* SWDIO */ /* RESET */ LPC_SWM->PINENABLE0 = 0xffffffb3UL; } /* Main Program */ int main (void) { uint32_t regVal; SystemCoreClockUpdate(); SwitchMatrix_Init(); /* Config CLKOUT, mostly used for debugging. */ regVal = LPC_SWM->PINASSIGN8 & ~( 0xFF << 16 ); LPC_SWM->PINASSIGN8 = regVal | ( 12 << 16 ); /* P0.12 is CLKOUT, ASSIGN(23:16). */ CLKOUT_Setup( CLKOUTCLK_SRC_MAIN_CLK ); #if 0 regVal = LPC_SWM->PINASSIGN0 & ~( (0xFF << 0) | (0xFF << 8) ); LPC_SWM->PINASSIGN0 = regVal | ( (2 << 0) | (3 << 8) ); /* P0.2 is UART0 TX, ASSIGN(7:0); P0.3 is UART0 RX. ASSIGN(15:8). */ #endif /* Enable AHB clock to the GPIO domain. */ LPC_SYSCON->SYSAHBCLKCTRL |= (1<<6); /* Set port p0.4 to output */ GPIOSetDir( 0, 4, 1 ); init_mrt(0x8000); while (1) /* Loop forever */ { /* I/O configuration and LED setting pending. */ if ( (mrt_counter > 0) && (mrt_counter <= 200) ) { GPIOSetBitValue( 0, 4, 0 ); } if ( (mrt_counter > 200) && (mrt_counter <= 400) ) { GPIOSetBitValue( 0, 4, 1 ); } else if ( mrt_counter > 400 ) { mrt_counter = 0; } } }