Hatena::ブログ(Diary)

滴了庵日録 このページをアンテナに追加 RSSフィード

2013/09/30(Mon)

GR-SAKURAのMakefile

以前、CygwinとGCCを使ったGR-SAKURAのローカルビルド環境について書きましたが、その後、Webコンパイラの仕様が変わってしまい、Makefileをダウンロードできなくなったようです。そこで、Makefileの一例をここに示しておきます。適宜、必要な項目を追記して使用してください。


ダウンロード

OBJFILES = ./common.o ./gr_sketch.o ./gr_common/intvect.o ./gr_common/lowlevel.o 
LIBFILES = ./gr_common/lib/libc.a ./gr_common/lib/libg.a ./gr_common/lib/libgcc.a ./gr_common/lib/libm.a ./gr_common/lib/librxduino.a ./gr_common/lib/libsim.a ./gr_common/lib/libstdc++.a ./gr_common/lib/libsupc++.a ./gr_common/lib/libtkdnhal.a ./gr_common/lib/libtkdnip.a ./gr_sakura_servo/libservo.a 
CCINC = -I./gr_build -I./gr_common -I./gr_common/include -I./gr_common/include/rxduino -I./gr_common/include/tkdnhal -I./gr_common/lib -I./gr_sakura_servo 
CPPINC = -I./gr_build -I./gr_common -I./gr_common/include -I./gr_common/include/rxduino -I./gr_common/include/tkdnhal -I./gr_common/lib -I./gr_sakura_servo 
TARGET = sketch
CC  = $(CCPATH)rx-elf-gcc -Wall -g -O2 $(CCINC)
CPP = $(CCPATH)rx-elf-gcc -Wall -g -O2 $(CPPINC)
AS  = $(CCPATH)rx-elf-as 
LNK = $(CCPATH)rx-elf-ld
#CNV = $(CCPATH)rx-elf-objcopy --srec-forceS3 --srec-len 32 -O srec
CNV = $(CCPATH)rx-elf-objcopy -O binary
DMP = $(CCPATH)rx-elf-objdump
OBJS = ./gr_common/gstart.o $(OBJFILES) $(LIBFILES) 
LFLAGS = -L./gr_common/lib/ -lrxduino -lstdc++ -lsupc++ -lc -lsim -lgcc -lm -ltkdnhal -nostartfiles
MAKEFILE = makefile
ROMSCRIPT=./gr_common/gr_sakura.gsi

make = make --no-print-directory 

all:	rom

rom:	$(OBJS) $(MAKEFILE) $(ROMSCRIPT)
	$(LNK) -Map ./gr_build/$(TARGET).map $(OBJS) -T $(ROMSCRIPT) $(LFLAGS) -o $(TARGET).elf
	$(CNV) $(TARGET).elf  $(TARGET).bin
	rm -f *.o
	rm -f $(TARGET).elf

#gstart.o:	gstart.s
#	$(AS) -o gstart.o gstart.s

.c.o:
	$(CC) $(CFLAGS) -c $< -o $@

.cpp.o:
	$(CPP) $(CFLAGS) -c $< -o $@

2013/09/29(Sun)

王寺の明神山

今日は王寺の明神山に登ってきました。大阪柏原市との県境にある山で、遊歩道が整備されてるのでけっこうウォーキングしてる人たちがいました。


山頂はちょっとした展望台になっています。西を眺めると霞のむこうに大阪の高層ビルが見えます。写真では分かりにくいですが、六甲山系らしき山影も見えます。天気が良ければ明石海峡大橋まで見えるらしいです。

明神山から西を見る


反対の東を眺めると、奈良盆地が一望できます。こうして見ると奈良は山々に囲まれた国。ヤマトタケルの歌に「大和は国のまほろば たたなづく青垣山ごもれる大和しうるわし」とあるとおりです。

明神山から東を見る


明神山のおはなし


明神山は王寺町の西端で、奈良と大阪との府県境にある山で標高は、273.7mで眺めも良く、奈良盆地や明石海峡大橋が見える見通しの良いところである。昔は大阪堂島の米相場の旗振りもこの山頂辺りで行われていた。

