エンベデッド・ペリフェラル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ジェネレーター・コア

13.4.1.2. ドライバーの実装

割り込みが送信側または受信側のコールバックとともにサポートされている場合、開いているMailboxインスタンスは、送信側もしくは受信側の割り込みサービスルーチン (ISR) を登録します。Mailbox割り込みが無効になっている場合は、ISRは登録されず、ポーリングモードを使用する必要があります。Mailboxドライバーは、使用していない場合に閉じる必要があります。

表 112.  MailboxのAPI
関数名 説明
altera_avalon_mailbox_send Mailboxにメッセージを送信します。
altera_avalon_mailbox_status Mailboxの現在の状態を照会します。
altera_avalon_mailbox_retrieve_poll MailboxのPointerレジスターから読み出し、メッセージを取得します。
altera_avalon_mailbox_open Mailboxへのハンドルを要求し、他のすべての関数がMailboxコアにアクセスできるようにします。
altera_avalon_mailbox_close Mailboxへのハンドルを閉じます。
表 113.  altera_avalon_mailbox_open
プロトタイプ altera_avalon_mailbox_dev* altera_avalon_mailbox_open (const char* name, altera_mailbox_tx_cb tx_callback, altera_mailbox_rx_cb rx_callback)
インクルード <altera_avalon_mailbox_simple.h>
パラメーター

name — 開くMailboxデバイス名。

tx_callback – コールバック関数を提供するユーザーで、メッセージの送信が完了した際に通知を行います。

rx_callback – コールバック関数を提供するユーザーで、メッセージを受信した際に通知を行います。
戻り値 Mailboxへのポインター
説明

altera_avalon_mailbox_open() は、Mailboxデバイスポインターを検索して登録します。この関数はまた、割り込みが有効なMailboxの割り込みハンドラーとユーザー・コールバック関数を登録します。

表 114.  altera_avalon_mailbox_close
プロトタイプ void altera_avalon_mailbox_close (altera_avalon_mailbox_dev* dev);
インクルード <altera_avalon_mailbox_simple.h>
パラメーター dev — 閉じるMailbox。
戻り値 Null
説明 alt_avalon_mailbox_close() は、Mailboxを閉じ、割り込みハンドラーとコールバック関数の登録を解除して、Mailbox割り込みをマスクします。
表 115.  altera_avalon_mailbox_send
プロトタイプ int altera_avalon_mailbox_send (altera_avalon_mailbox_dev* dev, void* message, int timeout, EventType event)
インクルード <altera_avalon_mailbox_simple.h>
パラメーター

*message – メッセージのコマンドとポインター構造へのポインター。

timeout – メッセージを送信する前のループ数を指定します。「0」の値を指定すると、メッセージが転送されるまで待機します。

EventType – 「POLL」または「ISR」を設定します。

戻り値 成功した場合は0を返し、失敗した場合は1を返します。
説明

altera_avalon_mailbox_send () は、Mailboxにメッセージを送信します。これは、送信側の割り込みが無効になっている場合はブロッキング関数です。

割り込みが有効になっている場合、この関数はノンブロッキングです。

表 116.  altera_avalon_mailbox_retrieve_poll
プロトタイプ int altera_avalon_mailbox_retrieve_poll (altera_avalon_mailbox_dev* dev,alt_u32* msg_ptr, alt_u32 timeout)
インクルード <altera_avalon_mailbox_simple.h>
パラメーター

dev - メッセージが読み出されるMailboxデバイス。

timeout – メッセージを送信する前のループ数を指定します。「0」の値を指定すると、メッセージが取得されるまで待機します。

msg_ptr – コマンドとメッセージのポインターに対する2つのDwordの配列へのポインターです。このポインターには、成功した場合は受信メッセージが、エラーの場合はNULLが含まれます。
戻り値 メッセージへのポインターとコマンドを返します。タイムアウトした場合は、メッセージで「NULL」を返します。これはブロッキング関数です。
説明

altera_avalon_mailbox_retrieve_poll () は、Mailbox構造へのメッセージのポインターとコマンドをMailboxから読み出し、コールバックを介して通知します。

表 117.  altera_avalon_mailbox_status
プロトタイプ alt_u32 altera_avalon_mailbox_status (altera_avalon_mailbox_dev* dev)
インクルード <altera_avalon_mailbox_simple.h>
パラメーター

dev -ステータスが読み出されるMailboxデバイス

戻り値

受信Mailboxの場合

- 0は、保留中のメッセージがないことを示します。

- 1は、メッセージが保留されていることを示します。

送信Mailboxの場合

- 0は、Mailboxが空であることを示します (送信準備が完了している)

- 1は、Mailboxがフルであることを示します (送信準備が完了していない)

説明

Mailboxが転送に対してフルの状態であるか空の状態であるかを送信側に示します。

Mailboxに保留中のメッセージがあるかを受信側に示します。

デバイスの構造

// Callback routine type definition
typedef void(*altera_mailbox_rx_cb)(void *message);
typedefvoid (*altera_mailbox_tx_cb)(void *message,int status);

typedef enum mbox_type { MBOX_TX = 0,MBOX_RX } MboxType;
typedef enum event_type { ISR = 0, POLL } EventType;

typedef struct altera_avalon_mailbox_dev
{    
	alt_dev                 dev;                  
	/* Device linke-list entry */
    
	alt_u32                 base;                 
	/* Base address of Mailbox */
    
	alt_u32                 mailbox_irq;          
	/* Mailbox IRQ */
    
	alt_u32                 mailbox_intr_ctrl_id; 
	/* Mailbox IRQ ID */  
  
	altera_mailbox_tx_cb    tx_cb;                
	/* Callback routine pointer */ 
   
	altera_mailbox_rx_cb    rx_cb;                
	/* Callback routine pointer */   
 
	MboxType                mbox_type;            
	/* Mailbox direction */  
  
	alt_u32*                mbox_msg;             
	/* a pointer to message array to be received or sent */
    
	alt_u8                  lock;                 
	/* Token to indicate mbox_msg already taken */ 
   
	ALT_SEM                 (write_lock)          
	/* Semaphore used to control access to the write in multi-threaded mode */
} 
altera_avalon_mailbox_dev;