エンベデッド・ペリフェラルIPユーザーガイド

ID 683130
日付 9/21/2020
Public
ドキュメント目次
1. 概要 2. Avalon® -ST Multi-Channel Shared Memory FIFOコア 3. Avalon® -STシングルクロックFIFOコアおよびデュアルクロックFIFOコア 4. Avalon® -STシリアル・ペリフェラル・インターフェイス・コア 5. SPIコア 6. SPI Slave to Avalon® Master Bridgeコア/JTAG to Avalon® Master Bridgeコア 7. インテル eSPIスレーブコア 8. eSPI to LPCブリッジコア 9. イーサネットMDIOコア 10. インテルFPGA 16550互換UARTコア 11. UARTコア 12. JTAG UARTコア 13. インテル FPGA Avalon® Mailboxコア 14. インテル FPGA Avalon® ミューテックス・コア 15. インテル FPGA Avalon® I2C (Master) コア 16. インテル FPGA I2C Slave to Avalon® -MM Master Bridgeコア 17. インテルFPGA Avalon® コンパクト・フラッシュ・コア 18. EPCS/EPCQAシリアル・フラッシュ・コントローラー・コア 19. インテルFPGAシリアル・フラッシュ・コントローラー・コア 20. インテルFPGAシリアル・フラッシュ・コントローラーIIコア 21. インテルFPGA汎用クアッドSPIコントローラー・コア 22. インテルFPGA汎用クアッドSPIコントローラーIIコア 23. インターバル・タイマー・コア 24. インテルFPGA Avalon FIFOメモリーコア 25. オンチップメモリー (RAMおよびROM) コア 26. Optrex 16207 LCDコントローラー・コア 27. PIOコア 28. PLLコア 29. DMAコントローラー・コア 30. Modular Scatter-Gather DMAコア 31. Scatter-Gather DMAコントローラー・コア 32. SDRAMコントローラー・コア 33. トライステートSDRAMコア 34. Video Sync GeneratorコアとPixel Converterコア 35. インテル FPGA Interrupt Latency Counterコア 36. パフォーマンス・カウンター・ユニット・コア 37. ベクトル割り込みコントローラー・コア 38. Avalon® -STデータ・パターン・ジェネレーター・コアとデータ・パターン・チェッカー・コア 39. Avalon® -STテスト・パターン・ジェネレーター・コアとテスト・パターン・チェッカー・コア 40. システムIDペリフェラル・コア 41. Avalon® Packets to Transactions Converterコア 42. Avalon® -STマルチプレクサー・コアとデマルチプレクサー・コア 43. Avalon® -ST Bytes to Packets ConverterコアとPackets to Bytes Converterコア 44. Avalon® -ST Delayコア 45. Avalon® -STラウンド・ロビン・スケジューラー・コア 46. Avalon® -ST Splitterコア 47. Avalon® -MM DDR Memory Half Rate Bridgeコア 48. インテル FPGA GMII to RGMIIコンバーター・コア 49. インテル FPGA MII to RMIIコンバーター・コア 50. インテルFPGA HPS GMII to TSE 1000BASE-X/SGMII PCSブリッジコア 51. インテル FPGA HPS EMAC to Multi-rate PHY GMIIアダプターコア 52. インテル FPGA MSI to GICジェネレーター・コア

15.8. インテル FPGA Avalon® I2C (Master) コアのAPI

表 133.  alt_avalon_i2c_open
プロトタイプ ALT_AVALON_I2C_DEV_t* alt_avalon_i2c_open(const char* name)
インクルード <altera_avalon_i2c.h>
パラメーター
  • name - HALで登録されているI2Cペリフェラルの名前への文字ポインター

例: i2c_0と名付けられているI2Cコントローラーをプラットフォーム・デザイナーで開くには、/dev/i2c_0を使用します。

戻り値
  • NULL - 失敗時の戻り値はNULLです。
  • NULL以外 - 成功であり、I2Cデバイス・インスタンスへのptrを返します。
説明

I2Cブロック・インスタンスへのポインターを取得します。登録されているI2Cインスタンスのリストで、指定されている名前を検索します。