大字畠田の明神山の太神宮(だいじんぐう)さんは、文政13年に大日霊女尊(おおひるめのみこと)をまつり、四国阿波(徳島県)方面からも多くの人がお詣りされ大いに賑わった。内宮(送迎(ひるめ)太神宮)も外宮(亀山太神宮)も宇治橋までもがあった。遠くから伊勢の皇太神宮へお詣りするときはこの峠を必ず通るので、ここが大和の皇太神宮で本家本元であるともいわれ、太神宮さんの御神符を授与して帰らせた。長旅で疲れた人々は、ここだけお詣りして帰って行った。昔は、道中にナツメ茶屋やシンコ茶屋、オーコ茶屋という茶屋があったらしい。

また、片岡氏が一時ここに城を築いたが、松永弾正久秀に焼き払われたといわれている。

この山に白狐が二匹いて、ある時、関屋の甚九郎という人が、白狐を一匹射ち取った。残りの一匹は東に逃れて罐子山 (天理市目堂町付近)にかくれ住んだらしい。

ある日、郡山藩主が馬に乗ってきて、これはニセの皇太神宮だと言って、郡山藩では命令を出して太神宮をこわしてしまったという話がある。太神宮さんの社は三間(約5.4m)に七間(12.6m)の拝殿で、火幡(ほばた)神社(畠田5丁目)に移された。灯籠も同社に移された。銘に「大日霊(おおひみたま)神社 和州雲門山(くどかどやま)太神宮」とある。罐子※1は畠田村の戸田氏が所蔵し、茶釜は三角(みかど)の妙見堂にある。太神宮さんの世話役が、毎日賽銭を「カマス※2」に、四、五杯入れて家に持ち帰ったといわれる。村人は、明神山の上まで行くのが遠いので、 出先の宮を字おどり場(畠田地区の字名)につくった。今でも十月二十二日にここでお祭りが行われている。

太神宮跡には、今は水神さんがまつられていて、現在でも八朔(はっさく)といって9月1日には、多くの住民が参詣しておられます。


※1 水注ぎの道具

※2 わらムシロを二つ折りにして作った袋。穀物、塩、肥料などを入れる袋として使われていた。


奈良県史・王寺町史より

2013/09/28(Sat)

信貴山朝護孫子寺

20年ぶりに信貴山に登ってきました。


近鉄信貴山下駅からまっすぐに上る道を自転車を押して登っていきます。振り返ると王寺の町が見えます。

信貴山から


さらにどんどん登っていきます。振り返ると奈良盆地が一望できます。

信貴山から


そしてようやく辿り着いた信貴山朝護孫子寺の本堂からの眺め。下界が遠いです。

信貴山から


こちらがその朝護孫子寺の本堂。なんか山上の砦っていう感じですね。

信貴山から


本堂の中からは朗々と大般若経を唱える声が聞こえます。で、本堂の下の真っ暗闇の回廊を手探りでまわる戒壇巡りをしてきました。灯りが無いので本当に何も見えません。右手を右壁に添えて進みます。途中、一か所だけ小さな仏像が光ってるところがあります。そのあとの角を曲がって進むと、灯りは全く無いけど扉らしきものがあるのが手探りで分かります。ここには錠前がかかっていて、この錠前に触ると願い事が叶うといわれています。もちろん僕はそんなことは信じませんが、平安時代覚鑁上人が納めた宝珠がこの扉の奥に祀られているのだそうで、歴史のロマンに触れた気がしました。


帰り道。1983年までケーブルカーが通っていた廃線跡の山道(中腹より上が残ってる)をマウンテンパイクで下りました。怖い怖い。20年前はここをママチャリで下ったはずなんですけど。いい年してやることじゃないですね。あとは舗装された道路を一気に信貴山下駅まで駆け下りました。気持ちいい!

信貴山から

2013/09/27(Fri)

GR-SAKURAでIRQ

