FPLの設定を変えることで書き込み時間を短縮できることがわかりました。メニューのDevice → Setup (もしくはメニューアイコンのレンチのアイコン)で、フラッシュに書く領域を指定できます。デフォルトはChipになっていて、たぶんChip全体に書き込む設定のようです。Blockに変えてStartとEndを指定してやれば、指定したブロックにしか書き込まないようです。Show Addressをチェックするとブロック単位でなくアドレス単位で選択できるようになります。対応関係からすると1ブロックは28kバイトということになります。
秋月電子で売っているキャラクタLCDに文字を出力してみました。元ネタはHamayanさんのblogのココです。
入出力ポートはどれにしようか迷いましたが連番でとりやすいP9にしました。本当は5V耐圧ということなので5V系で直結できるはずなのですが、怖いので3.3V系にしています。コントラストだけは5V近く必要なので、Hamayanさんの回路図をパクってLTC1144で負電圧を作っています。4.5Vちょいくらいがちょうどいいコントラストでした。
電源投入直後に必要なwaitは3.3Vのせいか15ミリ秒では足りないようです。多い分には問題ないので、100ミリ秒くらい待っています。もっと少なくてもよいかもしれません。
V850用のNECのコンパイラはポートの名前とかを宣言しなくても使えるので便利です。P9Lの最下位bitを0にするにはP9L.0 = 0;のように書きます。ポート名は小文字のp9lだと受け付けてくれません。8bitのポートだとP3.5みたいな書き方ができますがP9のような16bitのポートの場合は上位8bitのP9Hか下位8bitのP9Lに対してしかビット操作ができません。P9H.0 = 1;はset1 0x1, P9Hの1命令にコンパイルされています。
デバッガー(ID850QB-MON)を使うときはJ2とJ3をジャンパーしたままにしないといけないようです。FPLのときはJ3はpushボタンでもよかったのとは違っています。
「F0c34: オンチップ・デバッグで使用する予約領域への書き込みはできません。」というエラーがおきてデバッガーにはいれないことがありました。ソースをちょこちょこ直すと怒られなくなることもあるけど、原因はよくわかりません。
ソースもほとんどパクりです。一応、勉強のためにHamayanさんのソースを元にゼロからリライトしました。
4/8 追記ネタ元のHamayanさんのblogへのトラックバックを追加
入出力ポートはどれにしようか迷いましたが連番でとりやすいP9にしました。本当は5V耐圧ということなので5V系で直結できるはずなのですが、怖いので3.3V系にしています。コントラストだけは5V近く必要なので、Hamayanさんの回路図をパクってLTC1144で負電圧を作っています。4.5Vちょいくらいがちょうどいいコントラストでした。
電源投入直後に必要なwaitは3.3Vのせいか15ミリ秒では足りないようです。多い分には問題ないので、100ミリ秒くらい待っています。もっと少なくてもよいかもしれません。
V850用のNECのコンパイラはポートの名前とかを宣言しなくても使えるので便利です。P9Lの最下位bitを0にするにはP9L.0 = 0;のように書きます。ポート名は小文字のp9lだと受け付けてくれません。8bitのポートだとP3.5みたいな書き方ができますがP9のような16bitのポートの場合は上位8bitのP9Hか下位8bitのP9Lに対してしかビット操作ができません。P9H.0 = 1;はset1 0x1, P9Hの1命令にコンパイルされています。
デバッガー(ID850QB-MON)を使うときはJ2とJ3をジャンパーしたままにしないといけないようです。FPLのときはJ3はpushボタンでもよかったのとは違っています。
「F0c34: オンチップ・デバッグで使用する予約領域への書き込みはできません。」というエラーがおきてデバッガーにはいれないことがありました。ソースをちょこちょこ直すと怒られなくなることもあるけど、原因はよくわかりません。
ソースもほとんどパクりです。一応、勉強のためにHamayanさんのソースを元にゼロからリライトしました。
/* * 秋月LCD SC1602BS*Bを使ってみる by Sim * original by Hamayan * * pin接続 * LCD P1 Vcc --- 3.3V * LCD P2 GND --- GND * LCD P3 Vo ---- -1.6V * LCD P4 RS ---- P99 CON1 10pin * LCD P5 RW ---- GND * LCD P6 E ----- P98 CON1 9pin * LCD P7 D0 ---- NC * LCD P8 D1 ---- NC * LCD P9 D2 ---- NC * LCD P10 D3 ---- NC * LCD P11 D4 ---- P90 CON1 1pin * LCD P12 D5 ---- P91 CON1 2pin * LCD P13 D6 ---- P92 CON1 3pin * LCD P14 D7 ---- P93 CON1 4pin */ #pragma ioreg #define setE() P9H.0 = 1 #define clrE() P9H.0 = 0 #define cmd_mode() P9H.1 = 0 // RS = 0 #define data_mode() P9H.1 = 1 // RS = 1 #define setD(x) P9L = x // nミリ秒待つ void ms_wait(int n) { int i; n <<= 11; // 実測だと1700くらいで1msだった
for(i = 0; i < n; i++) __nop(); } // 4bit送る void send4bit(unsigned char c) { setE(); setD(c); clrE(); } // 8bit送る void send(unsigned char c) { send4bit(c >> 4); send4bit(c); ms_wait(1); } // LCD初期化 void lcd_init(void) { cmd_mode(); clrE(); ms_wait(100); // 15ms待つ send4bit(3); // function set 8bit mode ms_wait(5); // 4.1ms以上待つ send4bit(3); // function set 8bit mode ms_wait(1); // 100us以上待つ send4bit(3); // function set 8bit mode ms_wait(1); // 40us以上待つ send4bit(2); // function set 4bit mode ms_wait(1); // 40us以上待つ send(0x08); // display off send(0x28); // function set 4bit 2line send(0x06); // entry mode send(0x01); // display clear (1.64ms) ms_wait(1); send(0x02); // cursor at home (1.64ms) ms_wait(1); send(0x0c); // display on } // はじまりはじまり void main( void ) { static const char msg[] = "モウスグDOSガウゴキソウデス"; // (C) by Hamayan int i; // CPU初期化 VSWC = 1; WDTM2 = 0; __asm("mov 0x00, r11"); __asm("st.b r11, PRCMD"); __asm("st.b r11, PCC"); while( LOCK ); SELPLL = 1; // I/O初期化 PM9 = 0xfcf0; // P90~P93, P98,P99を出力に指定 PMC9 = 0; // P9は全部ポート PF9 = 0; // P9はCMOS出力 // LCD初期化 lcd_init(); // メッセージ出力 data_mode(); for(i = 0; msg[i] != '�'; i++){ if(i == 16){ cmd_mode(); send(0xc0); // 2行目に移動 data_mode(); } send(msg[i]); } // LEDポート 初期化 PMCT.6 = 0; // 点滅 while(1){ ms_wait(100); PCT.6 ^= 1; } }
4/8 追記ネタ元のHamayanさんのblogへのトラックバックを追加
J1とJ2は結局FLMD0(フラッシュモード0?)につながっているようだ。J1をつないだときは1に固定で、J2をつないだときはDTR信号でソフト制御できるということのようだ。デバッガは最初書き込んで、後は普通のモードに入るってことみたい。
リセット直後のJ2の2pinは3.3Vだったので、試しにJ2をショートした状態でリセットしてから、FPLを動かしてみると普通に書き込めた。J1ってもしかするといらない子?
とりあえず、J1とJ2の1pinはショートしてるので、トグルスイッチにするときは配線が一本減ることが分かった。
リセット直後のJ2の2pinは3.3Vだったので、試しにJ2をショートした状態でリセットしてから、FPLを動かしてみると普通に書き込めた。J1ってもしかするといらない子?
とりあえず、J1とJ2の1pinはショートしてるので、トグルスイッチにするときは配線が一本減ることが分かった。
部品の通販状況を調べてみた。調べたのはUSBコネクタと水晶発振子だけ。
秋月電子 USBコネクタ
千石電商 水晶発振子
マルツパーツ館 USBコネクタ
サトー電気 USBコネクタ(コネクタのページ) 水晶発振子(コイル,フィルタのページ)
共立電子の店エレショップ 水晶発振子
若松通商 水晶発振子 USBコネクタ
ストロベリー・リナックス USBコネクタ
※秋月は店頭だと水晶発振子が買える。通販はないみたい
※たしか以前、千石電商でUSBコネクタを店頭で見かけたおぼえがある(うろおぼえ)
※鈴商は店頭でどちらも売っている
※あくまで4/4調べ。知ってるとこだけ
秋葉原だと、わりと見かける部品なんだけど、通販だと意外とまとまってるところがない。両方扱っているのはサトー電気と若松通商の二つ。
4/22 追記 若松通商さんで部品キットの通販がはじまっています。1584円です。
秋月電子 USBコネクタ
千石電商 水晶発振子
マルツパーツ館 USBコネクタ
サトー電気 USBコネクタ(コネクタのページ) 水晶発振子(コイル,フィルタのページ)
共立電子の店エレショップ 水晶発振子
若松通商 水晶発振子 USBコネクタ
ストロベリー・リナックス USBコネクタ
※秋月は店頭だと水晶発振子が買える。通販はないみたい
※たしか以前、千石電商でUSBコネクタを店頭で見かけたおぼえがある(うろおぼえ)
※鈴商は店頭でどちらも売っている
※あくまで4/4調べ。知ってるとこだけ
秋葉原だと、わりと見かける部品なんだけど、通販だと意外とまとまってるところがない。両方扱っているのはサトー電気と若松通商の二つ。
4/22 追記 若松通商さんで部品キットの通販がはじまっています。1584円です。
LEDちかちかのサンプルを書き込んでみたりしてました。で、思ったこと
- 書き込みが遅い
- ジャンパーピンの抜き差しがめんどくさい
- USBコネクタの抜き差しは嫌
書き込みが遅いのはID850QB-MONというデバッガーを使うと少しましな気がする。
足はオスにしようかメスにしようか迷ったけど、メスの方が値段が高いのでメスにしてしまった。どうせブレッドボードで遊ぶんだし、上向きにつければよかったかな
※※以下は本当に正しいかどうか分かりません。最悪デバイスを壊すかもしれません※※
ジャンパーの抜き差しのときに気づいたのがJ3はリセットっぽいということ。それと、J1やJ2は動作中につけたりはずしたりしても影響ないみたい。リセットしたときにJ1やJ2の情報を読み込んで書き込みモードやデバッグモードになってるのではないだろうか?
写真のようにタクトスイッチを並べたブレッドボードにつないで実験してみた。押しやすいように手前をJ3にした。
- J3のボタンを押しっぱなしにしているときはプログラムは止まっている
- J3のボタンをはなすと、プログラムは動きはじめる
USBコネクタの抜き差しをしなくてもリセットボタンとして使えそう。以下、J3のボタンを押してはなすのを「リセットする」ということにする。
- リセットしてから、FPLで書き込みをしてみる。
「Please Setup The Device」というメッセージボックスが出て怒られる。
- J1のボタンを押したままリセットして、J1のボタンをはなす。
Signature Readはできるが、書き込みはできない。J1をチェックしているのはリセット時だけではないようだ。
- J1をトグルスイッチに変えてみる
今度はうまく書き込みもできた。リセットするとプログラムも動いた。J2は試してないけど、たぶん同じっぽい(後で試してみます)。ON-OFF-ONの3状態トグルスイッチがあれば、スイッチ2つで、V850の全モードに対応できそう。壊すかもしれないけど、USBコネクタ抜き差しの方がよっぽどいやだ。リセットボタンつけてほしかったなあ。
4/8 追記 デバッガ使用時はJ2とJ3をショートしたままにしないといけない
- 書き込みが遅い
- ジャンパーピンの抜き差しがめんどくさい
- USBコネクタの抜き差しは嫌
書き込みが遅いのはID850QB-MONというデバッガーを使うと少しましな気がする。
足はオスにしようかメスにしようか迷ったけど、メスの方が値段が高いのでメスにしてしまった。どうせブレッドボードで遊ぶんだし、上向きにつければよかったかな
※※以下は本当に正しいかどうか分かりません。最悪デバイスを壊すかもしれません※※
ジャンパーの抜き差しのときに気づいたのがJ3はリセットっぽいということ。それと、J1やJ2は動作中につけたりはずしたりしても影響ないみたい。リセットしたときにJ1やJ2の情報を読み込んで書き込みモードやデバッグモードになってるのではないだろうか?
写真のようにタクトスイッチを並べたブレッドボードにつないで実験してみた。押しやすいように手前をJ3にした。
- J3のボタンを押しっぱなしにしているときはプログラムは止まっている
- J3のボタンをはなすと、プログラムは動きはじめる
USBコネクタの抜き差しをしなくてもリセットボタンとして使えそう。以下、J3のボタンを押してはなすのを「リセットする」ということにする。
- リセットしてから、FPLで書き込みをしてみる。
「Please Setup The Device」というメッセージボックスが出て怒られる。
- J1のボタンを押したままリセットして、J1のボタンをはなす。
Signature Readはできるが、書き込みはできない。J1をチェックしているのはリセット時だけではないようだ。
- J1をトグルスイッチに変えてみる
今度はうまく書き込みもできた。リセットするとプログラムも動いた。J2は試してないけど、たぶん同じっぽい(後で試してみます)。ON-OFF-ONの3状態トグルスイッチがあれば、スイッチ2つで、V850の全モードに対応できそう。壊すかもしれないけど、USBコネクタ抜き差しの方がよっぽどいやだ。リセットボタンつけてほしかったなあ。
4/8 追記 デバッガ使用時はJ2とJ3をショートしたままにしないといけない
CQ出版の技術雑誌Interfaceの2007年5月号にNECのV850ボードが付録についてきました。付録はボードだけでUSBコネクタやピンヘッダは実装されていません。秋葉原ラジオデパートのATラボで格安(500円)のケーブルセットを販売しているということで買ってきました。
はいっていた部品の一覧です
- USBケーブル x1
- USB Bコネクタ x1
- 40pinヘッダピン(2x20) x2
- 10pinヘッダピン(2x5) x1
- 6pin ヘッダピン(2x3) x1
- ジャンパプラグ x2
- 電源コネクタヘッダ(XA-2P) x1
- 電源コネクタケーブル(40cm) x1
- 32.768kHz水晶振動子 x1
これで500円は安い
4/8 追記情報元のごださんのblogへのトラックバックを追加
はいっていた部品の一覧です
- USBケーブル x1
- USB Bコネクタ x1
- 40pinヘッダピン(2x20) x2
- 10pinヘッダピン(2x5) x1
- 6pin ヘッダピン(2x3) x1
- ジャンパプラグ x2
- 電源コネクタヘッダ(XA-2P) x1
- 電源コネクタケーブル(40cm) x1
- 32.768kHz水晶振動子 x1
これで500円は安い
4/8 追記情報元のごださんのblogへのトラックバックを追加