RL78マイコン基板(RL78/G10)|TOOL0端子から2Mbaudでソフトウェアシリアル出力するコード
3つ前と2つ前のエントリでブレッドボード上に回路(FT232RLと74HC125と抵抗2本の簡単なもの)を組んで
秋月電子さんで販売されているRL78/G10 10pin DIP基板に書き込み(とプログラム実行)をしてみましたが、
せっかくFT232RLが繋がっていますのでデバッグメッセージをPC上に表示させることが出来ないか試して
みたくなりました。試行錯誤したところ、FT232RLをスペック上限付近で使うことになってしまうものの、
ブレッドボード上の回路を変更せずに済み、かつサイズの小さいアセンブラコードを作ることが出来ました。
(ただし、残念ながら5μsecほどの割り込み禁止時間があります。それから、個体差のせいでボーレートを
下げないといけなくなる(併せて割り込み禁止時間が延びてしまう)こともあるかも、、、) 追記 : 大事な
注意事項を書き忘れていました。FT232RL側から送信しようとしてはいけないです。送信しようとすると、
僅かな期間ですが74HC125のLow出力とRL78/G10のHigh出力が衝突して何かしらダメージがある筈です。
FT232RL側から送信したいことがある場合はに、1つ後や2つ後のエントリのアセンブラコードが良いです。


作成したアセンブラコード(計26バイト)は以下の通りです。(このコード自体はRL78-S1コアの20MHz動作
専用ですが、一部の命令で実行クロック数が少ないS2コア/S3コアの32MHz動作にもNOPやBRでクロック
数を合わせ込めば対応出来ると思います。また、このコード自体はTOOL0端子用ですが、ポート部分を変更
すれば他の端子にも使えると思います。)
; This code is in the public domain. You may use, modify or distribute it freely.
PUBLIC _putchar
_putchar: ;X = data, A = ignored, void putchar( unsigned char )
SET1 P4.0 ; 2 clk 3 byte always I do for robustness, P40 = TOOL0
CLR1 PM4.0 ; 2 clk 3 byte same as above
_putchar_b: ;begin
ONEB A ; 1 clk 1 byte as a stop bit, shorter than "MOV A, #01H"
ADDW AX, AX ; 2 clk 1 byte for a start bit, shorter than "SHLW AX, 1"
PUSH PSW ; 2 clk 2 byte
DI ; 4 clk 3 byte
_putchar_l: ;loop (start bit = 0, b0, b1, b2, b3, b4, b5, b6, b7, stop bit = 1)
SHRW AX, 1 ; 2 clk 2 byte
MOV1 P4.0, CY ; 2 clk 3 byte
CMPW AX, #0000H ; 2 clk 3 byte
BNZ $_putchar_l ; 2/4 clk 2 byte
_putchar_e: ;end
POP PSW ; 4 clk 2 byte
RET ; 7 clk 1 byte
END
また、動作確認用に作成したCコードは以下の通りです。
void putchar( unsigned char );
途中省略
unsigned char c;
for ( c = '0' ; c <= '9' ; c++ )
{
putchar(c);
}
for ( c = 'A' ; c <= 'Z' ; c++ )
{
putchar(c);
}
for ( c = 'a' ; c <= 'z' ; c++ )
{
putchar(c);
}
putchar('\r');
putchar('\n');

秋月電子さんで販売されているRL78/G10 10pin DIP基板に書き込み(とプログラム実行)をしてみましたが、
せっかくFT232RLが繋がっていますのでデバッグメッセージをPC上に表示させることが出来ないか試して
みたくなりました。試行錯誤したところ、FT232RLをスペック上限付近で使うことになってしまうものの、
ブレッドボード上の回路を変更せずに済み、かつサイズの小さいアセンブラコードを作ることが出来ました。
(ただし、残念ながら5μsecほどの割り込み禁止時間があります。それから、個体差のせいでボーレートを
下げないといけなくなる(併せて割り込み禁止時間が延びてしまう)こともあるかも、、、) 追記 : 大事な
注意事項を書き忘れていました。FT232RL側から送信しようとしてはいけないです。送信しようとすると、
僅かな期間ですが74HC125のLow出力とRL78/G10のHigh出力が衝突して何かしらダメージがある筈です。
FT232RL側から送信したいことがある場合はに、1つ後や2つ後のエントリのアセンブラコードが良いです。