GR-SAKURA(というかRXduino)では、外部割り込みIRQ0〜IRQ7の処理はライブラリの中に隠蔽されていて、ライブラリ関数を用いて割り込み処理関数を登録するんですね。そして、IRQ0〜IRQ7はポートP10〜P17に割り当てられています。TQFP100ピンにはP10とP11は存在しないので、GR-SAKURAで利用できるのは、IRQ2〜IRQ7(P12〜P17)です。これらのピンはArduino互換コネクタにはなく、拡張コネクタCN10にあります。


毎度思うことですが、隠蔽されたライブラリの中でどのようなリソースがどう使われているか不透明なうえに、都合が悪くてもいじれない(orいじりにくい)のが、GR-SAKURAのモヤっとするところですね。まあ、本来は商用であるRXduinoライブラリおよび特電HALライブラリを特別に無償で使わせてもらってるわけなので、文句を言うのは筋違いなのは承知してますけど。


それはさておき、FM音源チップYM2203の~IRQを、GR-SAKURAのIRQ5(P15)に接続して割り込み処理をするひな形を作成しました。P15の立ち下がりで割り込みがかかることは動作確認OKです。

#include "rxduino.h"

/**
 * YM2203のIRQ割り込み処理
 */
void YM2203_irqHandler(void)
{
    ; // TODO ここに処理を書く
}

/**
 * 初期設定
 */
void setup()
{
    // IRQ5(P15)の立ち下がりエッジ割り込みにハンドラを登録
    attachInterrupt(5, YM2203_irqHandler, FALLING);
}

2013/09/26(Thu)

RXマイコンのMTU

GR-SAKURAからFM音源チップにマスタークロックを供給するため、RXマイコンのタイマを使って4MHzのパルスを生成することにしました。じつは今までGR-SAKURAはRXduinoライブラリと特電HALライブラリでしか使ったことがなかったのですが、ハードウェアマニュアルを読んでみるとRXマイコンのタイマ(MTU)ってSHのとほぼ同じものですね。これならすぐ使えるわ!と思ってサクサクっと組んでみたら…動かない。

