こんにちは。NoMaYです。TB-RX65N/RX130/RX231のCS+のサンプルプログラムです。まずはデバッグコンソール出力のサンプルです。(サンプルプログラム置き場とGitHubに置きました。)japan.renesasrulz.com/cafe_rene/m/sample_program/460github.com/NoMaY-jp/RX_SmartConfigurator_examples_RXTB_CSplus/tree/cafe_rene/10_DebugConsole_printf
int main(void){ LED0 = LED_ON; for (;;) { printf( "Hello World\r\n" ); R_BSP_SoftwareDelay( 1000, BSP_DELAY_MILLISECS ); LED0 = ~LED0; R_BSP_SoftwareDelay( 1000, BSP_DELAY_MILLISECS ); LED0 = ~LED0; }}
こんにちは。NoMaYです。TB-RX65N/RX130/RX231のCS+のサンプルプログラムです。UART出力のサンプルを追加しました。(サンプルプログラム置き場とGitHubに置きました。)japan.renesasrulz.com/cafe_rene/m/sample_program/460github.com/NoMaY-jp/RX_SmartConfigurator_examples_RXTB_CSplus/tree/cafe_rene/30_UART_Printf
R_CONFIG_SCI_SEND_IMPL( SCI1, 128 /* transmit buffer size */ );11/08変更U_CONFIG_UART_PRINTF_IMPL( SCI1, 128 /* transmit buffer size */ );int main(void){ LED0 = LED_ON; for (;;) { Printf( SCI1, "Hello World\r\n" ); R_BSP_SoftwareDelay( 1000, BSP_DELAY_MILLISECS ); LED0 = ~LED0; R_BSP_SoftwareDelay( 1000, BSP_DELAY_MILLISECS ); LED0 = ~LED0; }}
なお、Config_ext.hというヘッダをプロジェクトに追加して、r_cg_macrodriver.hの中からインクルードして下さい。(このヘッダにはパズルのようなマクロを記述してありますが、ちょっと初学者向きでは無いですので、説明は省略します。すみません。) また、Config_ext.hは、どのSCIチャンネルでも使用出来るようになっていますが、サンプルプログラムで使用しているSCIチャンネル以外を使用する場合は、予め、使用するSCIコンポーネントをRXスマートコンフィグレータで生成しておいて下さい。プロジェクトツリー: File/Smart Configurator/general/r_cg_macrodriver.h変更内容: 赤文字箇所を追加
/******************************************************************************Global functions******************************************************************************/void R_Systeminit(void);/* Start user code for function. Do not edit comment generated here */#include "Config_ext.h"/* End user code. Do not edit comment generated here */
実行例: (なお、写真は別プロジェクトのもので、本プロジェクトでは光るLEDは左側のみです。)
IKUZOさん、こんにちは。NoMaYです。デバッグコンソールで両方向通信も可能です。RXスマートコンフィグレータ(というかFIT BSPモジュール)+CC-RXで、例えば、以下のような普通のC言語プログラムで可能です。(ただし、普通のC言語プログラム同様に入力待ちで処理が止まりますので、FIT BSPモジュールの下層を見たくない場合はRTOSで入力待ちのタスクを作るか、RTOSを使いたくない場合はFIT BSPモジュールのソースを参考にして入力存在確認関数を作るか、そういったことをする必要が出てくるかとは思います。)プログラム例のソース:
int main(void){ char c; for (;;) { printf( "Please enter one digit number>\r\n" ); c = getchar(); printf( "\r\nNow %c is entered.\r\n\r\n", c ); }}
プログラム例の実行画面:FIT BSPモジュールの下層の処理:github.com/renesas/rx-driver-package/blob/153ad87/source/r_bsp/r_bsp_vx.xx/r_bsp/mcu/all/lowlvl.c
IKUZOさん、こんにちは。NoMaYです。> これはE1とかE2のエミュレータの配線を使用して通信しているわけなんでしょ?そうです。ただ、以下の欠点もありますので、それを踏まえておく必要はあるかと思います。(1) あまり速くは無い。きちんと計っていないが数十Kbps~数Kbpsぐらいっぽい(2) DMA/DTCによる転送が出来ないので送受信中はCPUに負担を掛ける(3) パソコン側のターミナルソフトを自作することが出来ない
こんにちは。NoMaYです。TB-RX65N/RX130/RX231のCS+のサンプルプログラムです。I2C送受信のサンプルを追加しました。(サンプルプログラム置き場とGitHubに置きました。) なお、今回、手っ取り早く通信相手を用意したかったので、RX72N Envision Kit及びそれに搭載されているライトセンサISL29034を使用したことにより、TBボードに関してはビルド出来ることまでしか確認していないです。japan.renesasrulz.com/cafe_rene/m/sample_program/460github.com/NoMaY-jp/RX_SmartConfigurator_examples_RXTB_CSplus/tree/cafe_rene/60_I2C_Master
U_CONFIG_I2C_MASTER_IMPL( SCI11 );int main(void){ /* ISL29034 data sheet: https://www.renesas.com/jp/ja/doc/datasheet/isl29034.pdf */ uint8_t adr7_ISL29034 = 0x44; /* The 7-bits address of the device */ uint8_t cmd_read_ID[1] = { 0x0F /* Address of the ID register */ }; uint8_t cmd_clr_BOUT[2] = { 0x0F, /* Address of the ID register */ 0x00 /* Write data (the BOUT bit is the bit7 of the ID register) */ }; uint8_t ret_data1[1] = { 0x00 }; /* Just clear before reception */ uint8_t ret_data2[1] = { 0x00 }; /* Just clear before reception */ printf( "Hit 'Enter' key to proceed the operation.\r\n" ); getchar(); U_Config_I2C_Master_Start( SCI11 ); U_Config_I2C_Master_Send_UWT( SCI11, adr7_ISL29034, cmd_read_ID, sizeof(cmd_read_ID) ); U_Config_I2C_Master_Receive_UWT( SCI11, adr7_ISL29034, ret_data1, sizeof(ret_data1) ); printf( "Read the initial value of the ID register: " ); printf( "(val & 0xA8) = 0x%02x (expected: 0xA8)\r\n\r\n", ret_data1[0] & 0xA8 );11/26変更 printf( "(val & 0xA8) = 0x%02X (expected: 0xA8)\r\n\r\n", ret_data1[0] & 0xA8 ); U_Config_I2C_Master_Send_UWT( SCI11, adr7_ISL29034, cmd_clr_BOUT, sizeof(cmd_clr_BOUT) ); printf( "Clear the BOUT bit (the bit7 of the ID register).\r\n\r\n" ); U_Config_I2C_Master_Send_UWT( SCI11, adr7_ISL29034, cmd_read_ID, sizeof(cmd_read_ID) ); U_Config_I2C_Master_Receive_UWT( SCI11, adr7_ISL29034, ret_data2, sizeof(ret_data2) ); printf( "Read again the value of the ID register: " ); printf( "(val & 0xA8) = 0x%02x (expected: 0x28)\r\n\r\n", ret_data2[0] & 0xA8 );11/26変更 printf( "(val & 0xA8) = 0x%02X (expected: 0x28)\r\n\r\n", ret_data2[0] & 0xA8 ); printf( "Done.\r\n" ); for (;;) { }}
実行例: (今回はRX72N Envision Kitを使用しました。)[関連スレッド]RX231のコード生成を用いた簡易IIC通信についてjapan.renesasrulz.com/cafe_rene/f/002-2095199602/6169/rx231-iic/34171#34171japan.renesasrulz.com/cafe_rene/f/002-2095199602/6169/rx231-iic/34173#34173「今回、送信完了/受信完了を待つ送信関数名/受信関数名の末尾に _UWT を付けてみました。(unlimited wait timeの意。また、先頭を R_ ではなくて U_ にしてあります。ちなみに、STM32CubeMXでは送信完了/受信完了を待たない関数の名前の末尾に _IT を付けるようでしたので、逆向きに(?)真似てみました。)」「以下は私のチョンボですね。」
こんにちは。NoMaYです。TB-RX65N/RX130/RX231(とRX72N Envision Kit)でのCS+のサンプルプログラムです。以下のサンプルを追加しました。(サンプルプログラム置き場とGitHubに置きました。) (それと、RXスマートコンフィグレータの素のAPIを使うサンプルプログラムもあった方が良さそうかな、とも思い始めています、、、)デバッグコンソール入力デバッグコンソール入力確認UART入力UART入力確認japan.renesasrulz.com/cafe_rene/m/sample_program/460github.com/NoMaY-jp/RX_SmartConfigurator_examples_RXTB_CSplus/tree/cafe_reneデバッグコンソール入力20_DebugConsole_getchar/
int main(void){ char c; for (;;) { printf( "Please enter a character:\r\n" ); c = getchar(); printf( "\r\nNow %c is entered.\r\n\r\n", c ); }}
実行例:デバッグコンソール入力確認21_DebugConsole_getchar_ready/
int main(void){ char c; int i; for (;;) { printf( "Please enter a character:\r\n" ); for (i = 0; i < 3; i++) { R_BSP_SoftwareDelay( 1000, BSP_DELAY_MILLISECS ); if (is_getchar_ready()) { c = getchar(); printf( "\r\nYeah, %c is entered.\r\n\r\n", c ); R_BSP_SoftwareDelay( 1000, BSP_DELAY_MILLISECS ); break; } } }}
実行例:UART入力40_UART_Getchar/
U_CONFIG_UART_PRINTF_IMPL( SCI1, 128 /* transmit buffer size */ );U_CONFIG_UART_GETCHAR_IMPL( SCI1, 128 /* receive ring buffer size */ );int main(void){ char c; for (;;) { Printf( SCI1, "Please enter a character:\r\n" ); c = Getchar( SCI1 ); Printf( SCI1, "\r\nNow %c is entered.\r\n\r\n", c ); }}
実行例: (9600bpsです。)UART入力確認41_UART_Getchar_Ready/
U_CONFIG_UART_PRINTF_IMPL( SCI1, 128 /* transmit buffer size */ );U_CONFIG_UART_GETCHAR_IMPL( SCI1, 128 /* receive ring buffer size */ );int main(void){ char c; int i; for (;;) { Printf( SCI1, "Please enter a character:\r\n" ); for (i = 0; i < 3; i++) { R_BSP_SoftwareDelay( 1000, BSP_DELAY_MILLISECS ); if (Is_Getchar_Ready( SCI1 )) { c = Getchar( SCI1 ); Printf( SCI1, "\r\nYeah, %c is entered.\r\n\r\n", c ); R_BSP_SoftwareDelay( 1000, BSP_DELAY_MILLISECS ); break; } } }}
実行例: (9600bpsです。)なお、Config_ext.hというヘッダをプロジェクトに追加して、r_cg_macrodriver.hの中からインクルードして下さい。(このヘッダにはパズルのようなマクロを記述してありますが、ちょっと初学者向きでは無いですので、説明は省略します。すみません。) また、Config_ext.hは、どのSCIチャンネルでも使用出来るようになっていますが、サンプルプログラムで使用しているSCIチャンネル以外を使用する場合は、予め、使用するSCIコンポーネントをRXスマートコンフィグレータで生成しておいて下さい。プロジェクトツリー: File/Smart Configurator/general/r_cg_macrodriver.h変更内容: 赤文字箇所を追加
こんにちは。NoMaYです。投稿したサンプルプログラムですが、時間待ちをするのに、FITのBSPモジュールのR_BSP_SoftwareDelay()というAPIを使っています。この場合、時間待ちをしている間は何も出来なくなります。そうでは無くて、ループを回しながら時間待ちをしたい場合には、以下のスレッドの投稿のような方法を試してみて下さい。タイマーと配列japan.renesasrulz.com/cafe_rene/f/002-2095199602/7247/thread/38656#38656
こんにちは。NoMaYです。ここ数日、以下のスレッドが立っていましたが(以下のスレッド自体はTENDの話がメインでしたけれど)、このサンプルプログラムで実装したPrintf() APIは連続複数回送信に対応済みです。#以下のスレッドに"検索"のキーワードのこともありましたが、結局、ちょっとうざい行為ではありますけれど、こうやって検索にヒットし易くなるようにしていかないと駄目そうかも、ですね、、、(駄目なのでしょうね、、、)スマートコンフィグレータのCGで生成したSCI調歩同期のコードで、連続複数回の送信が出来ませんjapan.renesasrulz.com/cafe_rene/f/forum5/7355/cg-sci/39159#39159
こんにちは。NoMaYです。実は、以下のような内部実装関数があるのですが、これを直接使っているサンプルプログラムは、まだ、作っていませんので使っている人はいないと思いますけど、たぶん、後日、ちょっと変えると思います。現在(一例):
U_Config_SCI0_UART_Send() → 送信完了を待たないU_Config_SCI0_UART_Send_UWT() → 送信完了を待つ
後日(一例):
U_Config_SCI0_UART_Send() → 送信完了を待つU_Config_SCI0_UART_Send_IT() → 送信完了を待たないU_Config_SCI0_UART_Send_Ex() → 引数で送信完了を待つ/待たないを指定
[関連リンク]RL78 SmartConfiguratorで気になった点とか改善する案とか報告してみるスレッドjapan.renesasrulz.com/cafe_rene/f/forum18/7253/rl78-smartconfigurator/39178#39178