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

ID 683130
日付 9/21/2020
Public

インテルのみ表示可能 — GUID: iga1457465685895

Ixiasoft

ドキュメント目次
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ジェネレーター・コア

37.6.2.1. alt_ic_isr_register() とalt_irq_register()

拡張API関数のalt_ic_isr_register() は、レガシー関数のalt_irq_register() に非常に類似しています。ただし、いくつかの重要な違いがあります。これら2つの関数の違いは、2つのAPIにおけるISRのレジスター のコードを確認することで理解することができます。この例では、ボード・サポート・パッケージ (BSP) に実装されているレガシーAPIまたは拡張APIのいずれかにタイマー割り込みを登録します。この例は、このドキュメントに付属するコード例から直接引用されています。

2つのAPIにおけるISRのレジスター

#ifdef ALT_ENHANCED_INTERRUPT_API_PRESENT
void timer_interrupt_latency_init (void* base, alt_u32 irq_controller_id, alt_u32 irq)
{
  /* Register the interrupt */
  alt_ic_isr_register(irq_controller_id, irq, timer_interrupt_latency_irq, base, NULL);
  /* Start timer */
  IOWR_ALTERA_AVALON_TIMER_CONTROL(base, ALTERA_AVALON_TIMER_CONTROL_ITO_MSK
  | ALTERA_AVALON_TIMER_CONTROL_START_MSK);
}
#else
void timer_interrupt_latency_init (void* base, alt_u32 irq)
{
  /* Register the interrupt */
  alt_irq_register(irq, base, timer_interrupt_latency_irq);
  /* Start timer */
  IOWR_ALTERA_AVALON_TIMER_CONTROL(base, ALTERA_AVALON_TIMER_CONTROL_ITO_MSK
  | ALTERA_AVALON_TIMER_CONTROL_START_MSK);
}
#endif

2つのAPIにおけるISRのレジスター の最初の行では、BSPが拡張割り込みAPIを実装しているかを検出します。拡張APIが実装されている場合、timer_interrupt_latency_init() 関数は拡張関数を呼び出します。そうでない場合、timer_interrupt_latency_init() はレガシー割り込みAPI関数に戻ります。

BSPで実装するAPIを Nios® IIソフトウェア・ビルド・ツールで選択する方法に関しては、 Nios® II Software Developer’s HandbookのException Handlingの章で、「Interrupt Service Routines」を参照してください。

alt_ic_isr_register() 拡張関数 は、alt_ic_isr_register() 関数のプロトタイプを示しています。この関数は、ISRを拡張APIに登録します。割り込みコントローラー識別子 (引数ic_idで使用) および割り込みポート番号 (引数irqで使用) は、system.hで定義されます。

alt_ic_isr_register() 拡張関数

extern int alt_ic_isr_register(alt_u32 ic_id,
  alt_u32 irq,
  alt_isr_func isr,
  void *isr_context,
  void *flags);

比較するため、alt_irq_register() レガシー関数 では、alt_irq_register() 関数のプロトタイプを示しています。この関数は、ISRをレガシーAPIに登録します。

alt_irq_register() レガシー関数

extern int alt_irq_register (alt_u32 id,
  void* context,
  alt_isr_func handler);

alt_ic_isr_register() に渡される引数は、alt_irq_register() に渡される引数とはわずかに異なります。次の表は、2つの関数に対する引数を比較しています。

表 382.  alt_ic_isr_register() に対する引数とalt_irq_register() に対する引数
alt_ic_isr_register() の引数 目的 alt_irq_register() の引数
alt_u32 ic_id system.hで定義される一意の割り込みコントローラーID
alt_u32 irq system.hで定義される割り込み要求 (IRQ) 番号 alt_u32 id
alt_isr_func isr 割り込みサービスルーチン (ISR) の関数ポインター handler
void* isr_context コンポーネント固有のデータ構造へのオプションのポインター context
void* flags 予約済み。他のEICの実装でこの引数を使用する場合があります。 なし

レガシー割り込みAPIと拡張割り込みAPIには、他にも大きな違いがあります。これらの違いのいくつかは、ISR本体に影響します。特に、この2つのAPIは完全に異なる割り込みプリエンプション・モデルを採用しています。このドキュメントに付属するサンプルコードでは、多くの違いが表されています。

HAL割り込みAPIの他の関数については、 Nios® II Software Developer’s HandbookのException HandlingおよびHAL API Referenceの章を参照してください。