スライド 1

Similar documents
スライド 1

スライド 1

スライド 1

スライド 1

スライド 1

スライド 1

スライド 1

スライド 1

スライド 1

内容 1. 仕様 動作確認条件 ハードウェア説明 使用端子一覧 ソフトウェア説明 動作概要 ファイル構成 オプション設定メモリ 定数一覧 変数一

81 /******************************************************************************/ 82 /* スレーブアドレスの設定 */ 83 /*****************************************

スライド 1

Microsoft PowerPoint - RL78G14_動画マニュアル_タイマRD.ppt [互換モード]

Microsoft PowerPoint - RX62N動画マニュアルDMAC.ppt [互換モード]

RH850の割り込み/例外実現方法 CC-RHアプリケーションガイド

1. A/D 入力について分解能 12bit の A/D コンバータ入力です A/D 入力電圧とディジタル値との対応は理論上 入力電圧 0V : 0 入力電圧 +3V : 4095 です 実際はオフセットと傾きがあり ぴったりこの数値にはなりません 2. A/D 入力に使用する信号 STM32L_A

GR-SAKURA-SAのサンプルソフト説明

RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for

RL78開発環境移行ガイド R8C/M16C, H8S/H8SXからRL78への移行(統合開発環境編)(High-performance Embedded Workshop→CS+)

/* モジュールストップ解除 */ SYSTEM.MSTPCRA.BIT.MSTPA24 = 0; /* MSTPA24(S12ADA 制御部 ) クロック供給開始 */ SYSTEM.MSTPCRA.BIT.MSTPA17 = 0; /* MSTPA17(S12ADA0) クロック供給開始 */

アナログ・接点変換器

1. 使用する信号 1.1. UART 信号 UART 通信に使用する信号と接続相手との接続は以下の通りです UART 信号表 番号 CPU 機能名 CPU 信号名 基板コネクタピン番号 方向 接続相手の信号名 1 USART1_TX PA9 CN > RxD 2 USART1_R

CoIDE 用 F4D_VCP の説明 V /07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x

内容 1. APX-3302 の特長 APX-3312 から APX-3302 へ変更するためには 差分詳細 ハードウェア ハードウェア性能および仕様 ソフトウェア仕様および制限 Ini ファイルの設

Rev.1.1 S1V50300 サンプルプログラムマニュアル

1. USB の VCP( 仮想 COM ポート ) について USB の VCP( 仮想 COM ポート ) は USB を非同期シリアル通信として使用するための USB のドライバです PC には VCP ドライバをインストールする必要があります USB の VCP( 仮想 COM ポート )

1. LCD LS027B4DH01 について LS027B4DH01 は 400dot x 240dot のグラフィック LCD です 秋月電子通商で購入できます 外形サイズ : 62.8 x x 1.53mm LCD のフレキシブルケーブルの根元の部分はちょっと力を加えただけで表示が

Microsoft Word - dg_sataahciip_refdesign_jp.doc

PowerPoint プレゼンテーション

RX210 グループ MTU2 を用いた相補 PWM モードの波形出力 要旨 本サンプルコードでは MTU2 を用いて相補 PWM モードの波形を出力する方法について説 明します 対象デバイス RX210 1 / 41

1. UART について UART は Universal Asynchronous Receiver Transmitter の頭文字をとったもので 非同期シリアル通信と呼ばれます シリアル通信とは 一本の信号線でデータをやりとりするために 1bit ずつデータを送出することをいいます データを受

QuartusII SOPC_Builderで利用できるGPIF-AVALONブリッジとは?

本資料のご使用につきましては 次の点にご留意願います 本資料の内容については 予告無く変更することがあります 1. 本資料の一部 または全部を弊社に無断で転載 または 複製など他の目的に使用することは堅くお断りいたします 2. 本資料に掲載される応用回路 プログラム 使用方法等はあくまでも参考情報で

MODBUS ユーザーズマニュアル 페이지 1 / 23

目次 1 本アプリケーションノートの目的 送信手順 基本的な送信方法 キャリアセンスなし送信 キャリアセンスあり送信 ACK 期待送信 フレームメモリへのデータの設定 INFO

tri_s_tg12864_vcp の説明 2014/02/05 飛石伝ひ CPU 基板 の LCD TG12864 の表示プログラムです 漢字表示 (JIS208) を行うことができます USB の VCP ( 仮想 COM ポート ) を使用して非同期シリアル通信により 表示試験を行うことができ

Microsoft Word - FCTT_CS_Mod( )Jver1.doc

QuartusII SOPC_Builderで利用できるGPIF-AVALONブリッジとは?

Notes and Points for TMPR454 Flash memory

S1C17 Family Application Note S1C17 シリーズ PORT 多重割り込みアプリケーションノート Rev.1.0

Microsoft PowerPoint - kougi7.ppt

ブート領域、フラッシュ領域の分割方法 RL78ファミリ用Cコンパイラ CC-RL