(´・ω・`)ショボーン


どうも、RXは周辺機能をつかうまえに MSTP( MTU3 ) = 0; みたいにモジュールストップ解除をしないと、レジスタへのアクセス自体もできないらしい。まあ、消費電力を抑えるために各ペリフェラルごとに有効/無効できるのは良いことですね。ちなみに、割り込みレベルの設定と割り込み有効化も、IPR(MTU3,TGIA3) = 6; IEN(MTU3,TGIA3) = 1; みたいにするらしい。これらはいずれも実体はレジスタのビットフィールドだけどマクロが用意されているので使った方が見やすいですね。


あと、RXは多重化されてるピン機能の選択をするレジスタがちょっとややこしいかな。SHはPFCで一元管理されてて分かりやすかったのに…


で、めでたく4MHzのパルスの出力に成功

4MHzクロックの波形

void mtu_init(void)
{
    /* PC7をMTIOC3Aに設定 */
    MPC.PWPR.BIT.B0WI = 0;      // ピン機能選択の
    MPC.PWPR.BIT.PFSWE = 1;     //  プロテクト解除
    MPC.PC7PFS.BIT.PSEL = 0x01; // PC7をMTIOC3Aに設
    MPC.PWPR.BIT.PFSWE = 0;     // ピン機能選択の
    MPC.PWPR.BIT.B0WI = 1;      //  プロテクト設定
    PORTC.PMR.BIT.B7 = 1;       // PC7は周辺機能として使用

    SYSTEM.PRCR.WORD = 0xA502;  // プロテクト解除
    MSTP(MTU) = 0;              // MTU (MTU0〜MTU5)のストップ状態解除
    SYSTEM.PRCR.WORD = 0xA500;  // プロテクト設定
    
    /* MTU3のTCNT動作停止 */
    MTU.TSTR.BIT.CST3 = 0;

    /* TCNTクリア */
    MTU3.TCNT = 0x0000;

    /* カウンタクロックとカウンタクリア要因の設定 */
    // GR-SAKURAでは、外部発振子 12MHz, 
    // PLLCR.STC=16(16逓倍), PLLCR.PLIDIV=0(1分周), SCKCR.PCKB=2(4分周)
    // より、MTUのPCLKは 12*16/4 = 48MHz
    MTU3.TCR.BIT.TPSC = 0;  // カウンタクロック: PCLK/1 = 48MHz
    MTU3.TCR.BIT.CKEG = 0;  // 立ち上がりエッジでカウント
    MTU3.TCR.BIT.CCLR = 1;  // TGRAのコンペアマッチでTCNTクリア

    /* PWMモード1 */
    MTU3.TMDR.BYTE = 0x02;
    
    /* 波形出力レベルの選択 */
    MTU3.TIORH.BIT.IOA = 1; // 初期状態で0出力 周期コンペアマッチで0出力
    MTU3.TIORH.BIT.IOB = 2; // デューティコンペアマッチで1出力

    /* 周期とデューティーの設定 */
    MTU3.TGRA = 11;         // 周期 1/4MHz = 250ns  (48MHz/12 =4MHz)
    MTU3.TGRB = 5;          // デューティー  125ns
    
    /* MTU3のTCNT動作開始 */
    MTU.TSTR.BIT.CST3 = 1;
}

2013/09/24(Tue)

HEWの設定

よく忘れるのでメモ。

自動的にターゲットに接続しない

プロジェクトを開くたびにターゲットに接続しに行くのはウザいので、接続しないようにします。

[デバッグ]>[デバッグの設定]>[オプション]タブ

「自動的にターゲットを接続しない」にチェック

2013/09/19(Thu)

GR-SAKURAで外部バス

GR-SAKURA用FM音源シールドのための設計メモ。


ヤマハFM音源YM2203との接続には、外部メモリバスが必要。

  • データバス8ビット
  • アドレスバス1ビット
  • RD#,WR#,CS#

GR-SAKURAのArduino互換コネクタと拡張コネクタで外部メモリバスに出ている外部メモリバスのピンは以下のとおり。

  • D0-D7 (PD0-PD7) ... CN12(拡張)
  • D8-D15 (PE0-PE7) ... CN11(拡張)
  • A16-A19 (PC0-PC3) ... CN9,7(拡張,Arduino)
  • RD# (P52) ... CN9(拡張)
  • WR# (P50) ... CN9(拡張)
  • CS0#-CS3# (PC7-PC4) ... CN7(Arduino)
  • CS4#-CS5# (P24-P25) ... CN8(Arduino)

そこで、次のピンを使うことにする。

  • D0-D7 (PD0-PD7) ... CN12(拡張)
  • A16(PC0) ... CN9(拡張)
  • RD# (P52) ... CN9(拡張)
  • WR# (P50) ... CN9(拡張)
  • CS3# (PC4) ... CN7(Arduino)

拡張コネクタCN12とCN9はArduino互換コネクタのすぐ内側にある。スイッチサイエンスArduino用バニラシールド基板は、パターンカットさえすればちょうど良い位置にランドがある。よく似ているが、サンハヤトArduino用ユニバーサル基板は、ランドの位置がずれているので使えない。

GR-SAKURAシールド


ペリフェラルの設定は下記のように。(未検証)

// YM2203のステータスを読む
#define YM2203_STATUS   (*(volatile unsigned char*)0x05000000) // CS3,A16=0
// YM2203のレジスタアドレスを書く
#define YM2203_REG_ADDR (*(volatile unsigned char*)0x05000000) // CS3,A16=0
// YM2203のレジスタ値を読む/書く
#define YM2203_REG_DATA (*(volatile unsigned char*)0x05010000) // CS3,A16=1

    SYSTEM.SYSCR0.WORD = 0x5a03;  //外部バス有効

    MPC.PWPR.BIT.B0WI = 0;        //端子機能制御レジスタの
    MPC.PWPR.BIT.PFSWE = 1;       //プロテクト解除

    MPC.PFCSE.BIT.CS3E = 1;       //CS3有効
    MPC.PFCSS0.BIT.CS3S = 2;      //PC4=CS3
    MPC.PFAOE1.BIT.A16E = 1;      //A16有効
    MPC.PFBCR0.BYTE = 0;          //8ビットバス, PCxにアドレス

    BSC.CS3CR.WORD = 0x0001 | (2 << 4);  // 8ビットバス
/*
    // TODO なにこれ?
    BSC.CS3MOD.WORD = 0x8001;
    BSC.CS3WCR1.LONG = 0x03030303;
    BSC.CS3WCR2.LONG = 0x11110111;
    BSC.CS3REC.WORD = 0x0000;
*/

【参考】

GR-SAKURAで外部バスを利用する | Ryusendo info.

GR-SAKURA用ソフトウェアとシールド

2013/09/12(Thu)

SketchUp

3次元モデリングソフトのSketchUpの無償版をインストールしてみました。こちらからダウンロードできます。こっち方面の経験はゼロなんですが、操作がわりと直観的で分かりやすいですね。おもに建築分野の人たちが使っているようです。3Dギャラリーにて世界中のモデル作成者がモデルを公開されています。

chi-koさんが公開されている法隆寺の3Dモデルを使って、中学生時代の妄想「宇宙戦艦法隆寺」をCG化してみました。(伽藍配置をホワイトベースぽくしただけのやっつけ仕事ですけど。)

宇宙戦艦法隆寺CG


中学生のころ描いたラクガキがこれ。

宇宙戦艦法隆寺ラクガキ

2013/09/11(Wed)

シェルの宗派と環境変数

あまり本格的なシェルスクリプトは書いたことないので、bash(bourneシェル系)とtcsh(Cシェル系)の宗教戦争とかよく分かりませんが、むかしSolarisからLinuxに移ったときに戸惑ったのが、環境変数の設定コマンドでした。ついでに言うとDOSだとまた違うのでややこしいです。特に展開するときパーセント記号で囲むとか。


sh/bashの場合

$ export HOGE=1234567890
$ echo $HOGE
1234567890
$ printenv HOGE
1234567890

csh/tcshの場合

> setenv HOGE 1234567890
> echo $HOGE
1234567890
> printenv HOGE
1234567890

DOSの場合

> set HOGE=1234567890
> echo %HOGE%
1234567890
> printenv HOGE
1234567890


またシェル変数に関してもbashとtcshでは異なります。DOSにはそもそも環境変数とシェル変数という区別がありませんね。


sh/bashの場合

$ PIYO=ABCDEFG
$ echo $PIYO
ABCDEFG
$ export PIYO ←これによってシェル変数を環境変数として設定する

csh/tcshの場合

> set PIYO=ABCDEFG
> setenv PIYO HIJKLMN ←シェル変数と環境変数は別物
> echo $PIYO
ABCDEFG
> printenv PIYO
HIJKLMN

2013/09/09(Mon)

gFTP

Webベースのクラウドサービスが発達したおかげで近頃ではFTPクライアントを使う機会はめっきり少なくなりましたね。Windows用のFTPクライアントは、Windows95の昔からFFFTPを愛用してきました。UIがシンプルで分かりやすいです。Linux用はというと、gFTPですかね。画面構成がFFFTPと基本的に同じ3ペイン構成で、シンプルなUIなのでとっつきやすいです。Ubuntuなら下記のコマンドでインストールできます。

sudo apt-get install gftp

起動は、下記のコマンドか、[アプリケーション]>[インターネット]>[gFTP]から。

gftp &

画面はこんなかんじ↓

gFTP

2013/09/06(Fri)

GNOME端末

GNOME端末をタブ化できるということを今ごろ知った。

(´・ω・`) え? もうGNOMEなんか使ってないって? Unity? なにそれ?

