2010年10月31日日曜日

LPCXpresso LPC1768でTOPPERS/ASPの動作を確認する


2011年2月23日の記事、3千円で楽しめるARMマイコンとRTOSの世界 (TOPPERS/ASP on LPCXpresso LPC1768)でLPCXpressoさえあればTOPPERS/ASPを楽しめるようにしました。



TOPPERS/ASP for LPC(http://sourceforge.jp/projects/toppersasp4lpc/)においてsuikanさんがTOPPERS/ASPをLPCプロセッサで動作させるためのポーティングをされています。


suikanさんがお使いのボードは株式会社日新テクニカで販売されているNXP ARM/Cortex-M3 LPC1768開発キット(http://www.nissin-tech.com/2010/01/nxp-armcortex-m3-lpc1768.html)です。






Embedded Artistsで公開されているFreeRTOSポート(http://www.embeddedartists.com/products/lpcxpresso/lpc1768_xpr.php?tab=res)ではP0[22]のLED(ボード上ではLED2とシルクが打ってある)が点滅するデモになっています。内部では二つのタスクが起動し、一方が送信し一方が受信、そして受信側がLEDをトグルするデモです。




これを踏まえて先のTOPPERS/ASPでもLPCXpresso LPC1768でLEDがチカチカするようにしてみました。Subversionのリポジトリがrevision 1となっているのは私のローカルリポジトリのバージョンです。http://svn.sourceforge.jp/svnroot/toppersasp4lpcからダウンロードしてきたバージョンはrevision 206です。
  1. asp/cfgでconfigureしてmakeする。
  2. sample1プロジェクト用のディレクトリを作成する。
  3. asp/configure -T lpc1768_generic_gccを実行し、サンプルプログラムを生成する。
  4. make depend; makeする。
変更点を以下に示します。


Index: sample1/sample1.c
===================================================================
--- sample1/sample1.c (revision 1)
+++ sample1/sample1.c (working copy)
@@ -108,6 +108,7 @@
 #include "syssvc/syslog.h"
 #include "kernel_cfg.h"
 #include "sample1.h"
+#include "util.h"


 /*
  *  サービスコールのエラーのログ出力
@@ -146,6 +147,10 @@


  SVC_PERROR(ena_tex());
  while (1) {
+                if (tskno == 1) {
+                    toggle_led();
+                }
+
  syslog(LOG_NOTICE, "task%d is running (%03d).   %s",
  tskno, ++n, graph[tskno-1]);
  for (i = 0; i < task_loop; i++);
Index: sample1/util.h
===================================================================
--- sample1/util.h (revision 0)
+++ sample1/util.h (revision 0)
@@ -0,0 +1,6 @@
+#ifndef UTIL_H
+#define UTIL_H
+
+void toggle_led(void);
+
+#endif
Index: sample1/Makefile
===================================================================
--- sample1/Makefile (revision 1)
+++ sample1/Makefile (working copy)
@@ -130,7 +130,7 @@
 #
 #  共通コンパイルオプションの定義
 #
-COPTS := $(COPTS) -g
+COPTS := $(COPTS) -g -D__NEWLIB__
 ifndef OMIT_WARNING_ALL
   COPTS := $(COPTS) -Wall
 endif
@@ -156,7 +156,7 @@
   APPL_CXXOBJS = $(APPLNAME).o
   APPL_COBJS =
 else
-  APPL_COBJS = $(APPLNAME).o
+  APPL_COBJS = $(APPLNAME).o util.o
 endif
 APPL_CFLAGS =
 APPL_LIBS =
Index: sample1/util.c
===================================================================
--- sample1/util.c (revision 0)
+++ sample1/util.c (revision 0)
@@ -0,0 +1,10 @@
+
+#include "LPC17xx.h"
+
+void toggle_led(void)
+{
+    uint32_t s = LPC_GPIO0->FIOPIN;
+    LPC_GPIO0->FIOCLR = s & (1 << 22);
+    LPC_GPIO0->FIOSET = ((~s) & (1 << 22));
+}
+
Index: asp/target/lpc1768_generic_gcc/target_config.c
===================================================================
--- asp/target/lpc1768_generic_gcc/target_config.c (revision 1)
+++ asp/target/lpc1768_generic_gcc/target_config.c (working copy)
@@ -114,6 +114,12 @@
  *  バナー出力用のシリアル初期化
  */
  target_uart_init(SIO_PORTID);
+
+        /*
+         * P0[22] on LPCXpresso LPC1768 is LED.
+         */
+        LPC_PINCON->PINSEL1 &= (~(3 << 12));
+        LPC_GPIO0->FIODIR |= (1 << 22);
 }






上記手順で得られる生成物はasp.hexです。
LPCXpressoで書き込めるのはbinとaxfですので、ここではasp.hexからasp.binを生成します。
これはmake asp.binをするだけで良いです。


後は書き込んで試してみましょう。


0 件のコメント:

コメントを投稿