RX63NでM3S-T4-Tinyの使い方について

はじめてポストします。

ボード[GR-SAKURA](RX63N)を使いEthernetLANをe2studioで構築しようとしましたが、[r_cmt_rx]や[r_sci_rx]などの他のFITモジュールと併用できませんでした。

M3S-T4-Tinyのサンプルコード「an_r20an0312jj0102_rx_t4_connectivity」の「rx63n_gr_sakura」をインストールしコンパイル、実行してドキュメントにある動作確認はできました。

そのサンプルプロジェクトにFIT[r_cmt_rx]をFIT Configuratorで追加しすると、[r_bsp]も同時に追加されてしまい、コンパイルエラーになります。
[r_bsp]を削除して試してみましたがうまくいきませんでした。

また、新規プロジェクトにFIT[r_cmt_rx]や[r_sci_rx]などのFITを追加した後。FIT[r_t4_rx]を追加し、コンパイルするとエラーが発生します。

RX63NでT4とCTM,SCIなどの他のFITモジュールを併用する方法を教えてください。

Parents
  • わわいです

    サンプルコードと自動生成ツールってのはまったく別個のものなので、それらを同居させようとするなら、内容を理解してお互い動くように修正していくのが前提の話になります

    がんばってください

  • ■RX63N GR-SAKURAボードでTCP/IPを動作させ、各種FITモジュールと同居させる方法
     
    (1)開発環境をダウンロード
     統合開発環境 e² studio 5.1 インストーラ (オンライン用)
     https://www.renesas.com/ja-jp/software/D4000082.html
     →インストール中にCC-RX(コンパイラ)の最新版(2015/09/10時点ではv205)もインストールする

    (2)e2 studioを起動してサンプルプロジェクト新規作成
     ・ファイル→新規→C Project
      プロジェクト名:rx63n_gr_sakura (なんでも良いです)
      プロジェクトの種類:Executable→Sample Project
      ツールチェイン:Renesas RXC Toolchain
      [次へ]ボタン
      ターゲットの選択:R5F563NBDxFB
      「ハードウェア・デバッグ」にチェック(「シミュレータを使用してデバッグ」はチェック外す)
      [次へ]ボタン
      「FITモジュールを使用する」にチェック
      「FITモジュールのダウンロード」を押す
      リージョンを選択しOKを押す
      FITモジュール一覧にいっぱい表示されるので、「絞り込み」でRX Driver Packageのみ表示する、にチェックを入れ、
      RX Driver Packageをダウンロード。(2016/09/10時点ではrev110)
       補足:RX Driver Package(略称はRDP)はFITモジュール(RXマイコン周辺機能のデバイスドライバ)詰め合わせセットとのこと。
      [終了]ボタン
      
    (3)FITモジュールをプロジェクトに登録していく
     ・Renesas Views→e2ソリューションツールキット→FIT Configurator
     ・FIT Configuratorの窓の中で、以下を探して選択、モジュールの追加ボタンを押す
      ①r_bsp (v331)
      ②r_cmt_rx (v290)
      ③r_ether_rx (v110)
      ④r_t4_rx (v205)
     ・RDP rev110ではr_t4_rxとr_ether_rxを繋ぐ r_t4_driver_rx がRX64M、RX71M対応のみのため、
      RX63N用にポーティング必要。まずはFIT Configuratorのターゲットボードの右側にある
      「フィルタの詳細設定」を押して、グループを「RX64M」に変更
     ・⑤r_t4_driver_rx (v104)を選択し、モジュールの追加ボタンを押す
     「フィルタの詳細設定」を押して、グループを「RX63N」に忘れず戻しておく
     ・ここでFIT Configuratorの「コードの生成」ボタンを押しておく
     →FIT Configuratorが各FITモジュールを読み取り、インクルードパスやライブラリ登録、
      最終的にFITモジュール内部のソースコードからコード生成を行う

    (4)TCP/IPライブラリをリンカ登録
     ・FIT Configuratorでコード生成時にTCP/IPのライブラリが登録されないので、
      手動でリンカ設定を行う
      プロジェクトエクスプローラの「rx63n_gr_sakura」を右クリックしてプロパティを選択
      C/C++ビルド→Settingsを選択し、Linker→入力で「T4_Library_rxv1_ether_little.lib」を指定

    (5)Etherドライバ用のセクション設定
     ・プロジェクトエクスプローラの「rx63n_gr_sakura」を右クリックしてプロパティを選択
      C/C++ビルド→Settingsを選択し、Linker→セクションで以下設定を施す
      B_ETHERNET_BUFFERS_1を32バイトアライメントが維持できるようセクション追加
      B_RX_DESC_1を16バイトアライメントが維持できるようセクション追加
      B_TX_DESC_1を16バイトアライメントが維持できるようセクション追加
     
     <この時点でビルドが通るようになります>

    (6)Etherドライバの設定を変更する
     ・/r_config/r_ether_rx_config.h の設定で以下を変更する
      ETHER_CFG_MODE_SEL 0 -> 1
      ETHER_CFG_CH0_PHY_ACCESS 1 -> 0
      ETHER_CFG_CH1_PHY_ACCESS 1 -> 0
      ETHER_CFG_USE_LINKSTA 1 -> 0

    (7)TCP/IPドライバ(/r_t4_driver_rx/src/t4_driver.c)調整
     ・RX64M/RX71M用に2ch前提のコードになっているため、1ch用に改造
      以下行をコメントアウト:108, 109, 117, 118, 130, 135, 136, 214, 228

    (8)TCP/IP本体の設定(/r_t4_rx/src/config_tcpudp.c)を調整
     ・_t4_channel_num を 1 に変更

    (9)端子設定コードをGR-SAKURA用に改造 (長いので本投稿の末尾に記載:「★」で検索)
     ・/r_ether_rx/src\targets/rx63n/r_ether_setting_rx63n.c について、
      ether_port_enable_rmii()と、ether_port_disable_rmii()の実装変更
     
    (10)main()にTCP/IPとEtherの初期化コード追加(長いので本投稿の末尾に記載:「★★」で検索)

    -----------------------------------------------
    (9)端子設定コードをGR-SAKURA用に改造 コード:★
    -----------------------------------------------

    #if ETHER_CFG_MODE_SEL == 1 /* RMII */
    /***********************************************************************************************************************
    * Function Name: ether_port_enable_rmii
    * Description  : Configures port pins.
    * Arguments    : channel -
    *                    Ethernet channel number
    * Return Value : none
    ***********************************************************************************************************************/
    static void ether_port_enable_rmii(uint8_t connect)
    {
        if (PORT_CONNECT_ET0 == (connect & PORT_CONNECT_ET0))
        {
        /*
        Pin Functions : Port
        --------------------
        ET_MDC        : PA4
        ET_MDIO       : PA3
        ET_WOL        : NC
        ET_LINKSTA    : NC
        ET_EXOUT      : NC
        REF50CK       : PB2
        RMII_TXD1     : PB6
        RMII_TXD0     : PB5
        RMII_TXD_EN   : PB4
        RMII_RXD1     : PB0
        RMII_RXD0     : PB1
        RMII_RX_ER    : PB3
        RMII_CRS_DV   : PB7
        */
            /* ET0 */
            PORTA.PDR.BIT.B3 = 0;
            PORTA.PDR.BIT.B4 = 0;
            PORTB.PDR.BIT.B0 = 0;
            PORTB.PDR.BIT.B1 = 0;
            PORTB.PDR.BIT.B2 = 0;
            PORTB.PDR.BIT.B3 = 0;
            PORTB.PDR.BIT.B4 = 0;
            PORTB.PDR.BIT.B5 = 0;
            PORTB.PDR.BIT.B6 = 0;
            PORTB.PDR.BIT.B7 = 0;

            PORTA.PMR.BIT.B3 = 0;
            PORTA.PMR.BIT.B4 = 0;
            PORTB.PMR.BIT.B0 = 0;
            PORTB.PMR.BIT.B1 = 0;
            PORTB.PMR.BIT.B2 = 0;
            PORTB.PMR.BIT.B3 = 0;
            PORTB.PMR.BIT.B4 = 0;
            PORTB.PMR.BIT.B5 = 0;
            PORTB.PMR.BIT.B6 = 0;
            PORTB.PMR.BIT.B7 = 0;

    #if (ETHER_CFG_USE_LINKSTA == 1)
            /* Clear PDR and PMR for LINKSTA */
            PORTA.PDR.BIT.B5 = 0;
            PORTA.PMR.BIT.B5 = 0;
    #endif
        }

        /* PFS register write protect off */
        R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_MPC);

        /* Select pin function */
        if (PORT_CONNECT_ET0 == (connect & PORT_CONNECT_ET0))
        {
            /* ET0 */
            MPC.PA3PFS.BYTE = 0x11;
            MPC.PA4PFS.BYTE = 0x11;
            MPC.PB0PFS.BYTE = 0x12;
            MPC.PB1PFS.BYTE = 0x12;
            MPC.PB2PFS.BYTE = 0x12;
            MPC.PB3PFS.BYTE = 0x12;
            MPC.PB4PFS.BYTE = 0x12;
            MPC.PB5PFS.BYTE = 0x12;
            MPC.PB6PFS.BYTE = 0x12;
            MPC.PB7PFS.BYTE = 0x12;

    #if (ETHER_CFG_USE_LINKSTA == 1)
            /* Select pin function for LINKSTA */
            MPC.PA5PFS.BYTE = 0x11;
    #endif
        }

        /* PFS register write protect on */
        R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_MPC);

        /* Switch to the selected input/output function */
        if (PORT_CONNECT_ET0 == (connect & PORT_CONNECT_ET0))
        {
            /* ET0 */
            MPC.PFENET.BIT.PHYMODE = 0; /* Select Ethernet mode    RMII mode for ch0 */

            PORTA.PMR.BIT.B3 = 1;
            PORTA.PMR.BIT.B4 = 1;
            PORTB.PMR.BIT.B0 = 1;
            PORTB.PMR.BIT.B1 = 1;
            PORTB.PMR.BIT.B2 = 1;
            PORTB.PMR.BIT.B3 = 1;
            PORTB.PMR.BIT.B4 = 1;
            PORTB.PMR.BIT.B5 = 1;
            PORTB.PMR.BIT.B6 = 1;
            PORTB.PMR.BIT.B7 = 1;

    #if (ETHER_CFG_USE_LINKSTA == 1)
            /* Switch to the selected input/output function for LINKSTA */
            PORTA.PMR.BIT.B5 = 1;
    #endif
        }
    } /* End of function ether_port_enable_rmii() */

    /***********************************************************************************************************************
    * Function Name: ether_port_disable_rmii
    * Description  : Configures port pins.
    * Arguments    : channel -
    *                    Ethernet channel number
    * Return Value : none
    ***********************************************************************************************************************/
    static void ether_port_disable_rmii(uint8_t connect)
    {
        if (PORT_CONNECT_ET0 == (connect & PORT_CONNECT_ET0))
        {
        /*
        Pin Functions : Port
        --------------------
        ET_MDC        : PA4
        ET_MDIO       : PA3
        ET_WOL        : NC
        ET_LINKSTA    : NC
        ET_EXOUT      : NC
        REF50CK       : PB2
        RMII_TXD1     : PB6
        RMII_TXD0     : PB5
        RMII_TXD_EN   : PB4
        RMII_RXD1     : PB0
        RMII_RXD0     : PB1
        RMII_RX_ER    : PB3
        RMII_CRS_DV   : PB7
        */
            /* Output data */
            PORTA.PODR.BIT.B3 = 0;      /* ET_MDIO     -> P71(don't care) */
            PORTA.PODR.BIT.B4 = 0;      /* ET_MDC      -> P72(Low Output)
                                           So as not to take data when the state of MDC is irregularity, Low is output from
                                            MDC. */
            PORTB.PODR.BIT.B0 = 0;      /* RMII_RXD1   -> P74(don't care) */
            PORTB.PODR.BIT.B1 = 0;      /* RMII_RXD0   -> P75(don't care) */
            PORTB.PODR.BIT.B2 = 0;      /* REF50CK     -> P76(don't care) */
            PORTB.PODR.BIT.B3 = 0;      /* RMII_RX_ER  -> P77(don't care) */
            PORTB.PODR.BIT.B4 = 0;      /* RMII_TXD_EN -> P80(Low Output:deassert) */
            PORTB.PODR.BIT.B5 = 0;      /* RMII_TXD0   -> P81(don't care) */
            PORTB.PODR.BIT.B6 = 0;      /* RMII_TXD1   -> P82(don't care) */
            PORTB.PODR.BIT.B7 = 0;      /* RMII_CRS_DV -> P83(don't care) */
           
            /* Direction */
            PORTA.PDR.BIT.B3 = 0;       /* ET_MDIO     -> P71(input)  */
            PORTA.PDR.BIT.B4 = 1;       /* ET_MDC      -> P72(output) */
            PORTB.PDR.BIT.B0 = 0;       /* RMII_RXD1   -> P74(input)  */
            PORTB.PDR.BIT.B1 = 0;       /* RMII_RXD0   -> P75(input)  */
            PORTB.PDR.BIT.B2 = 0;       /* REF50CK     -> P76(input)  */
            PORTB.PDR.BIT.B3 = 0;       /* RMII_RX_ER  -> P77(input)  */
            PORTB.PDR.BIT.B4 = 1;       /* RMII_TXD_EN -> P80(output) */
            PORTB.PDR.BIT.B5 = 1;       /* RMII_TXD0   -> P81(output) */
            PORTB.PDR.BIT.B6 = 1;       /* RMII_TXD1   -> P82(output) */
            PORTB.PDR.BIT.B7 = 0;       /* RMII_CRS_DV -> P83(input)  */
       
            /* Port mode */
            PORTA.PMR.BIT.B3 = 0;
            PORTA.PMR.BIT.B4 = 0;
            PORTB.PMR.BIT.B0 = 0;
            PORTB.PMR.BIT.B1 = 0;
            PORTB.PMR.BIT.B2 = 0;
            PORTB.PMR.BIT.B3 = 0;
            PORTB.PMR.BIT.B4 = 0;
            PORTB.PMR.BIT.B5 = 0;
            PORTB.PMR.BIT.B6 = 0;
            PORTB.PMR.BIT.B7 = 0;

    #if (ETHER_CFG_USE_LINKSTA == 1)
            /* Clear PODR and PDR, PMR for LINKSTA */
            PORTA.PODR.BIT.B5 = 0;      /* ET_LINKSTA -> P54(don't care) */
            PORTA.PDR.BIT.B5 = 0;       /* ET_LINKSTA -> P54(I/O:Input) */
            PORTA.PMR.BIT.B5 = 0;
    #endif
        }
    } /* End of function ether_port_disable_rmii() */

    #endif  /* ETHER_CFG_MODE_SEL == 1 */

    #endif  /* defined(BSP_MCU_RX63N) */

    /* End of File */

    -----------------------------------------------
    (9)main()にTCP/IPとEtherの初期化コード:★★
    -----------------------------------------------

    #include "r_t4_itcpip.h"

    #define TCPUDP_WORK 10300/4
    UW tcpudp_work[TCPUDP_WORK];

    void main(void)
    {
     UW work_size;
     
     /* start tcp/ip */
     lan_open();
     work_size = tcpudp_get_ramsize();
     if(work_size > sizeof(tcpudp_work))
     {
       while(1);
     }
     /* tcpudp_workはTCP/IPデフォルト設定だと10300バイト必要。グローバル変数で確保しておく */
     tcpudp_open(tcpudp_work);
      
     while(1)
     {
       /* check LAN link stat */
       R_ETHER_LinkProcess(0); /* R_ETHER_LinkProcess()は継続的に呼び出される必要がある */
     }
    }

    以上です

  • イッシーさん

    シェルティです、こんにちは。

    RX63N GR-SAKURAでTCP/IPを動作させる方法をまとめてみました。

    TCP/IPのサンプルコードの「an_r20an0312jj0102_rx_t4_connectivity」に同梱されているGR-SAKURA用のプロジェクトは

    FITの枠組みを使わず構築されているサンプルのため、わわいさんのご指摘通り

    FITと同居させることができません。

    ですので、新規プロジェクト作成から各種FITモジュールの組み込みが必要です。

    この手順をまとめてみました。

    これでRX63N GR-SAKURAボードでもFITベースのTCP/IPのプロジェクトが構築できます。

    SCIやほかのFITモジュールたちもこれでこのプロジェクトにアドオンできると思います。

    SCIなどのRX63Nマイコンの端子を使用するFITモジュールの場合はMPCの設定が必要ですので、

    ボード回路図とRX63N ハードウェアマニュアルを見ながらMPCの設定を施してください。

    以上です

  • イッシーです。

    わいわいさん返信ありがとうございました。

    そして、シェルティさん貴重な情報ありがとうございました。

    これから動作確認したいと思います。

    TCP/IPの内容を理解しないで作成していますので、できるかどうか心配です。

    実は当方でもシルティさんの手順と似たような方法で試していたところです。

    やっとコンパイルも成功しpingも通りました。

    以下の方法で行いましたが問題があるでしょうか?

    (1)、(2)はシェルティさんの手順と同じ様にプロジェクトを作成しました。

    (3)のFITモジュールの追加の項では、「r_cmt_rx]と「r_bsp_rx」を登録し、

    「r_ether_rx」、「r_t4_rx」のモジュールは追加せず、

    「rx63_gr_sakura」プロジェクトから「r_t4_rx」と「src\driver」を

    それぞれプロジェクトの「r_t4_rx」、「t4_src\driver」にコピーしました。

    そしてコンパイルしエラー発生のつど対応しました。

    以下はエラー発生で対応した処理です。

    ・プロジェクトをコンパイルしエラーを改修

      t4_src\driverのソースを変更

      #include "../r_bsp/mcu/rx63n/register_access/iodefine.h"

    ・プロジェクトのプロパティでインクルードパスを追加

      /${ProjName}/r_t4_rx

      /${ProjName}/r_t4_rx/lib

      /${ProjName}/r_t4_rx/src

        ワークスペース・パスのチェックを忘れずに

    ・プロジェクトのプロパティ(Linker>入力)でファイル・パスを追加

      ${workspace_loc:/${ProjName}/r_t4_rx/lib/T4_Library_rxv1_ether_little.lib}

    ・r_ether.cの行をコメント(E0520136: Struct "<unnamed>" has no field "ZPE")

      //ETHERC.ECMR.BIT.ZPE = 1;

      内容を理解していない

    ・r_cmt_rx.cのcmt0_isr()をコメント

      T4_src/driver/r_ether.cでVECT( _CMT0_CMI0)にtimer_interruptが定義されているため

      以下のエラーになるりコメントにする。よって当面CMT0は使用禁止

      #pragma interrupt ( timer_interrupt( vect = _VECT( _CMT0_CMI0 ) ) )

      void timer_interrupt(void)

      *  * E0562142:Interrupt number "28" of "vector" has multiple definition

    ・プロジェクトのプロパティ(Linker>セクション)にセクションを追加

      R_RX_DESC

      R_TX_DESC

      B_ETHERNET_BUFFERS_1

  • イッシーです。

    前回の処理でpingが通ったと報告しましたが、私の操作ミスで間違いでした。

    この処理ではpingは通りません。

    echo_srv()でコールしている関数(lan_open()など)は正常終了しています。

    原因は不明です。

    今後シェルティさんの方法で挑戦します。

    結果を報告します。

  • イッシーです。

    Replyのテストです

  • イッシーです。

    シェルティさんの手順でpingが通るようになりました。

    大変助かりました。

    おかげで先に進められそうです

    本当にありがとうございました。

  • こののフォーラムでシェルティさんから教えていただいた方法で
    M3S-T4-TinyモジュールをRX63Nに組み込みましたが、
    先日ルネサスからRX63N対応のT4FITモジュールがリリースされましたので試してみました。
    ところがpingコマンドが応答しません。
    試行錯誤した結果「r_ether_rx」を従来のと差し替えると動作しました。
    設定などが間違えているものと思いますが、RX63Nに新しいT4FITモジュールで動作した人がいたら教えてください

    各モジュールのバージョンは以下の通りです。
    r_bsp 3.40
    r_cmt_rx 3.00
    r_ether_rx 1.11
    r_t4_driver_rx 1.05
    r_t4_rx 2.05

