インテルのみ表示可能 — GUID: iga1444170773742
Ixiasoft
インテルのみ表示可能 — GUID: iga1444170773742
Ixiasoft
13.4.1.2. ドライバーの実装
割り込みが送信側または受信側のコールバックとともにサポートされている場合、開いているMailboxインスタンスは、送信側もしくは受信側の割り込みサービスルーチン (ISR) を登録します。Mailbox割り込みが無効になっている場合は、ISRは登録されず、ポーリングモードを使用する必要があります。Mailboxドライバーは、使用していない場合に閉じる必要があります。
関数名 | 説明 |
---|---|
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へのハンドルを閉じます。 |
プロトタイプ | 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の割り込みハンドラーとユーザー・コールバック関数を登録します。 |
プロトタイプ | void altera_avalon_mailbox_close (altera_avalon_mailbox_dev* dev); |
インクルード | <altera_avalon_mailbox_simple.h> |
パラメーター | dev — 閉じるMailbox。 |
戻り値 | Null |
説明 | alt_avalon_mailbox_close() は、Mailboxを閉じ、割り込みハンドラーとコールバック関数の登録を解除して、Mailbox割り込みをマスクします。 |
プロトタイプ | 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にメッセージを送信します。これは、送信側の割り込みが無効になっている場合はブロッキング関数です。 割り込みが有効になっている場合、この関数はノンブロッキングです。 |
プロトタイプ | 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から読み出し、コールバックを介して通知します。 |
プロトタイプ | 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;