arm/CodeBaseを使ったARMマイコンパーフェクト学習基板の使い方
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
[[FrontPage]]
#contents
2010/11/13からのアクセス回数 &counter;
** はじめに [#n4a9b3df]
CQ出版から発売された「ARMマイコンパーフェクト学習基板の使...
インタフェースを実験するための部品とCortex-M3を搭載したAR...
著者も私の好きな桑野雅彦氏です。
しかし、Micro BASICを使った説明では、処理の流れが分かりに...
読みづらいものとなっています。
microBuilder.euが公開している
[[CodeBase>http://www.microbuilder.eu/Projects/LPC1343Ref...
はLPC1343のオープンソースのライブラリです。
ここでは、ARMマイコンパーフェクト学習基板の例題をCodeBase...
Cライブラリを使った開発方法を紹介します。
** MacOSでCの例題を動かす [#s3e44779]
私はMacOSで開発しているので、ARMマイコンパーフェクト学習...
MacOSで動かしてみることにしました。
最初に
[[そんすけぶろぐ>http://thumper0the0rabbit.blog91.fc2.com...
を参考に以下のようにしました。
GCCは、MacPortのarm-elf-gcc(([[arm/開発環境のセットアップ...
変更点は、
- makefile
- usbpwm_Debug.ld
- src/subdir.mk
*** makefileの変更 [#x50cdbde]
8行以下に
#pre{{
ARM_GCC := arm-elf-gcc
ARM_SIZE := arm-elf-size
ARM_OBJCOPY := arm-elf-objcopy
CMSIS_LIB_DIR := ../../CMSISv1p30_LPC13xx/Debug
CMSIS_INC_DIR := ../../CMSISv1p30_LPC13xx/inc
}}
を追加し、gcc, sizeの部分を以下のようにしまいした。
#pre{{
# GCCの部分
$(ARM_GCC) -nostdlib -L$(CMSIS_LIB_DIR) -Xlinker --gc-se...
-mcpu=cortex-m3 -mthumb -T "usbpwm_Debug.ld" -o "USBPWM....
# SIZEの部分
-$(ARM_SIZE) USBPWM.axf; $(ARM_OBJCOPY) -O binary USBPW...
}}
他は、そんすけぶろぐの処理と同じです。
*** binの処理 [#v5c7f630]
makeで作成されたバイナリファイルは、そのままでは動作しな...
を使ってチェックサムをバイナリファイルにセットします。
また、パーフェクト学習基板基板への書き込みの際、Finderを...
作成されるため、ターミナルを使って以下のように行いました。
#pre{{
$ make
$ lpcrc USBPWM.bin
# ここで、基板のスイッチを2,3pinをショートし、Macに挿入し...
$ cp USBPWM.bin "/Volume/CRP DISABLD/"
$ sudo umount "/Volume/CRP DISABLD/"
}}
この後、基板のスイッチを1,2pinをショートし、Macに挿入し直...
これで、MacOS上で学習基板のプログラムが作成できることが確...
** CodeBaseのインストール [#p82b4a22]
次にCodeBaseをインストールします。
*** CodeBaseのダウンロード [#w71007ab]
CodeBaseは以下のサイトからダウンロードします。
- http://www.microbuilder.eu/projects/LPC1343ReferenceDes...
ダウンロードしたLPC1343_CodeBase_v0.50.zipを解凍し、適当...
(私は、~/local/arm/以下にセットしました)。
*** 設定 [#g7072124]
設定する部分は、MakefileのCROSS_COMPILEの部分だけです。
MacPortのクロスコンパイラ用に
#pre{{
# CROSS_COMPILE = arm-none-eabi-
CROSS_COMPILE = arm-elf-
}}
として、コンパイルしたところ、
#pre{{
/opt/local/lib/gcc/arm-elf/4.3.2/../../../../arm-elf/bin/...
/opt/local/lib/gcc/arm-elf/4.3.2/../../../../arm-elf/lib/...
whereas firmware.elf uses software FP
}}
のエラーがでました。MacPortの作ったlib.aがハードのFloatin...
ウェアのFloating Pointを使っているようです。MacPort arm-g...
今回は、[[FYI氏ブログ>http://jfyi.blogspot.com/2008/09/co...
devkitARMのMac OS X版をダウンロードしました。
MakefileのCROSS_COMPILEの部分を以下のように変更し、
#pre{{
#CROSS_COMPILE = arm-none-eabi-
CROSS_COMPILE = arm-eabi-
}}
今度は、正常にコンパイルができfirmware.binが作成されまし...
** GPIO出力 [#efdc2dea]
基板にLEDをセットし、LEDを点滅させる例題をCodeBaseで書い...
基板のLEDは、GPIO0の7ビット目に接続されているので、LED点...
#pre{{
#include "core/cpu/cpu.h"
#include "core/gpio/gpio.h"
#include "core/systick/systick.h"
int main (void)
{
// Initialise the cpu
cpuInit();
// Initialise the systick timer with one tick every 10 m...
systickInit(10);
gpioInit();
// Set GPIO0.7 to output
gpioSetDir(0, 7, gpioDirection_Output);
// Disable the internal pullup/down resistor on P0.7
gpioSetPullup(&IOCON_PIO0_7, gpioPullupMode_Inactive);
while (1) {
// Set GPIO0.7 high
gpioSetValue(0, 7, 1);
systickDelay(50);
// Set GPIO0.7 low
gpioSetValue(0, 7, 0);
systickDelay(50);
}
}
}}
基本的に、cpuInit関数を呼んだ後は、使用する周辺装置の初期...
ここでは、
- systickInit
- gpioInit
を読んでいます。
次に、GPIOのレジスタの設定をします。
- GPIO0の7bitを出力モードにする
- プルアップ/ダウンの設定は無効にする
GPIOの値の設定は、gpioSetValue関数で行います。
- gpioSetValue(0, 7, 1);でGPIO0の7bit目の値を1とする
となります。
** GPIO入力 [#mc02d12d]
次にGPIOの入力のテストを基板付属のタッチセンサーを使って...
この基板を入手するまでタッチセンサー専用ICがあるとは知ら...
タッチセンサーを使用するには、
P4ピンソケットの
- 3-4番ピン
- 31-32番ピン(本の47ページの図6にはミスプリがあり、右か...
のジャンパをセットします。使用するGPIOは、GPIO2の4bit目で...
先のLEDの例と合わせて、タッチしたときにLEDが点灯するよう...
#pre{{
#include "core/cpu/cpu.h"
#include "core/gpio/gpio.h"
int main (void)
{
// Initialise the cpu
cpuInit();
gpioInit();
// Set GPIO0.7 to output
gpioSetDir(0, 7, gpioDirection_Output);
// Disable the internal pullup/down resistor on P0.7
gpioSetPullup(&IOCON_PIO0_7, gpioPullupMode_Inactive);
// Set GPIO2.4 to input
gpioSetDir(2, 4, gpioDirection_Input);
// Enable the pull-down resistor on GPIO2.4
gpioSetPullup (&IOCON_PIO2_4, gpioPullupMode_PullDown);
while (1) {
// Read the current state of GPIO2.4 (1 = high, 0 = low)
if (gpioGetValue(2, 4) != 0) {
// Set GPIO0.7 high
gpioSetValue(0, 7, 1);
}
else {
// Set GPIO0.7 low
gpioSetValue(0, 7, 0);
}
}
}
}}
どうでしょう、とても簡単にGPIOを使うことができると思いま...
CodeBaseはオープンソースなので、各関数のソースを読むこと...
*** USB接続時にシリアルデバイスにする方法 [#c7304ee6]
LPC1343には、USBコントローラが付属しており、USBシリアルと...
CodeBaseのUSB CDCを使ってPCとシリアル通信する例題を作って...
ソースは以下の通りです。
#pre{{
#include "core/cpu/cpu.h"
#include "core/uart/uart.h"
#include "core/usbcdc/usb.h"
#include "core/usbcdc/usbcore.h"
#include "core/usbcdc/usbhw.h"
#include "core/usbcdc/cdcuser.h"
/* Systick Timer Settings */
// The number of milliseconds between each tick of the sy...
#define CFG_SYSTICK_DELAY_IN_MS (1)
/* UART Settings */
#define CFG_UART_BAUDRATE (57600) // Defa...
// RX FIFO buffer size (the maximum number of received ch...
#define CFG_UART_BUFSIZE (80)
// loop until any key input.
void waitUntilAnyKeyInput() {
int numAvailByte = 0;
do {
CDC_OutBufAvailChar (&numAvailByte);
} while(numAvailByte == 0);
}
int main (void)
{
// Initialise the cpu
cpuInit();
// Initialise UART with the default baud rate (set in pr...
uartInit(CFG_UART_BAUDRATE);
// Initialise USB CDC
CDC_Init(); // Initialise VCOM
USB_Init(); // USB Initialization
USB_Connect(TRUE); // USB Connect
while (!USB_Configuration); // wait until USB is confi...
waitUntilAnyKeyInput();
printf("Hello world");
while (1) ;
}
}}
USBに接続するとすぐにプログラムを実行してしまうため、Mac...
タイミングでHello worldと出力することにしました。
文字列入力を待つ関数は、waitUntilAnyKeyInputです。
*** 動作確認 [#h5ab37c7]
基板を接続すると、「新しいネットワークインタフェースが検...
キャンセルとし、ここでは設定はしません。
ターミナルで以下のようにデバイスを確認します。
#pre{{
$ ls /dev/cu.*
/dev/cu.Bluetooth-Modem /dev/cu.Bluetooth-PDA-Sync /dev/...
}}
と出力され、/dev/cu.usbmodem241321が新しいシリアルデバイ...
起動方法が簡単なので、シリアル通信にはscreenコマンドを使...
#pre{{
$ screen /dev/cu.usbmodem241321
Hello world
}}
screenコマンドを実行し、リターンキーを押すと「Hello world...
screenコマンドを終了するには、Ctrl-a Ctrl-kとし[Y/N]を確...
このUSBシリアル通信は、デバッグやPCからの制御でとても便利...
** コメント [ [#bb0bb178]
#vote(おもしろかった[5],そうでもない[1],わかりずらい[0])
皆様のご意見、ご希望をお待ちしております。
- [[lbed/08-ARM学習基板で実験]]では、リアルタイムクロック...
#comment_kcaptcha
終了行:
[[FrontPage]]
#contents
2010/11/13からのアクセス回数 &counter;
** はじめに [#n4a9b3df]
CQ出版から発売された「ARMマイコンパーフェクト学習基板の使...
インタフェースを実験するための部品とCortex-M3を搭載したAR...
著者も私の好きな桑野雅彦氏です。
しかし、Micro BASICを使った説明では、処理の流れが分かりに...
読みづらいものとなっています。
microBuilder.euが公開している
[[CodeBase>http://www.microbuilder.eu/Projects/LPC1343Ref...
はLPC1343のオープンソースのライブラリです。
ここでは、ARMマイコンパーフェクト学習基板の例題をCodeBase...
Cライブラリを使った開発方法を紹介します。
** MacOSでCの例題を動かす [#s3e44779]
私はMacOSで開発しているので、ARMマイコンパーフェクト学習...
MacOSで動かしてみることにしました。
最初に
[[そんすけぶろぐ>http://thumper0the0rabbit.blog91.fc2.com...
を参考に以下のようにしました。
GCCは、MacPortのarm-elf-gcc(([[arm/開発環境のセットアップ...
変更点は、
- makefile
- usbpwm_Debug.ld
- src/subdir.mk
*** makefileの変更 [#x50cdbde]
8行以下に
#pre{{
ARM_GCC := arm-elf-gcc
ARM_SIZE := arm-elf-size
ARM_OBJCOPY := arm-elf-objcopy
CMSIS_LIB_DIR := ../../CMSISv1p30_LPC13xx/Debug
CMSIS_INC_DIR := ../../CMSISv1p30_LPC13xx/inc
}}
を追加し、gcc, sizeの部分を以下のようにしまいした。
#pre{{
# GCCの部分
$(ARM_GCC) -nostdlib -L$(CMSIS_LIB_DIR) -Xlinker --gc-se...
-mcpu=cortex-m3 -mthumb -T "usbpwm_Debug.ld" -o "USBPWM....
# SIZEの部分
-$(ARM_SIZE) USBPWM.axf; $(ARM_OBJCOPY) -O binary USBPW...
}}
他は、そんすけぶろぐの処理と同じです。
*** binの処理 [#v5c7f630]
makeで作成されたバイナリファイルは、そのままでは動作しな...
を使ってチェックサムをバイナリファイルにセットします。
また、パーフェクト学習基板基板への書き込みの際、Finderを...
作成されるため、ターミナルを使って以下のように行いました。
#pre{{
$ make
$ lpcrc USBPWM.bin
# ここで、基板のスイッチを2,3pinをショートし、Macに挿入し...
$ cp USBPWM.bin "/Volume/CRP DISABLD/"
$ sudo umount "/Volume/CRP DISABLD/"
}}
この後、基板のスイッチを1,2pinをショートし、Macに挿入し直...
これで、MacOS上で学習基板のプログラムが作成できることが確...
** CodeBaseのインストール [#p82b4a22]
次にCodeBaseをインストールします。
*** CodeBaseのダウンロード [#w71007ab]
CodeBaseは以下のサイトからダウンロードします。
- http://www.microbuilder.eu/projects/LPC1343ReferenceDes...
ダウンロードしたLPC1343_CodeBase_v0.50.zipを解凍し、適当...
(私は、~/local/arm/以下にセットしました)。
*** 設定 [#g7072124]
設定する部分は、MakefileのCROSS_COMPILEの部分だけです。
MacPortのクロスコンパイラ用に
#pre{{
# CROSS_COMPILE = arm-none-eabi-
CROSS_COMPILE = arm-elf-
}}
として、コンパイルしたところ、
#pre{{
/opt/local/lib/gcc/arm-elf/4.3.2/../../../../arm-elf/bin/...
/opt/local/lib/gcc/arm-elf/4.3.2/../../../../arm-elf/lib/...
whereas firmware.elf uses software FP
}}
のエラーがでました。MacPortの作ったlib.aがハードのFloatin...
ウェアのFloating Pointを使っているようです。MacPort arm-g...
今回は、[[FYI氏ブログ>http://jfyi.blogspot.com/2008/09/co...
devkitARMのMac OS X版をダウンロードしました。
MakefileのCROSS_COMPILEの部分を以下のように変更し、
#pre{{
#CROSS_COMPILE = arm-none-eabi-
CROSS_COMPILE = arm-eabi-
}}
今度は、正常にコンパイルができfirmware.binが作成されまし...
** GPIO出力 [#efdc2dea]
基板にLEDをセットし、LEDを点滅させる例題をCodeBaseで書い...
基板のLEDは、GPIO0の7ビット目に接続されているので、LED点...
#pre{{
#include "core/cpu/cpu.h"
#include "core/gpio/gpio.h"
#include "core/systick/systick.h"
int main (void)
{
// Initialise the cpu
cpuInit();
// Initialise the systick timer with one tick every 10 m...
systickInit(10);
gpioInit();
// Set GPIO0.7 to output
gpioSetDir(0, 7, gpioDirection_Output);
// Disable the internal pullup/down resistor on P0.7
gpioSetPullup(&IOCON_PIO0_7, gpioPullupMode_Inactive);
while (1) {
// Set GPIO0.7 high
gpioSetValue(0, 7, 1);
systickDelay(50);
// Set GPIO0.7 low
gpioSetValue(0, 7, 0);
systickDelay(50);
}
}
}}
基本的に、cpuInit関数を呼んだ後は、使用する周辺装置の初期...
ここでは、
- systickInit
- gpioInit
を読んでいます。
次に、GPIOのレジスタの設定をします。
- GPIO0の7bitを出力モードにする
- プルアップ/ダウンの設定は無効にする
GPIOの値の設定は、gpioSetValue関数で行います。
- gpioSetValue(0, 7, 1);でGPIO0の7bit目の値を1とする
となります。
** GPIO入力 [#mc02d12d]
次にGPIOの入力のテストを基板付属のタッチセンサーを使って...
この基板を入手するまでタッチセンサー専用ICがあるとは知ら...
タッチセンサーを使用するには、
P4ピンソケットの
- 3-4番ピン
- 31-32番ピン(本の47ページの図6にはミスプリがあり、右か...
のジャンパをセットします。使用するGPIOは、GPIO2の4bit目で...
先のLEDの例と合わせて、タッチしたときにLEDが点灯するよう...
#pre{{
#include "core/cpu/cpu.h"
#include "core/gpio/gpio.h"
int main (void)
{
// Initialise the cpu
cpuInit();
gpioInit();
// Set GPIO0.7 to output
gpioSetDir(0, 7, gpioDirection_Output);
// Disable the internal pullup/down resistor on P0.7
gpioSetPullup(&IOCON_PIO0_7, gpioPullupMode_Inactive);
// Set GPIO2.4 to input
gpioSetDir(2, 4, gpioDirection_Input);
// Enable the pull-down resistor on GPIO2.4
gpioSetPullup (&IOCON_PIO2_4, gpioPullupMode_PullDown);
while (1) {
// Read the current state of GPIO2.4 (1 = high, 0 = low)
if (gpioGetValue(2, 4) != 0) {
// Set GPIO0.7 high
gpioSetValue(0, 7, 1);
}
else {
// Set GPIO0.7 low
gpioSetValue(0, 7, 0);
}
}
}
}}
どうでしょう、とても簡単にGPIOを使うことができると思いま...
CodeBaseはオープンソースなので、各関数のソースを読むこと...
*** USB接続時にシリアルデバイスにする方法 [#c7304ee6]
LPC1343には、USBコントローラが付属しており、USBシリアルと...
CodeBaseのUSB CDCを使ってPCとシリアル通信する例題を作って...
ソースは以下の通りです。
#pre{{
#include "core/cpu/cpu.h"
#include "core/uart/uart.h"
#include "core/usbcdc/usb.h"
#include "core/usbcdc/usbcore.h"
#include "core/usbcdc/usbhw.h"
#include "core/usbcdc/cdcuser.h"
/* Systick Timer Settings */
// The number of milliseconds between each tick of the sy...
#define CFG_SYSTICK_DELAY_IN_MS (1)
/* UART Settings */
#define CFG_UART_BAUDRATE (57600) // Defa...
// RX FIFO buffer size (the maximum number of received ch...
#define CFG_UART_BUFSIZE (80)
// loop until any key input.
void waitUntilAnyKeyInput() {
int numAvailByte = 0;
do {
CDC_OutBufAvailChar (&numAvailByte);
} while(numAvailByte == 0);
}
int main (void)
{
// Initialise the cpu
cpuInit();
// Initialise UART with the default baud rate (set in pr...
uartInit(CFG_UART_BAUDRATE);
// Initialise USB CDC
CDC_Init(); // Initialise VCOM
USB_Init(); // USB Initialization
USB_Connect(TRUE); // USB Connect
while (!USB_Configuration); // wait until USB is confi...
waitUntilAnyKeyInput();
printf("Hello world");
while (1) ;
}
}}
USBに接続するとすぐにプログラムを実行してしまうため、Mac...
タイミングでHello worldと出力することにしました。
文字列入力を待つ関数は、waitUntilAnyKeyInputです。
*** 動作確認 [#h5ab37c7]
基板を接続すると、「新しいネットワークインタフェースが検...
キャンセルとし、ここでは設定はしません。
ターミナルで以下のようにデバイスを確認します。
#pre{{
$ ls /dev/cu.*
/dev/cu.Bluetooth-Modem /dev/cu.Bluetooth-PDA-Sync /dev/...
}}
と出力され、/dev/cu.usbmodem241321が新しいシリアルデバイ...
起動方法が簡単なので、シリアル通信にはscreenコマンドを使...
#pre{{
$ screen /dev/cu.usbmodem241321
Hello world
}}
screenコマンドを実行し、リターンキーを押すと「Hello world...
screenコマンドを終了するには、Ctrl-a Ctrl-kとし[Y/N]を確...
このUSBシリアル通信は、デバッグやPCからの制御でとても便利...
** コメント [ [#bb0bb178]
#vote(おもしろかった[5],そうでもない[1],わかりずらい[0])
皆様のご意見、ご希望をお待ちしております。
- [[lbed/08-ARM学習基板で実験]]では、リアルタイムクロック...
#comment_kcaptcha
ページ名:
SmartDoc