ソフトウエア開発手順 -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;
}
}
}