表 134.  alt_avalon_i2c_register_optional_irq_handler
プロトタイプ void alt_avalon_i2c_register_optional_irq_handler(ALT_AVALON_I2C_DEV_t *i2c_dev, IRQ_DATA_t * irq_data)
インクルード <altera_avalon_i2c.h>
パラメーター
  • i2c_dev – I2Cデバイス (インスタンス) 構造へのポインター
  • irq data – 割り込みハンドラーのデータに使用される構造
戻り値 -
説明 オプションで提供されるユーザー割り込みコールバック・ルーチンをI2Cハンドラーに関連付けます。これはシンプルなIRQコールバックであり、オプションのコールバックでデバイスとのデータの受信または送信、およびトランザクションの完了を処理している間に、I2Cトランザクション関数がすぐに返ることを可能にします。このオプションのコールバックは、IRQ_DATA_t構造をIRQデータに使用します。

alt_avalon_i2c_interrupt_transaction_status関数を使用し、IRQトランザクションが完了しているか、またはトランザクション・エラーがないかを確認することができます。オプションで提供されるこれらの割り込みルーチンは機能しますが、主に、 Avalon® I2C (Master) コアで割り込みを使用する作業例として提供されています。

より詳細なirqコールバック・ルーチンを特定のデバイス・ハードウェアに合わせて開発する場合は、ユーザー・コールバックをalt_avalon_i2c_register_callback関数で登録する必要があります。

オプションで提供されるこのユーザー・コールバック・ルーチンを使用すると、次の関数が利用できるようになります。
  • alt_avalon_i2c_master_receive_using_interrupts
  • alt_avalon_i2c_master_transmit_using_interrupts
表 135.  alt_avalon_i2c_register_callback
プロトタイプ void alt_avalon_i2c_register_callback (ALT_AVALON_I2C_DEV_t *i2c_dev, alt_avalon_i2c_callback callback, alt_u32 control, void *context)
インクルード <altera_avalon_i2c.h>
パラメーター
  • dev - I2Cデバイス (インスタンス) 構造へのポインター
  • callback - 割り込みレベルで実行されるコールバック・ルーチンへのポインター
  • control - ソースの割り込みをマスクし、コンフィグレーションを設定します
  • context - コールバック・コンテキスト
戻り値 -
説明

ユーザー固有のルーチンをI2C割り込みハンドラーに関連付けます。コールバックが登録されている場合、有効になっているすべてのISRにより、コールバックが実行されます。

コールバックは、割り込みサービスルーチンの一部として実行されます。

オプションのユーザー・コールバック・ルーチンがこのコードで提供されます。使用されている場合は、次の関数の利用が可能になります。
  • alt_avalon_i2c_master_receive_using_interrupts
  • alt_avalon_i2c_master_transmit_using_interrupts
オプションで提供されるユーザー・コールバックを登録するには、alt_avalon_i2c_register_optional_irq_handler関数を使用します。
表 136.  alt_avalon_i2c_master_tx
プロトタイプ alt_avalon_i2c_master_tx (ALT_AVALON_I2C_DEV_t *i2c_dev, alt_u8 * buffer, const alt_u32 size, const alt_u8 use_interrupts)
インクルード <altera_avalon_i2c.h>
パラメーター
  • dev - I2Cデバイス (インスタンス) 構造へのポインター
  • buffer - I2Cデータを送信するデータバッファー
  • size - I2Cバスに書き込むデータバッファーのサイズ
  • use_interrupts - オプションのユーザー割り込みハンドラー・コールバックを使用し、データの送信を処理します
戻り値 ALT_AVALON_I2C_SUCCESSは、成功ステータスを示します。それ以外の場合は、ALT_AVALON_I2C_*ステータスコードのいずれかが返されます。失敗した場合の戻り値はすべて< 0です。
説明

この関数では、STARTに続いてI2Cコマンドバイトを送信します。次に、書き込み要求が送信されて書き込み要求を遂行します。最終トランザクションでは、STOPが発行されます。