スレーブ用システム設計ガイド アプライアンス社モータビジネスユニット 2012/2/15 Rev. 2 Page 1

CoIDE 用 STM32F4_UART2 の説明 V /03/30 STM32F4 Discovery の非同期シリアル通信ポート UART2 の送受信を行うプログラムです Free の開発ツール CoIDE で作成したプロジェクトサンプルです プログラムの開始番地は 0x08000

1. プログラム実行時の動作プログラムを実行すると以下のように動作します 1) NUCLEO-F401RE 上の LED LD2( 緑 ) が 200mSec 間隔で点滅します 2. プロジェクトの構成 2.1. プロジェクト F401N_BlinkLD2 の起動画面 TrueSTUDIO で作成し

M16C M16C/50 M16C/5M R5F35MD6JFB 128K + 24K 12K PLQP0100KB-A 100P6Q-A ( 1) R5F35MD6KFB PLQP0100KB-A 100P6Q-A ( 1) R5F35MDEJFB 256K + 24K 20K PLQP0100K

Jan/25/2019 errata_c17m11_10 S1C17 マニュアル正誤表 項目 リセット保持時間 対象マニュアル発行 No. 項目ページ S1C17M10 テクニカルマニュアル システムリセットコントローラ (SRC) 特性 19-3 S1C17M20/M

関数 C 言語は関数の言語 関数とは 関数の定義 : f(x) = x * x ; 使うときは : y = f(x) 戻り値 引数

Microsoft Word - プログラムをRAM.doc

TD-UARTip 設計仕様書

Imation Encryption Manager Plus Imation Encryption Manager Plus ソフトウェアにより 対応 USB フラッシュドライブにパスワード保護に対応した総合セキュリティーを設定することができます Imation Encryption Manage

形B5Z 画像型人感センサ(HVC-F) コマンド仕様書

Microsoft Word - PCI-X_PCIeバスのデータ転送-ver1.0.docx

マクロ(シミュレータコマンド)の使い方

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ

MMUなしプロセッサ用Linuxの共有ライブラリ機構

GR-SAKURA-SAのサンプルソフト説明

Prog1_10th

内容 1. 仕様 動作確認条件 ハードウェア説明 使用端子一覧 ソフトウェア説明 動作概要 ファイル構成 オプション設定メモリ 定数一覧 変数一

Microsoft Word - SfWriter.doc

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

SuperH RISC engineファミリ用 C/C++コンパイラパッケージ V.7~V.9 ご使用上のお願い

CubeSuite+版RXシリアルデバッガ取扱説明書

RX210 グループ FIT を用いたフラッシュメモリの書き換え 要旨 本サンプルコードでは FIT を用いて 特定の内蔵フラッシュメモリ (ROM および E2 デ ータフラッシュ ) のアドレスに特定の値を書き込む方法について説明します 対象デバイス RX210 1 / 50

Singapore Contec Pte Ltd. Opening Ceremony

SAC (Jap).indd

スライド 1

PowerTyper マイクロコードダウンロード手順

FSC FSC-110 通信仕様書 (CC-Link 通信プロトコル )

NM30操作DLL(SSK.DLL)

2.RL78 での割り込み処理 ( 割り込み受け付け ) マスクが解除された (xxmk ビットが 0 の ) 割り込み要求信号は 2 つの用途で使用されます 一つ目は,CPU のスタンバイ状態の解除です この動作は, 割り込み優先順位とは全く無関係で, マスクされていない (xxmk=0 の )

割り込み 今までのプログラムは 順番にそって命令を実行していくのみ それはそれで良いが 不便な場合もある 例えば 時間のかかる周辺機器を使う場合 その周辺機器が動作を終了するまで CPU は待たなければいけない 方法 1( ポーリング ) 一定時間毎に 周辺機器の動作が終了したか調べる 終了していれ

TCP_BP3591 の説明 V /03/28 ROHM 社製 WIFi モジュール BP3591 を使用して 無線 LAN により TCP/IP 通信を行うプログラムです 簡単な文字列によるコマンド ( 例 : LED0 ON ) を受信して LED の ON/OFF を行います 受

MW100 Modbusプロトコルによるデータ通信の設定について