GNOME端末

2013/09/05(Thu)

不要なCOMポートの削除

電子工作でFTDIのUSBシリアルとか使ってると、WindowsのCOMポート番号がどんどん増えていきます。ところが、デバイスマネージャには現在接続されていないデバイスは表示されないので、要らなくなったCOMポート番号を削除することができません。そういうときはコマンドプロンプトで下記のようにして、現在接続されていないデバイスも表示させるようにします。

set devmgr_show_nonpresent_devices=1
devmgmt.msc

デバイスマネージャが立ち上がったら、「表示」→「非表示のデバイスの表示」を選択します。そして、「ポート(COMとLPT)」から不要なデバイスを選択し右クリックメニューから「削除」します。

2013/09/04(Wed)

LPCマイコンボードいろいろ

LPCマイコンのボードと開発環境とデバッガ、いろいろありすぎてややこしいですね。

nxpfanさんのノート「デバッガと開発環境の対応」にそのへんのこと簡単にまとめられています。

自分もあちこちの通販サイトを巡って調べたので下の表にまとめました。ただし、上記のノートにもあるように、デバッガを自分で別途用意するならもちろん開発環境の選択肢はこの限りではありません。


※ 漏れや間違いがあるかも。詳細は各自で確認してください。


ボード デバッガ IDE 入手先 マイコン
mbed 無し(USBメモリ式) または
オンボード(CMSIS-DAP)
オンライン または
uVision
秋マ共
苺千
1768,11U24
LPCXpresso オンボード(LPC-Link) LPCXpresso IDE 秋マ 1769(1768),
1347/1343,1227,
11U14,11C24,
1115/1114,
1104,812
Android Open
Accessory Kit
無し(LPC-Link推奨) LPCXpresso IDE 1769,11C24
LPC1343
QuickStart Board
無し(LPC-Link推奨) LPCXpresso IDE 1343
LPCカプチーノ 無し(USBメモリ式) LPCXpresso IDE 苺千 11U37
VS-WRC103LV
(ロボット用)
無し(USBメモリ式) LPCXpresso IDE 1343
Xplorer 無し
(ULINK-ME付属版あり)
不定
(ULINK-MEならuVision)
秋マ 1830/1837,
4330/4337
BlueBoard 無し 不定 1768,2148
mX-LPC オンボード CooCox CoIDE 1114,2148