このAPIは、割り込みコンテキストでの呼び出しには適していません。特定のコントローラーの状態を待機してから完了する可能性があります。この関数を使用する前に、ターゲットアドレスを設定している必要があります。ALT_AVALON_I2C_ARB_LOST_ERRALT_AVALON_I2C_NACK_ERR、またはALT_AVALON_I2C_BUSYが発生すると、このコマンドは再試行されます。

use_interruptsパラメーターが1の場合、すべてのcmdバイトがコマンドFIFOに書き込まれるとすぐに、この関数は返されます。割り込みハンドラーは次に、デバイスがrxデータを送信するまで待機する処理を行い、その後I2Cトランザクションを完了します。このオプションを使用するには、提供されているオプションのユーザー割り込みハンドラー・コールバックを登録している必要があります。登録には、alt_avalon_i2c_register_optional_irq_handler関数を呼び出します。

表 137.  alt_avalon_i2c_master_rx
プロトタイプ alt_avalon_i2c_master_rx (ALT_AVALON_I2C_DEV_t *i2c_dev, alt_u8 * buffer, const alt_u32 size, const alt_u8 use_interrupts)
インクルード <altera_avalon_i2c.h>
パラメーター
  • dev - I2Cデバイス (インスタンス) 構造へのポインター
  • buffer - I2Cデータを受信するデータバッファー
  • size - I2Cバスに書き込むデータバッファーのサイズ
  • use_interrupts - オプションのユーザー割り込みハンドラー・コールバックを使用し、データの受信を処理します
戻り値 ALT_AVALON_I2C_SUCCESSは、成功ステータスを示します。それ以外の場合は、ALT_AVALON_I2C_*ステータスコードのいずれかが返されます。失敗した場合の戻り値はすべて< 0です。
説明

この関数では、STARTに続いてI2Cコマンドバイトを送信します。次に、読み出し要求が送信されて読み出し要求を遂行します。最終トランザクションではSTOPが発行されます。

このAPIは、割り込みコンテキストでの呼び出しには適していません。特定のコントローラーの状態を待機してから完了する可能性があります。

この関数を使用する前に、ターゲットアドレスを設定している必要があります。

ALT_AVALON_I2C_ARB_LOST_ERR、ALT_AVALON_I2C_NACK_ERR、またはALT_AVALON_I2C_BUSYが発生すると、このコマンドは再試行されます。スレーブデバイスでデータを受け入れる準備ができていない場合は、ALT_AVALON_I2C_NACK_ERRが発生します。use_interruptsパラメーターが1の場合、すべてのcmdバイトがコマンドFIFOに書き込まれるとすぐに、この関数は返されます。割り込みハンドラーは次に、デバイスがrxデータを送信するまで待機する処理を行い、その後I2Cトランザクションを完了します。このオプションを使用するには、提供されているオプションのユーザー割り込みハンドラー・コールバックを登録している必要があります。登録には、alt_avalon_i2c_register_optional_irq_handler関数を呼び出します。
表 138.  alt_avalon_i2c_master_tx_rx
プロトタイプ alt_avalon_i2c_master_tx_rx (ALT_AVALON_I2C_DEV_t *i2c_dev, const alt_u8 * txbuffer, const alt_u32 txsize, alt_u8 * rxbuffer, const alt_u32 rxsize, const alt_u8 use_interrupts)
インクルード <altera_avalon_i2c.h>
パラメーター
  • dev - I2Cデバイス (インスタンス) 構造へのポインター
  • txdata - 送信データバッファー
  • txsize - I2Cバスに書き込む送信データバッファーのサイズ
  • rxdata - 受信データバッファー
  • rxsize - 受信データバッファーのサイズ
  • use_interrupts - オプションのユーザー割り込みハンドラー・コールバックを使用し、データの送受信を処理します
戻り値 ALT_AVALON_I2C_SUCCESSは、成功ステータスを示します。それ以外の場合は、ALT_AVALON_I2C_*ステータスコードのいずれかが返されます。失敗した場合の戻り値はすべて< 0です。
説明

