インテルのみ表示可能 — GUID: vpj1541706408433
Ixiasoft
インテルのみ表示可能 — GUID: vpj1541706408433
Ixiasoft
15.8. インテル FPGA Avalon® I2C (Master) コアのAPI
プロトタイプ | ALT_AVALON_I2C_DEV_t* alt_avalon_i2c_open(const char* name) |
インクルード | <altera_avalon_i2c.h> |
パラメーター |
例: i2c_0と名付けられているI2Cコントローラーをプラットフォーム・デザイナーで開くには、/dev/i2c_0を使用します。 |
戻り値 |
|
説明 | I2Cブロック・インスタンスへのポインターを取得します。登録されているI2Cインスタンスのリストで、指定されている名前を検索します。 |
プロトタイプ | 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ハンドラーに関連付けます。これはシンプルなIRQコールバックであり、オプションのコールバックでデバイスとのデータの受信または送信、およびトランザクションの完了を処理している間に、I2Cトランザクション関数がすぐに返ることを可能にします。このオプションのコールバックは、IRQ_DATA_t構造をIRQデータに使用します。 alt_avalon_i2c_interrupt_transaction_status関数を使用し、IRQトランザクションが完了しているか、またはトランザクション・エラーがないかを確認することができます。オプションで提供されるこれらの割り込みルーチンは機能しますが、主に、 Avalon® I2C (Master) コアで割り込みを使用する作業例として提供されています。 より詳細なirqコールバック・ルーチンを特定のデバイス・ハードウェアに合わせて開発する場合は、ユーザー・コールバックを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> |
パラメーター |
|
戻り値 | - |
説明 | ユーザー固有のルーチンをI2C割り込みハンドラーに関連付けます。コールバックが登録されている場合、有効になっているすべてのISRにより、コールバックが実行されます。 コールバックは、割り込みサービスルーチンの一部として実行されます。 オプションのユーザー・コールバック・ルーチンがこのコードで提供されます。使用されている場合は、次の関数の利用が可能になります。
|
プロトタイプ | 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> |
パラメーター |
|
戻り値 | 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が発生すると、このコマンドは再試行されます。 use_interruptsパラメーターが1の場合、すべてのcmdバイトがコマンドFIFOに書き込まれるとすぐに、この関数は返されます。割り込みハンドラーは次に、デバイスがrxデータを送信するまで待機する処理を行い、その後I2Cトランザクションを完了します。このオプションを使用するには、提供されているオプションのユーザー割り込みハンドラー・コールバックを登録している必要があります。登録には、alt_avalon_i2c_register_optional_irq_handler関数を呼び出します。 |
プロトタイプ | 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> |
パラメーター |
|
戻り値 | 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関数を呼び出します。 |
プロトタイプ | 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> |
パラメーター |
|
戻り値 | 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関数を呼び出します。 |
プロトタイプ | この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つは、デバイスがビジー状態の場合です。これは、連続するトランザクションを実行している場合に発生することがあります。 |