秋=秋月、マ=マルツ、共=共立、苺=ストロベリーリナックス、千=千石


  • mbedはさすがに大人気。オンボードのmbedチップのファームウェアを更新するとCMSIS-DAPデバッガとなり、Keil uVisionでの開発ができるらしい。(LPCXpresso IDEにも対応してほしいなぁ。)
  • LPCXpressoシリーズはチップのラインナップが豊富。安価でオンボードデバッガを利用できる。開発環境はLPCXpresso IDEになります。
  • そのほか、マニュアルやサンプルコードがLPCXpresso IDEでの開発を前提としているボードはたくさんあります。
  • mX-LPCは曲者で、基板の見た目がLPCXpressoに酷似しており、ともに秋月で売ってますが、こちらはCooCox CoIDEというちょっとマイナーな開発環境用のオンボードデバッガ搭載なので注意が必要です。


LPC-Link2


で、興味深いのがLPC-Link2というデバッガボード。ファームウェアを書き換えることで、Redlink(LPC-Link)にもJ-LinkにもCMSIS-DAPにもなり、それによってLPCXpressoにもIAR EWにもKeil uVisionにも対応できるというスグレモノらしいです。

  • Redlink(LPC-Link)として ... LPCXpressoで使用できる。
  • J-Linkとして ... IAR EWで使用できる。
  • CMSIS-DAPとして ... Keil uVisionで使用できる。

秋月マルツで売ってます。2100円と安価なので今度買って試してみようかな。

2013/09/02(Mon)

ICのパッケージ

組み込み系でよくあるICのパッケージの名前まとめ。

DIP 2列の挿入タイプ
SOP 2列の表面実装タイプ
SOJ 2列の表面実装の巻き爪タイプ
SON (DFN) 2列の表面実装のリード無しタイプ
QFP 正方形の表面実装タイプ
QFJ (PLCC) 正方形の表面実装の巻き爪タイプ
QFN 正方形の表面実装のリード無しタイプ
BGA 半田ボールタイプ

ややこしいのは、これにいろいろ接頭辞がつくやつ。

TSOP=薄いSOP、TSSOP=薄くて幅の狭いSOP など。

QFNは薄さの等級が細かく分かれているようで、

LQFN > TQFN > VQFN > WQFN > UQFN > XQFN らしい。

さらにHがつくとヒートシンクつき。たとえば HVQFN など。

ヒートシンクって底面の放熱パッドのことかな? でも底面に放熱パッドのないQFNなんてあるの?