Nios® Vプロセッサー・ソフトウェア開発者ハンドブック

ID 743810
日付 10/31/2022
Public

このドキュメントの新しいバージョンが利用できます。お客様は次のことを行ってください。 こちらをクリック 最新バージョンに移行する。

ドキュメント目次

10.7. MicroC/TCP-IP プロトコルスタックの使用

インテルでは、インテル FPGA 開発キットでの µC/TCP-IP プロトコル スタックの使用方法の例を提供します。 プライマリー・アプリケーション ・ファイルはuc_tcp_ip_init.cで、参照用の実装ソース コードで構成されます。実際の製品要件を満たすようにコードを変更できます。

uc_tcp_ip_init.c 以下の操作を実行します。

  1. network_init()関数を呼び出して、次のことを行います。
    1. µC/TCP-IP タスクを初期化する
    2. TSE mSGDMA ドライバーをシステムに追加して開始する
    3. 静的 IP または DHCP サーバーを使用して IP アドレスをコンフィグレーションする
  2. network_stop()関数を使用して、TSE インスタンスなどの特定のインターフェイスを停止します。 この関数は uc_tcp_ip_init.cの最後にあります。

network_init() ネットワークスタック初期化実装コード

CPU_BOOLEAN network_init(struct network_conf *conf, NET_IF_NBR *p_if_nbr) {
    NET_ERR    err_net;

    // µC/TCP-IP generic stack init.
    err_net = Net_Init(
            &NetRxTaskCfg,
            &NetTxDeallocTaskCfg,
            &NetTmrTaskCfg);
    if (err_net != NET_ERR_NONE) {
        logf("Failed to Net_Init(): (%d).\n", err_net);
        return DEF_FALSE;
    }

    // Update TSE sys info struct and MAC address from configuration.
    NetDev_Cfg_Ether_TSE.BaseAddr = (CPU_ADDR) conf->tse_sys_info;

    Mem_Copy(NetDev_Cfg_Ether_TSE.HW_AddrStr, conf->mac_addr,
        sizeof(CPU_CHAR) * NET_IF_802x_ADDR_SIZE_STR);

    // Add TSE.
    *p_if_nbr = NetIF_Add(
            (void *)&NetIF_API_Ether, // const for all eth interfaces
            (void *)&NetDev_API_TSE_mSGDMA_Intel_HAL,
            NULL, // (void *)&Net_DrvBSP_Nios_II,
            (void *)&NetDev_Cfg_Ether_TSE,
            NULL, // (void *)&NetPhy_API_Generic,
            NULL, // (void *)&NetPhy_Cfg_Ether_TSE,
                    &err_net);
    if (err_net != NET_IF_ERR_NONE) {
        logf("Failed to NetIF_Add(): (%d).\n", err_net);
        return DEF_FALSE;
    }

    // Start TSE.
    NetIF_Start(*p_if_nbr, &err_net);
    if (err_net != NET_IF_ERR_NONE){
        logf("Failed to NetIF_Start(): (%d).\n", err_net);
        return DEF_FALSE;
    }

    CPU_BOOLEAN ret;
    if (conf->use_dhcp) {
        ret = conf_dhcp(*p_if_nbr);
    } else {
        ret = conf_static(*p_if_nbr, conf);
    }

    return ret;
}