こんにちは、KATA_KANと申します。
現在、RX72M RSK にUART通信でWifiモジュール(ESP8266)を接続し、ESP8266デフォルトF/WのATコマンドを行おうとしています。
ルネサス製品で、ESP8266の制御を行っているサンプルがないかと探していたところ、RL78/G10向けのサンプルプログラムを見つけることが出来ました。www.renesas.com/.../search
本サンプルプログラムを、RX72M RSK用に作り替えようとしたのですが、サンプルプログラムではコードジェネレータで作られた UART モジュール(r_cg_sau.c)の API を使っていたようでしたので、e2studio 2022/1 版でスマートコンフィギュレータから出力した FIT の SCI モジュール(r_sci_rx.c) の API に置き換えようとしました。
しかし、単純に R_UART0_Send() ⇒ R_SCI_Send() などのように置き換えるだけでは上手く動作しませんでした。モジュールのソースコードを確認したところ、コードジェネレータで作られたUARTモジュールのAPIは、基本ノンブロッキング動作で動いているようで、FIT の SCI モジュールの API は設定によるのかブロッキング動作で動いているように見えました。
FIT の SCI モジュールの API をコードジェネレータで作られた UART モジュールの API と同様に動かすことは出来るのでしょうか?また、動かすことが出来るのであれば、その際のコンフィグをどのようにすればよいの、ご助言を頂けますと幸いです。
KATA_KANさん、こんにちは。NoMaYです。> FITのSCIモジュールのAPIは設定によるのかブロッキング動作で動いているように見えました。こちらは送受信ともリングバッファを使うようになっていますので、基本的な捉え方としては、ノンブロッキング動作であると思います。そして、思うに、設定、といった部分の話で無くて、APIの呼び出し方、の部分の話かな、という気がします。普段からFIT SCIモジュールを使っているわけでは無いですので、ちょっと勘違いもあるかもしれませんが、以下のRL78/G10のサンプルプログラムの R_ESP_UART_GetRxCount() と R_ESP_UART_Receive() のFIT SCIモジュールへの置き換えを以下のようにしてみてはどうでしょうか?(もちろん、他の関数も適宜置き換えるもの、としてですけれども。)R_ESP_UART_GetRxCount() ⇒ 受信リングバッファ内の受信済みバイト数を取得する関数へ置き換えるR_ESP_UART_Receive() ⇒ 単に以下のソースを書き換えるだけでなく、上位側込み込みで置き換えるRL78/G10のサンプルプログラム(1) まずR_ESP_UART_Receive()で受信動作を起動(受信サイズは受信バッファの最大サイズで起動されてますね)(2) R_ESP_UART_GetRxCount()で受信済みバイト数を取得(3) 受信済みバイト数が必要数になったら受信終了FIT SCIモジュールへの置き換え(1) 受信リングバッファで常に受信状態にありますので特に何もしない(2) R_ESP_UART_GetRxCount()で受信リングバッファ内の受信済みバイト数を取得(3) 受信済みバイト数が必要数になったら、そこでR_ESP_UART_Receive()で受信済みデータをガッと取得して受信終了上記のような感じになるのではないかなぁ、と思うのです。以下、RL78/G10のサンプルプログラムのソースです。(FIT SCIモジュールへ置き換えたものではありません。)r01an4791xx0100-rl78g10-connectivity/workspace/e2studio/src/cg_src/r_esp_hw.c
#include "r_esp_hw.h"extern volatile uint16_t g_uart0_rx_count; /* uart0 receive data number *//******************************************************************************* Function Name: R_ESP_UART_GetRxCount* Description : Gets the value of the UART received data counter. In this sample program, this function gets the value of g_uart0_rx_count* Arguments : None* Return Value : Value of the UART received data counter******************************************************************************/uint16_t R_ESP_UART_GetRxCount(void) { return g_uart0_rx_count;}/******************************************************************************* Function Name: R_ESP_UART_Send* Description : Start the UART transmission processing. In this sample program, this function calls R_UART0_Send()* Arguments : uint8_t * const tx_buf Start address of the area where data to be sent is stored* uint16_t tx_num Length of data to be sent* Return Value : None******************************************************************************/void R_ESP_UART_Send(uint8_t * const tx_buf, uint16_t tx_num) { R_UART0_Send(tx_buf, tx_num);}/******************************************************************************* Function Name: R_ESP_UART_Receive* Description : Starts the UART reception processing. In this sample program, this function calls R_UART0_Receive()* Arguments : uint8_t * const rx_buf Start address of the area for storing the received data* uint16_t rx_num Length of data to be received* Return Value : None******************************************************************************/void R_ESP_UART_Receive(uint8_t * const rx_buf, uint16_t rx_num) { R_UART0_Receive(rx_buf, rx_num);}/******************************************************************************* Function Name: R_ESP_UART_Start* Description : Enable UART processing.* Arguments : None* Return Value : None******************************************************************************/void R_ESP_UART_Start(void) { R_UART0_Start();}/******************************************************************************* Function Name: R_ESP_UART_Stop* Description : Disable UART processing.* Arguments : None* Return Value : None******************************************************************************/void R_ESP_UART_Stop(void) { R_UART0_Stop();}
r_sci_rxモジュールには SCI_CFG_USE_CIRCULAR_BUFFER というパラメータがありデフォルトでは0なので、リングバッファとして生成されないのでは?
lesimyさん、こんにちは。NoMaYと申します。ひょっとして同じようなことをしようとしてハマッてしまいましたか?(ごめんなさい、そこまでAPIや使い方が頭の中に入っているというわけでは無くて。)