1. ネットワーク経由でダウンロードする場合の注意事項 ダウンロード作業における確認事項 PC 上にファイアウォールの設定がされている場合は 必ずファイアウォールを無効にしてください また ウイルス検知ソフトウェアが起動している場合は 一旦その機能を無効にしてください プリンターは必ず停止状態 (

// USB_CNC_Machine リモート PIO 端末プログラムのメイン関数およびユーザアプリ部 // 編集作成 by Takehiko Inoue /*********** メイン関数 ***************************/ #pragma code

Driver Specification for JX65x, 67x, 598

SH7734 グループ イーサネット受信設定例 アプリケーションノート

SiTCP ユーティリティユーザガイド 2014 年 6 月 18 日 0.73 版 Bee Beans Technologies 1

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

ターゲット項目の設定について

057 { 058 int i; 059 timecounter=0; 060 pwmvalue=0;x=0;v=0; 061 requestdisplaydata=1; 062 tick=1; 063 for (i=0; i<rbuffsize; i++) { 064 ringbuffer[i]=

改版履歴 Ver 改版日内容 /02/07 新規作成 2 / 18

02: 変数と標準入出力

基本条件 (1Slot 版用 ) 機能 MR-SHPC 端子名 設定内容 備考 CS 空間 -CS CS6 空間 ( キャッシュ無し ) キャッシュ無し空間を使用 (B h) RA25 0 固定 レジスタ空間 RA24 0 固定 RA23 0 固定 B83FFFE 4h~B83FFFF

RL78/I1D 中速オンチップ・オシレータでのUART 通信の実現 CC-RL

Microsoft Word - 第5回 基本データ構造2(連結リスト).doc

マニュアル訂正連絡票

PLCシリアル通信 MODBUS通信 データ送信/受信プログラム例

Microsoft PowerPoint - 11.pptx

NANDフラッシュ・コントローラ、ハード・プロセッサ・システム(HPS)のテクニカル・リファレンス・マニュアル(TRM)

ヤマハDante機器と他社AES67機器の接続ガイド

HVL-DR 設定画面詳細 04 版 トップ画面 2 サーバーの基本設定 3 デジタルラックの基本設定 10 コンテンツの管理 19 ダウンロード 32 自動ダウンロード設定 38 各種設定 48 お知らせ 61 画面例 :ios

02: 変数と標準入出力

PowerPoint プレゼンテーション


02: 変数と標準入出力

NarSuS アプリの UPS 対応 クラウド状態管理サービス NarSuS LAN DISK Z シリーズに接続された 対応 UPS のステータス情報を NarSuS で確認 することができます 本機能をご利用いただく際には 以下の UPS 用自動シャットダウンソフトとの併用を推 奨します 以下の

データ収集用 NIM/CAMAC モジュールマニュアル 2006/5/23 目次 クレート コントローラ CC/ NIM ADC 1821 (Seiko EG&G)...3 ADC インターフェイス U デッドタイム

NFCライブラリマニュアル

Transcription:

RX63N 周辺機能紹介 ETHERC/EDMAC イーサネットコントローラ / イーサネットコントローラ用 DMA コントローラ ルネサスエレクトロニクス株式会社 ルネサス半導体トレーニングセンター 2013/08/02 Rev. 1.00 00000-A

コンテンツ ETHERC/EDMAC の概要 プログラムサンプル プログラム仕様 プログラム フローチャート PHY-LSI の初期設定 PHY-LSI レジスタへのアクセス方法 PHY-LSI のリセット 自動交渉結果の取得 EDMAC/ETHERC の初期設定 ETHERC のレジスタ設定 EDMAC のレジスタ設定 ディスクリプタ領域の初期化 フレーム送信 フレーム受信 受信割り込み ( フレーム受信 受信ディスクリプタ枯渇 ) の許可 PHY-LSI 変更時の注意点 2

ETHERC/EDMAC の概要 3

ETHERC/EDMAC の仕様 イーサネットコントローラ イーサネット用 DMA コントローラ 4

ポートETHERC/EDMAC の動作概要 RAM EDMAC ETHERC 送信ディスクリプタ 送信バッファ 送信 FIFO MAC 受信ディスクリプタ 受信バッファ 内部インタフェース ディスクリプタ情報 送信 DMAC ディスクリプタ情報 受信 FIFO EDMAC インタフェース 送信制御部 コマンドステータスインタフェース 受信制御部 MII RMII 外付け PHY-LSI 受信 DMAC 5

プログラムサンプル 6

プログラム仕様 ETH のプログラム例イーサネットフレームを 10 フレーム送受信する 仕様 PHY-LSIインタフェース MIIを使用 動作モード 自動交渉により決定 ディスクリプタ面数 送信 :4 面 受信 :4 面 1フレーム/1バッファ バッファ容量 =1536バイト ディスクリプタ長 16バイト エンディアン リトルエンディアン 割り込み フレーム受信割り込み 7

プログラム フローチャート ETHER 割り込み main A ステータスの確認 モジュールストップ解除 snd_frame イーサネットフレームの送信 フレーム受信割り込み? Yes No init_phylsi PHY-LSI の初期化 No 10 フレーム送信完了? rcv_frame イーサネットフレームの受信 init_etherc ETHERC の初期化 Yes 10 フレーム目? No Yes init_edmac EDMAC の初期化 フレーム受信割り込みを禁止 割り込みコントローラの設定 ステータスのクリア 0 が読み出せるまで待つ 送信および受信の許可 A No 割り込み要求なし? Yes END 初期化送信受信 8

モジュールストップコントロールレジスタ B(MSTPCRB) ETHERC および EDMAC 使用可 C 言語マクロ表記 :MSTP(EDMAC) = 0; 9

初期化フロー -PHY-LSI の初期化 - main モジュールストップ解除 init_phylsi init_phylsi PHY-LSI の初期化 init_etherc ETHERC の初期化 init_edmac EDMAC の初期化 端子の設定 _phy_reset PHY-LSI のリセット _phy_get_autonego 自動交渉結果の取得 IEEE802.3 規格準拠 PHY-LSI 内蔵の MII レジスタ経由で制御 割り込みコントローラの設定 return 送信および受信の許可 自動交渉 ( オートネゴシエーション ): 接続相手によって動作モード (10Mbps/100Mbps, 全二重 / 半二重 ) を自動で切り替える機能 リンク接続ごとに PHY-LSI が自動で実行する A 詳細は 使用する PHY-LSI のデータシートを確認してください 10

PHY-LSI との接続 RX63N エラー通知 データ送信 管理情報 4 ビットデータ 許可クロック クロックデータ データ受信 CSMA/CD データ受信 4 ビットデータ クロックキャリア検出衝突検出有効データエラー状態 IEEE802.3u 準拠の MII 信号 11

P7n 端子機能制御レジスタ (P7nPFS)(n=0 ~ 7) 12

P8n PAn PBn PCn PEn 端子機能制御レジスタ 13

P8n PAn PBn PCn PEn 端子機能制御レジスタ 14

P8n PAn PBn PCn PEn 端子機能制御レジスタ 15

P8n PAn PBn PCn PEn 端子機能制御レジスタ 16

P8n PAn PBn PCn PEn 端子機能制御レジスタ 17

ポートモードレジスタ (PMR) 18

イーサネット制御レジスタ (PFENET) 19

書き込みプロテクトレジスタ (PWPR) 20

リセットと自動交渉の方法 RX63N クロック データ MII レジスタ リセット 自動交渉結果 詳細は 使用する PHY-LSI のデータシートを確認してください 21

MII レジスタ PHY-LSI アドレス 0 1 2, 3 4 5 MIIレジスタ名制御状態物理層識別子自動交渉告知自動交渉リンク先能力 機能リセットや自動交渉の許可 / 禁止など自動交渉の完了通知の確認など PHYの組織識別子情報の確認など自動交渉で相手に通知した値自動交渉で相手から通知された値 6 7 自動交渉拡張 - 自動交渉次ページ送信 - 詳細は 使用する PHY-LSI のデータシートを確認してください 22

MII レジスタのリード / ライト手順 MII 管理フレーム < リード > Hi- Z Hi-Z ( 例 ) 自動交渉結果 Hi-Z 32ビットの連続したアクセス種別フレームの先頭を示す ( リード 1 PHY-LSI = 10 01 アドレス ライト MIIレジスタ番号 = 01 ) (5 データの送信元を切り替える時間ビット ) (5ビット) レジスタアクセスデータ (16ビット) 待機時間 < ライト > Hi-Z ( 例 ) リセット Hi-Z 23

シリアル通信の実現方法 24

PHY 部インタフェースレジスタ (PIR) クロック方向書き込み読み出し 25

MII レジスタのリード / ライト手順の実現 1 ビット単位のデータ書き込み 1 ビット単位のデータ読み出し バスの解放 単独バス解放 26

プログラムイメージ void _phy_preamble(void) { int i; for( i = 0; i < 32; i++ ) { // 1 ビット単位で 1 を書き込み _phy_mii_write_1(); } } static void _phy_mii_write_1(void) { volatile i; ETHERC.PIR.LONG = 0x00000006; for( i=0; i<xxx; i++ ); ETHERC.PIR.LONG = 0x00000007; for( i=0; i<yyy; i++ ); ETHERC.PIR.LONG = 0x00000007; for( i=0; i<zzz; i++ ); } PHY-LSI のデータシートを確認してください 27

ETHERC の初期化フロー main init_etherc モジュールストップ解除 init_phylsi PHY-LSI の初期化 init_etherc ETHERC の初期化 init_edmac EDMAC の初期化 割り込みコントローラの設定 ETHERC/EDMAC ソフトウェアリセット リンクモードの設定 MAC アドレスの設定 ETHERC ステータスのクリア return 個別のアドレスを IEEE から取得してください 送信および受信の許可 A 28

EDMAC モードレジスタ (EDMR) - ソフトウェアリセット - 内部バスクロックの 64 サイクル必要 29

ETHERC モードレジスタ (ECMR) - リンクモードの設定 - 30

MAC アドレスの設定 MAC アドレス上位設定レジスタ (MAHR) MAC アドレス下位設定レジスタ (MALR) 31

ETHERC ステータスレジスタ (ECSR) - ステータスクリア - 各ビット 1 を書き込むとクリアされる 32

ETHERC の初期化関数 // サンプルの MAC アドレス const static uint8_t mac_addr[6] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05}; void init_etherc( uint16_t autonego ) // 引数は自動交渉の結果 { volatile int i; /* ETHERC と EDMAC のリセット */ EDMAC.EDMR.BIT.SWR = 1; // 64/4[clock/loop] ETHERC と EDMAC は ICLK で動作 for( i = 0 ; i < 16 ; i++ ); /* リンクモードの設定 */ if( autonego & 0x0140 ){ ETHERC.ECMR.BIT.DM = 1; // 全二重 } else{ ETHERC.ECMR.BIT.DM = 0; // 半二重 } /* MAC アドレスの設定 ( 上位 32 下位 16) */ ETHERC.MAHR = (mac_addr[0]<<24) (mac_addr[1]<<16) (mac_addr[2]<<8) mac_addr[3]; ETHERC.MALR.BIT.MA = (mac_addr[4]<<8) mac_addr[5]; /* ステータスのクリア */ ETHERC.ECSR.LONG = 0x00000037; } init_etherc ETHERC/EDMAC ソフトウェアリセット リンクモードの設定 MAC アドレスの設定 ETHERC ステータスのクリア return 33

EDMAC の初期化フロー main モジュールストップ解除 init_edmac 送信および受信ディスクリプタの設定 init_phylsi PHY-LSI の初期化 init_etherc ETHERC の初期化 init_edmac EDMAC の初期化 割り込みコントローラの設定 ディスクリプタの登録エンディアンの設定 FIFO 容量の設定受信方式の設定 送信および受信の許可 ETHERC/EDMAC ステータスのクリア A 割り込みの許可 return 34

ディスクリプタ設定の事前準備 -RAM 領域に配置 - RAM 領域 16 バイト境界 16 バイト境界 送信ディスクリプタ 1 面 =16 バイト 送信ディスクリプタ 2 面 =16 バイト 送信ディスクリプタ 3 面 =16 バイト 送信ディスクリプタ 4 面 =16 バイト 受信ディスクリプタ 1 面 =16 バイト 受信ディスクリプタ 2 面 =16 バイト 受信ディスクリプタ 3 面 =16 バイト 受信ディスクリプタ 4 面 =16 バイト ユーザ領域 (4 バイト ) ユーザ領域 (4 バイト ) 35

送信ディスクリプタ - 送信ディスクリプタ無効の設定 - 0 ユーザ領域 36

送信ディスクリプタ - 送信フレーム内位置の設定 - 11 ユーザ領域 37

送信ディスクリプタ - 送信バッファアドレスの設定 - 32 バイト境界 RAM 領域 送信バッファの先頭アドレス ユーザ領域 TBL( 送信データ ) が 16 バイト以下の場合 送信バッファは 32 バイト境界に配置 38

送信ディスクリプタ - 送信ディスクリプタ最終の設定 - 16 バイト境界 RAM 領域 送信ディスクリプタ 1 面 =16 バイト 送信ディスクリプタ 2 面 =16 バイト 送信ディスクリプタ 3 面 =16 バイト 送信ディスクリプタ 4 面 =16 バイト 0 1 ユーザ領域 ユーザ領域 39

受信ディスクリプタ - 受信ディスクリプタ有効の設定 - 1 ユーザ領域 40

受信ディスクリプタ - 受信フレーム内位置の設定 - 11 ユーザ領域 41

受信ディスクリプタ - 受信バッファの設定 - 32 バイト境界 バッファ長 先頭アドレス 32 n バイト ユーザ領域 42

受信ディスクリプタ - 受信ディスクリプタ最終の設定 - 16 バイト境界 RAM 領域 受信ディスクリプタ 1 面 =16 バイト 受信ディスクリプタ 2 面 =16 バイト 受信ディスクリプタ 3 面 =16 バイト 受信ディスクリプタ 4 面 =16 バイト 0 ユーザ領域 1 ユーザ領域 43

ディスクリプタ用の構造体記述例 ユーザ領域 ビットオーダー : ライト or レフトバイトオーダー : リトル or ビッグ 44

ディスクリプタとバッファの RAM 領域への配置 リンケージエディタのオプションで RAM 上の 32 の倍数のアドレスを設定する ETHER セクション 32 バイト境界 送信ディスクリプタ 1 面 送信ディスクリプタ 2 面 送信ディスクリプタ 3 面 送信ディスクリプタ 4 面 受信ディスクリプタ 1 面 受信ディスクリプタ 2 面 受信ディスクリプタ 3 面 受信ディスクリプタ 4 面 送信用ポインタ 受信用ポインタ 送信バッファ 4 1532 受信バッファ 4 1532 45

ディスクリプタの設定記述例 0 0 1 1 送信ディスクリプタとバッファ バッファ 1 のアドレス ディスクリプタ 2 面のアドレス 0 0 1 1 バッファ 1 バッファ 2 のアドレス ディスクリプタ 3 面のアドレス 0 0 1 1 バッファ 2 バッファ 3 のアドレス ディスクリプタ 4 面のアドレス 0 1 1 1 バッファ 3 バッファ 4 のアドレス ディスクリプタ 1 面のアドレス バッファ 4 46

ディスクリプタの登録 - 先頭アドレス - 送信ディスクリプタリスト先頭アドレスレジスタ (TDLAR) 受信ディスクリプタリスト先頭アドレスレジスタ (RDLAR) RAM 領域 送信ディスクリプタ 1 面 =16 バイト 送信ディスクリプタ 2 面 =16 バイト 送信ディスクリプタ 3 面 =16 バイト 送信ディスクリプタ 4 面 =16 バイト 受信ディスクリプタ 1 面 =16 バイト 受信ディスクリプタ 1 面 =16 バイト 受信ディスクリプタ 1 面 =16 バイト 受信ディスクリプタ 1 面 =16 バイト 47

ディスクリプタの登録 - ディスクリプタ長 - EDMAC モードレジスタ (EDMR) RAM 領域 送信ディスクリプタ 1 面 =16 バイト 送信ディスクリプタ 2 面 =16 バイト 送信ディスクリプタ 3 面 =16 バイト 送信ディスクリプタ 4 面 =16 バイト 受信ディスクリプタ 1 面 =16 バイト 受信ディスクリプタ 2 面 =16 バイト 受信ディスクリプタ 3 面 =16 バイト 受信ディスクリプタ 4 面 =16 バイト 48

EDMAC モードレジスタ (EDMR) - エンディアンの設定 - 49

FIFO 容量指定レジスタ (FDR) -FIFO 容量の設定 - 50

受信方式制御レジスタ (RMCR) - 受信方式の設定 - 連続受信を有効 51

ETHERC/EDMAC ステータスレジスタ (EESR) - ステータスフラグのクリア - 各ビット 1 を書き込むとクリアされる 52

ETHERC/EDMAC ステータス割り込み許可レジスタ (EESIPR) - フレーム受信割り込み - 53

EDMAC の初期化関数 void init_edmac(void) { /* ディスクリプタリストの設定 */ _setdesc(); /* ディスクリプタリストの登録 */ // 送信ディスクリプタの先頭アドレス EDMAC.TDLAR = (void *)desc.snd; // 受信ディスクリプタの先頭アドレス EDMAC.RDLAR = (void *)desc.rcv; // ディスクリプタリスト長 =16 バイト EDMAC.EDMR.BIT.DL = 0; /* エンディアンの設定 ( リトルエンディアン ) */ EDMAC.EDMR.BIT.DE = 1; /* FIFO 容量 ( 送受信ともに 2048 バイト ) */ EDMAC.FDR.LONG = 0x00000707; /* 受信方式の設定 ( 連続受信を有効 ) */ EDMAC.RMCR.BIT.RNR = 1; /* ステータスのクリア */ EDMAC.EESR.LONG = 0x47FF0F9F; /* フレーム受信割り込み要求許可 */ EDMAC.EESIPR.BIT.FRIP = 1; } init_edmac 送信および受信ディスクリプタの設定 ディスクリプタの登録 エンディアンの設定 FIFO 容量の設定 受信方式の設定 ETHERC/EDMAC ステータスのクリア 割り込みの許可 return 54

割り込みコントローラの設定フロー main モジュールストップ解除 割り込みコントローラ CPU init_phylsi PHY-LSI の初期化 init_etherc ETHERC の初期化 ETHER の割り込み要求を許可 ETHER の IER( 許可 ) ETHER の IPR( 優先レベル ) init_edmac EDMAC の初期化 割り込み優先レベルを設定 割り込みコントローラの設定 送信および受信の許可 その他要因 A フレーム受信割り込み 55

割り込み要求許可レジスタ m(ierm)(m = 02h ~ 1Fh) ETHER 割り込み要求の設定 :IER04 C 言語マクロ表記 :IEN(ETHER,EINT) = 1; 56

割り込み要因プライオリティレジスタ m(iprm)(m= 00h~8Fh) ETHER 割り込み :IPR08 C 言語マクロ表記 :IPRETHER,EINT)=1; 57

送信および受信の許可 main モジュールストップ解除 init_phylsi PHY-LSI の初期化 init_etherc ETHERC の初期化 init_edmac EDMAC の初期化 割り込みコントローラの設定 送信および受信の許可 受信 EDMAC の起動 ETHERC の送信機能と受信機能を許可 送信 EDMAC は送信時に起動 A 58

EDMAC 受信要求レジスタ (EDRRR) - 受信 EDMAC の起動 - 59

ETHERC モードレジスタ (ECMR) - 送受信の許可 - 60

初期化プログラム void main(void) { uint16_t autonego; /* モジュールストップの解除 */ MSTP(EDMAC) = 0; /* PHY-LSI の初期化 */ autonego = init_phylsi(); /* ETEHRC の初期化 */ init_etherc( autonego ); /* EDMAC の初期化 */ init_edmac(); /* 割り込みコントローラの設定 */ // EINT 割り込み要求許可 IEN(ETHER,EINT) = 1; // EINT 割り込み優先レベル 1 IPR(ETHER,EINT) = 1; /* 送受信許可 */ // 受信 EDMAC の起動 EDMAC.EDRRR.BIT.RR = 1; // ETHERC 送信許可 ETHERC.ECMR.BIT.TE = 1; // ETHERC 受信許可 ETHERC.ECMR.BIT.RE = 1; main モジュールストップ解除 init_phylsi PHY-LSI の初期化 init_etherc ETHERC の初期化 init_edmac EDMAC の初期化 割り込みコントローラの設定 送信および受信の許可 A 61

送信処理 ETHER 割り込み main A ステータスの確認 モジュールストップ解除 snd_frame イーサネットフレームの送信 フレーム受信割り込み? Yes No init_phylsi PHY-LSI の初期化 No 10 フレーム送信完了? rcv_frame イーサネットフレームの受信 init_etherc ETHERC の初期化 Yes 10 フレーム目? No Yes init_edmac EDMAC の初期化 フレーム受信割り込みを禁止 割り込みコントローラの設定 ステータスのクリア 0 が読み出せるまで待つ 送信および受信の許可 A No 割り込み要求なし? Yes END 初期化送信受信 62

送信関数の仕様 概要 宣言 説明 1 フレーム送信 int snd_frame(void *data, int size); 引数に指定されたフレームを 送信バッファにコピーして 次に書き込むディスクリプタの位置 ( 面 ) を更新します また 送信ディスクリプタが停止していれば再起動します 引数 void *data int size 送信フレームの先頭アドレス 送信フレームのバイト数 戻り値 バッファに書き込んだバイト数 ( 書き込み先が有効でない場合は 0 を返します ) 注意事項 本関数は 送信バッファに書き込み後 送信完了を待たずに呼び出し元に戻ります 63

送信関数のフロー (1) snd_frame ディスクリプタを示すポインタ 送信ディスクリプタを示すポインタの取得 送信中? Yes No 送信バッファにデータをコピー データ長を設定 送信ディスクリプタを有効に設定 EDMAC 停止中? Yes 送信 EDMAC を起動 No : 送信バッファ 送信ディスクリプタを示すポインタの更新 return 64

送信関数のフロー (2) snd_frame ディスクリプタを示すポインタ 送信ディスクリプタを示すポインタの取得 送信中? Yes No 送信バッファにデータをコピー データ長を設定 送信ディスクリプタを有効に設定 EDMAC 停止中? Yes 送信 EDMAC を起動 No : 送信バッファ 送信ディスクリプタを示すポインタの更新 return 65

送信関数のフロー (3) snd_frame 送信ディスクリプタを示すポインタの取得 ディスクリプタを示すポインタ 0 送信中? Yes No 送信バッファにデータをコピー サイズ データ長を設定 送信ディスクリプタを有効に設定 EDMAC 停止中? Yes 送信 EDMAC を起動 No 1 フレーム : 1 フレーム 送信バッファ 送信ディスクリプタを示すポインタの更新 return 66

送信関数のフロー (4) snd_frame 送信ディスクリプタを示すポインタの取得 ディスクリプタを示すポインタ 1 送信中? Yes No 送信バッファにデータをコピー データ長を設定 送信ディスクリプタを有効に設定 EDMAC 停止中? Yes 送信 EDMAC を起動 No : 1 フレーム 送信バッファ 送信ディスクリプタを示すポインタの更新 return 67

EDMAC 送信要求レジスタ (EDTRR) 68

送信関数のフロー (5) snd_frame ディスクリプタを示すポインタ 送信ディスクリプタを示すポインタの取得 送信中? Yes No 送信バッファにデータをコピー データ長を設定 送信ディスクリプタを有効に設定 EDMAC 停止中? Yes 送信 EDMAC を起動 No : 1 フレーム 送信バッファ 送信ディスクリプタを示すポインタの更新 return 69

1 フレーム送信関数 int snd_frame(void *data, int size) { int i; int datalen = 0; volatile SND_DESC *snd_top; uint8_t *frame = data; // 送信ディスクリプタを示すポインタの取得 snd_top = getsndtop(); if( snd_top->td0.bit.tact == 0 ){ datalen = size; for( i=0; i<datalen; i++){ *(snd_top->td2.tba+i) = *(frame+i); } snd_top->td1.tbl = datalen; snd_top->td0.bit.tact = 1; if( EDMAC.EDTRR.BIT.TR == 0 ){ EDMAC.EDTRR.BIT.TR = 1; } // 送信ディスクリプタを示すポインタの更新 updatesndtop(); } return datalen; } 70

受信 ETHER 割り込み main A ステータスの確認 モジュールストップ解除 snd_frame イーサネットフレームの送信 フレーム受信割り込み? Yes No init_phylsi PHY-LSI の初期化 No 10 フレーム送信完了? rcv_frame イーサネットフレームの受信 init_etherc ETHERC の初期化 Yes 10 フレーム目? No Yes init_edmac EDMAC の初期化 フレーム受信割り込みを禁止 割り込みコントローラの設定 ステータスのクリア 0 が読み出せるまで待つ 送信および受信の許可 A No 割り込み要求なし? Yes END 初期化送信受信 71

受信関数の仕様 概要 宣言 説明 1 フレーム受信 int rcv_frame(void *buff); 引数で指定されたバッファに 受信データをコピーして 次に読み出すディスクリプタの位置 ( 面 ) を更新します また 受信ディスクリプタが停止していれば再起動します 引数 void *buff コピー先バッファの先頭アドレス 戻り値 バッファにコピーしたバイト数 ( エラー受信または受信データがない場合は 0 を返します ) 注意事項 なし 72

受信関数のフロー (1) rcv_frame ディスクリプタを示すポインタ 受信ディスクリプタを示すポインタの取得 受信待ち? Yes No 正常受信? Yes 受信バッファの読み出し No 受信ディスクリプタを有効に設定 EDMAC 停止中? Yes 受信 EDMAC を起動 No : 受信バッファ 受信ディスクリプタを示すポインタの更新 return 73

受信関数のフロー (2) rcv_frame 受信ディスクリプタを示すポインタの取得 受信待ち? Yes ディスクリプタを示すポインタ No No 正常受信? Yes 受信バッファの読み出し サイズ 0 0 正常受信? 受信データ長 受信ディスクリプタを有効に設定 EDMAC 停止中? Yes 受信 EDMAC を起動 No 1 フレーム : 1 フレーム 受信バッファ 受信ディスクリプタを示すポインタの更新 return 74

受信関数のフロー (3) rcv_frame 受信ディスクリプタを示すポインタの取得 ディスクリプタを示すポインタ 1 受信待ち? Yes No 正常受信? Yes 受信バッファの読み出し No 受信ディスクリプタを有効に設定 EDMAC 停止中? Yes 受信 EDMAC を起動 No : 受信バッファ 受信ディスクリプタを示すポインタの更新 return 75

受信関数のフロー (4) rcv_frame ディスクリプタを示すポインタ 受信ディスクリプタを示すポインタの取得 受信待ち? Yes No 正常受信? Yes 受信バッファの読み出し No 受信ディスクリプタを有効に設定 EDMAC 停止中? Yes 受信 EDMAC を起動 No : 受信バッファ 受信ディスクリプタを示すポインタの更新 return 76

1 フレーム受信関数 int rcv_frame(void *buff) { int i; int datalen = 0; volatile RCV_DESC *rcv_end; uint8_t *rcv_buff = buff; // 受信ディスクリプタを示すポインタの取得 rcv_end = getrcvend(); if( rcv_end->rd0.bit.ract == 0 ){ if( rcv_end->rd0.bit.rfe == 0 ){ datalen = rcv_end->rd1.rfl; for( i=datalen; i>=0; i--){ *(rcv_buff+i) = *(rcv_end->rd2.rba+i); } } rcv_end->rd0.bit.ract = 1; if( EDMAC.EDRRR.BIT.RR == 0 ){ EDMAC.EDRRR.BIT.RR = 1; } // 受信ディスクリプタを示すポインタの更新 updatercvend(); } return datalen; } rcv_frame 受信ディスクリプタを示すポインタの取得 受信待ち? return Yes No 正常受信? Yes 受信バッファの読み出し 受信ディスクリプタを有効に設定 EDMAC 停止中? Yes 受信 EDMAC を起動 受信ディスクリプタを示すポインタの更新 No No 77

PHY-LSI の注意点 78

インタフェース対応 RX63N RX63N OR #if ETH_MODE_SEL == ETH_RMII_MODE MII インタフェースの処理 #endif #if ETH_MODE_SEL == ETH_MII_MODE #endif RMII インタフェースの処理 79

PHY アドレス対応 #define PHY_ADDR 0x1 80

MII レジスタのビット構成対応 MII レジスタ 0 番 b15 b14 b13 b12 b11 b10 b9 b8 Reset Loopback Speed Select A/N Enable Power Down Isolate Restart A/N Duplex Mode b7 b6 b5 b4 b3 b2 b1 b0 Collision Test Reserved Reserved Reserved Reserved Reserved Reserved Reserved /* Reset PHY */ _phy_write(basic_mode_control_reg, 0x8000); MII レジスタ = ライトレジスタ番号 =0 最上位ビットを 1= リセット 81

END ルネサスエレクトロニクス株式会社