この関数では、STARTに続いてI2Cコマンドバイトを送信します。次に、書き込み要求が送信されて書き込み要求を遂行します。RESTARTが発行されると、読み出し要求は、読み出し要求が満たされるまで送信されます。最終トランザクションではSTOPが発行されます。

ALT_AVALON_I2C_ARB_LOST_ERR、ALT_AVALON_I2C_NACK_ERR、またはALT_AVALON_I2C_BUSYが発生すると、このコマンドは再試行されます。このAPIは、割り込みコンテキストでの呼び出しには適していません。特定のコントローラーの状態を待機してから完了する可能性があります。この関数を使用する前に、ターゲットアドレスを設定している必要があります。

スレーブデバイスでこれ以上のデータを受け入れる、もしくはデータを送信する準備ができていない場合は、ALT_AVALON_I2C_NACK_ERRが発生します。このコマンドを使用すると、読み出しを行う前に内部レジスターアドレスの設定が必要なデバイス (EEPROMデバイスなど) のアクセスが容易になります。

例: EEPROMで、メモリー読み出しを行う前に2バイトのアドレスを送信する必要がある場合は、TXバッファーに2バイトのアドレスが含まれ、txsizeは2に設定されます。次に、rxbufferはEEPROMから読み出されるrxsizeのバイト数を受信します。次を参照してください。
To Read 0x10 bytes from EEPROM at I2C address 0x51 into buffer:
buffer[0]=2;buffer[1]=0; //set eeprom address 0x200
alt_avalon_i2c_master_tx_rx(i2c_ptr,buffer,2,buffer,0x10,0);

必要な場合は、TXバッファーとRXバッファーを同じバッファーにすることができます。

use_interruptsパラメーターが1の場合、すべてのcmdバイトがコマンドFIFOに書き込まれるとすぐに、この関数は返されます。割り込みハンドラーは次に、デバイスがrxデータを送信するまで待機する処理を行い、その後I2Cトランザクションを完了します。このオプションを使用するには、提供されているオプションのユーザー割り込みハンドラー・コールバックを登録している必要があります。登録には、alt_avalon_i2c_register_optional_irq_handler関数を呼び出します。
表 139.  alt_avalon_i2c_interrupt_transaction_status
プロトタイプ このAPIは、analt_avalon_i2c_interrupt_transaction_status (ALT_AVALON_I2C_DEV_t *i2c_dev) での呼び出しには適していません。
インクルード <altera_avalon_i2c.h>
パラメーター dev - I2Cコントローラー・デバイス・ブロック・インスタンスへのポインター
戻り値

ALT_AVALON_I2C_SUCCESSは、割り込みトランザクションが正常に完了したことを示します。これが示されると、別のトランザクションを開始することができます。

ALT_AVALON_I2C_BUSYは、割り込みトランザクションが現在もビジー状態であることを示します。

ALT_AVALON_NACK_ERRORは、デバイスが肯定応答していないことを示します。これは主に、デバイスが前のトランザクションでビジー状態であることが原因だと考えられます。トランザクションを再試行する必要があります。

それ以外の場合は、他のALT_AVALON_I2C_*ステータスコードのいずれかが返されます。トランザクションを再試行する必要があります。

失敗した場合の戻り値はすべて< 0です。
説明 alt_avalon_i2c_master_tx、alt_avalon_i2c_master_rx、またはalt_avalon_i2c_master_tx_rx関数を使用し、割り込みオプションを設定して割り込みトランザクションを開始している場合、もしくはalt_avalon_i2c_master_transmit_using_interruptsまたはalt_avalon_i2c_master_receive_using_interrupts関数を使用している場合は、この関数を使用してそのトランザクションのステータスを確認することができます。エラーのない連続トランザクションを保証する唯一の方法は、すべての割り込みトランザクションの後にこの関数を使用し、トランザクションがエラーなく完了していることを確認してから次のトランザクションを開始することです。また、この関数からエラーが返されている場合は、I2Cトランザクションを再試行する必要があります。エラーが返される理由の1つは、デバイスがビジー状態の場合です。これは、連続するトランザクションを実行している場合に発生することがあります。