作成したアセンブラコード(計26バイト)は以下の通りです。(このコード自体はRL78-S1コアの20MHz動作
専用ですが、一部の命令で実行クロック数が少ないS2コア/S3コアの32MHz動作にもNOPやBRでクロック
数を合わせ込めば対応出来ると思います。また、このコード自体はTOOL0端子用ですが、ポート部分を変更
すれば他の端子にも使えると思います。)
; This code is in the public domain. You may use, modify or distribute it freely.
PUBLIC _putchar
_putchar: ;X = data, A = ignored, void putchar( unsigned char )
SET1 P4.0 ; 2 clk 3 byte always I do for robustness, P40 = TOOL0
CLR1 PM4.0 ; 2 clk 3 byte same as above
_putchar_b: ;begin
ONEB A ; 1 clk 1 byte as a stop bit, shorter than "MOV A, #01H"
ADDW AX, AX ; 2 clk 1 byte for a start bit, shorter than "SHLW AX, 1"
PUSH PSW ; 2 clk 2 byte
DI ; 4 clk 3 byte
_putchar_l: ;loop (start bit = 0, b0, b1, b2, b3, b4, b5, b6, b7, stop bit = 1)
SHRW AX, 1 ; 2 clk 2 byte
MOV1 P4.0, CY ; 2 clk 3 byte
CMPW AX, #0000H ; 2 clk 3 byte
BNZ $_putchar_l ; 2/4 clk 2 byte
_putchar_e: ;end
POP PSW ; 4 clk 2 byte
RET ; 7 clk 1 byte
END
また、動作確認用に作成したCコードは以下の通りです。
void putchar( unsigned char );
途中省略
unsigned char c;
for ( c = '0' ; c <= '9' ; c++ )
{
putchar(c);
}
for ( c = 'A' ; c <= 'Z' ; c++ )
{
putchar(c);
}
for ( c = 'a' ; c <= 'z' ; c++ )
{
putchar(c);
}
putchar('\r');
putchar('\n');

- 関連記事
-
- RL78マイコン基板(RL78/G10)|CS+(CubeSuite+)で内蔵周辺機能シミュレーションを試す (3)
- RL78マイコン基板(RL78/G10)|CS+(CubeSuite+)で内蔵周辺機能シミュレーションを試す (2)
- RL78マイコン基板(RL78/G10)|CS+(CubeSuite+)で内蔵周辺機能シミュレーションを試す (1)
- RL78マイコン基板(RL78/G10)|e2studio同梱のPython 2.7.2+pySerial 2.7でシリアルポート操作
- RL78マイコン基板(RL78/G10)|CS+(CubeSuite+)のPythonコンソール上でシリアルポート操作 (3)
- RL78マイコン基板(RL78/G10)|CS+(CubeSuite+)のPythonコンソール上でシリアルポート操作 (2)
- RL78マイコン基板(RL78/G10)|CS+(CubeSuite+)のPythonコンソール上でシリアルポート操作 (1)
- RL78マイコン基板(RL78/G10)|TOOL0端子へのシリアル出力を使ったgetch()関数もどきのコード
- RL78マイコン基板(RL78/G10)|TOOL0端子へのシリアル出力を使ったkbhit()関数もどきのコード
- RL78マイコン基板(RL78/G10)|TOOL0端子から2Mbaudでソフトウェアシリアル出力するコード
- RL78マイコン基板(RL78/G10)|Renesas Flash Programmerのコマンドラインでフラッシュ書き込み
- RL78マイコン基板(RL78/G10)|秋月のRL78/G10 10pin DIP基板に自作回路でフラッシュ書き込み (2)
- RL78マイコン基板(RL78/G10)|秋月のRL78/G10 10pin DIP基板に自作回路でフラッシュ書き込み (1)
- RL78マイコン|10ピン0.65mmピッチSSOP→DIP変換基板が見当たらない
- RL78マイコン | 公開されている仕様ではRL78マイコン用GDBSTUBを作ることが出来ない
2015/01/07 blog-entry-546 category: RL78 /* 16bit,8bit CISC */
| h o m e |