Reply
  • こののフォーラムでシェルティさんから教えていただいた方法で
    M3S-T4-TinyモジュールをRX63Nに組み込みましたが、
    先日ルネサスからRX63N対応のT4FITモジュールがリリースされましたので試してみました。
    ところがpingコマンドが応答しません。
    試行錯誤した結果「r_ether_rx」を従来のと差し替えると動作しました。
    設定などが間違えているものと思いますが、RX63Nに新しいT4FITモジュールで動作した人がいたら教えてください

    各モジュールのバージョンは以下の通りです。
    r_bsp 3.40
    r_cmt_rx 3.00
    r_ether_rx 1.11
    r_t4_driver_rx 1.05
    r_t4_rx 2.05

Children
  • ■RX63N GR-SAKURAボードでTCP/IPを動作させる方法(2016/11/01版)
     
    (1)開発環境をダウンロード
     統合開発環境 e² studio 5.2 インストーラ (オンライン用)
     https://www.renesas.com/ja-jp/software/D4000207.html
     →インストール中にCC-RX(コンパイラ)の最新版(2016/11/01時点ではv205)もインストールする
    (2)e2 studioを起動してサンプルプロジェクト新規作成
     ・ファイル→新規→C Project
      プロジェクト名:rx63n_gr_sakura (なんでも良いです)
      プロジェクトの種類:Executable→Sample Project
      ツールチェイン:Renesas RXC Toolchain
      [次へ]ボタン
      ターゲットの選択:R5F563NBDxFB
      「ハードウェア・デバッグ」にチェック(「シミュレータを使用してデバッグ」はチェック外す)
      [次へ]ボタン
      「FITモジュールを使用する」にチェック
      「FITモジュールのダウンロード」を押す
      リージョンを選択しOKを押す
      FITモジュール一覧にいっぱい表示されるので、「絞り込み」でRX Driver Packageのみ表示する、にチェックを入れ、
      RX Driver Packageをダウンロード。(2016/11/01時点ではrev111)
       補足:RX Driver Package(略称はRDP)はFITモジュール(RXマイコン周辺機能のデバイスドライバ)詰め合わせセットとのこと。
      [終了]ボタン
      
    (3)FITモジュールをプロジェクトに登録していく
     ・Renesas Views→e2ソリューションツールキット→FIT Configurator
     ・FITモジュールを追加するプロジェクトを「rx63n_gr_sakura」、ターゲットボードを「RSKRX63N」を選択
      (GR-SAKURAはまだ登録されていないため、BSPの設定に微妙に不整合がある状態だが基本動作に問題なし)
     ・FIT Configuratorの窓の中で、以下を探して選択、モジュールの追加ボタンを押し、コード生成ボタンを押す
      ①r_bsp (v340)
      ②r_cmt_rx (v300)
      ③r_ether_rx (v111)
      ④r_t4_rx (v205)
      ⑤r_t4_driver (v105)
    (4)TCP/IPライブラリをリンカ登録
     ・FIT Configuratorでコード生成時にTCP/IPのライブラリが登録されないので、
      手動でリンカ設定を行う
      プロジェクトエクスプローラの「rx63n_gr_sakura」を右クリックしてプロパティを選択
      C/C++ビルド→Settingsを選択し、Linker→入力で「T4_Library_rxv1_ether_little.lib」を指定
    (5)Etherドライバ用のセクション設定
     ・プロジェクトエクスプローラの「rx63n_gr_sakura」を右クリックしてプロパティを選択
      C/C++ビルド→Settingsを選択し、Linker→セクションで以下設定を施す
      B_ETHERNET_BUFFERS_1を32バイトアライメント
      B_RX_DESC_1を16バイトアライメント
      B_TX_DESC_1を16バイトアライメント
     <この時点でビルドが通るようになります>
    (6)Etherドライバの設定を変更する
     ・/r_config/r_ether_rx_config.h の設定で以下を変更する
      ETHER_CFG_MODE_SEL 0 -> 1
      ETHER_CFG_CH0_PHY_ACCESS 1 -> 0
      ETHER_CFG_CH1_PHY_ACCESS 1 -> 0
      ETHER_CFG_USE_LINKSTA 1 -> 0
    (7)TCP/IP本体の設定(/r_t4_rx/src/config_tcpudp.c)を調整
     ・_t4_channel_num を 1 に変更
    (8)端子設定コードをGR-SAKURA用に改造 (長いので本投稿の末尾に記載:「★」で検索)
     ・/r_ether_rx/src\targets/rx63n/r_ether_setting_rx63n.c について、
      ether_port_enable_rmii()と、ether_port_disable_rmii()の実装変更
    (8)rx63n_gr_sakura.cに端子設定コード(GR-SAKURA用)を追加 (長いので本投稿の末尾に記載:「★」で検索)
    (9)rx63n_gr_sakura.cのmain()にTCP/IPとEtherの初期化コード追加(長いので本投稿の末尾に記載:「★★」で検索)

    -----------------------------------------------
    (9)端子設定コードをGR-SAKURA用に改造 コード:★
    -----------------------------------------------
    #if ETHER_CFG_MODE_SEL == 1 /* RMII */
    /***********************************************************************************************************************
    * Function Name: ether_port_enable_rmii
    * Description  : Configures port pins.
    * Arguments    : channel -
    *                    Ethernet channel number
    * Return Value : none
    ***********************************************************************************************************************/
    void ether_port_enable_rmii(void)
    {
        /*
        Pin Functions : Port
        --------------------
        ET_MDC        : PA4
        ET_MDIO       : PA3
        ET_WOL        : NC
        ET_LINKSTA    : NC
        ET_EXOUT      : NC
        REF50CK       : PB2
        RMII_TXD1     : PB6
        RMII_TXD0     : PB5
        RMII_TXD_EN   : PB4
        RMII_RXD1     : PB0
        RMII_RXD0     : PB1
        RMII_RX_ER    : PB3
        RMII_CRS_DV   : PB7
        */
       
        /* ET0 */
        PORTA.PDR.BIT.B3 = 0;
        PORTA.PDR.BIT.B4 = 0;
        PORTB.PDR.BIT.B0 = 0;
        PORTB.PDR.BIT.B1 = 0;
        PORTB.PDR.BIT.B2 = 0;
        PORTB.PDR.BIT.B3 = 0;
        PORTB.PDR.BIT.B4 = 0;
        PORTB.PDR.BIT.B5 = 0;
        PORTB.PDR.BIT.B6 = 0;
        PORTB.PDR.BIT.B7 = 0;
        PORTA.PMR.BIT.B3 = 0;
        PORTA.PMR.BIT.B4 = 0;
        PORTB.PMR.BIT.B0 = 0;
        PORTB.PMR.BIT.B1 = 0;
        PORTB.PMR.BIT.B2 = 0;
        PORTB.PMR.BIT.B3 = 0;
        PORTB.PMR.BIT.B4 = 0;
        PORTB.PMR.BIT.B5 = 0;
        PORTB.PMR.BIT.B6 = 0;
        PORTB.PMR.BIT.B7 = 0;
    #if (ETHER_CFG_USE_LINKSTA == 1)
        /* Clear PDR and PMR for LINKSTA */
        PORTA.PDR.BIT.B5 = 0;
        PORTA.PMR.BIT.B5 = 0;
    #endif
        /* PFS register write protect off */
        R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_MPC);
        /* ET0 */
        MPC.PA3PFS.BYTE = 0x11;
        MPC.PA4PFS.BYTE = 0x11;
        MPC.PB0PFS.BYTE = 0x12;
        MPC.PB1PFS.BYTE = 0x12;
        MPC.PB2PFS.BYTE = 0x12;
        MPC.PB3PFS.BYTE = 0x12;
        MPC.PB4PFS.BYTE = 0x12;
        MPC.PB5PFS.BYTE = 0x12;
        MPC.PB6PFS.BYTE = 0x12;
        MPC.PB7PFS.BYTE = 0x12;
    #if (ETHER_CFG_USE_LINKSTA == 1)
        /* Select pin function for LINKSTA */
        MPC.PA5PFS.BYTE = 0x11;
    #endif
        /* PFS register write protect on */
        R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_MPC);
        /* ET0 */
        MPC.PFENET.BIT.PHYMODE = 0; /* Select Ethernet mode    RMII mode for ch0 */
        PORTA.PMR.BIT.B3 = 1;
        PORTA.PMR.BIT.B4 = 1;
        PORTB.PMR.BIT.B0 = 1;
        PORTB.PMR.BIT.B1 = 1;
        PORTB.PMR.BIT.B2 = 1;
        PORTB.PMR.BIT.B3 = 1;
        PORTB.PMR.BIT.B4 = 1;
        PORTB.PMR.BIT.B5 = 1;
        PORTB.PMR.BIT.B6 = 1;
        PORTB.PMR.BIT.B7 = 1;
    #if (ETHER_CFG_USE_LINKSTA == 1)
        /* Switch to the selected input/output function for LINKSTA */
        PORTA.PMR.BIT.B5 = 1;
    #endif
    } /* End of function ether_port_enable_rmii() */
    #endif

    -----------------------------------------------
    (9)main()にTCP/IPとEtherの初期化コード:★★
    -----------------------------------------------
    #include "platform.h"
    #include "r_t4_itcpip.h"
    #include "r_ether_rx_if.h"

    #define TCPUDP_WORK 10300/4
    UW tcpudp_work[TCPUDP_WORK];

    void ether_port_enable_rmii(void);
    void main(void);

    void main(void)
    {
     UW work_size;
     
     /* start tcp/ip */
     ether_port_enable_rmii();
     lan_open();
     work_size = tcpudp_get_ramsize();
     if(work_size > sizeof(tcpudp_work))
     {
       while(1);
     }
     /* tcpudp_workはTCP/IPデフォルト設定だと10300バイト必要。グローバル変数で確保しておく */
     tcpudp_open(tcpudp_work);
      
     while(1)
     {

     }
    }

  • イッシーさん

    こんにちは、シェルティです。

    最新の環境でまとめ直してみました。
    ポイントはEtherドライバからMPCの設定が消えたところですね。
    端子の用途はボードによって変わるためユーザボードへの移植を想定して
    端子設定のコードをEtherドライバに抱えないように変更したのだと思います。

    RX65Nだと、e2 studioのFITコンフィグレータでEther用の端子の
    MPCの設定コードがコード生成できるようになりました。
    RX63NのEtherドライバはまだ追従していないようですね。

    この手順でひとまずはGR-SAKURAでTCP/IPの動作確認ができました。
    お試しください。

    以上です