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

24.5.2. ソフトウェア例

/***********************************************************************/
//Includes
#include "altera_avalon_fifo_regs.h"
#include "altera_avalon_fifo_util.h"
#include "system.h"
#include "sys/alt_irq.h"
#include <stdio.h>
#include <stdlib.h>
#define ALMOST_EMPTY 2
#define ALMOST_FULL OUTPUT_FIFO_OUT_FIFO_DEPTH-5
volatile int input_fifo_wrclk_irq_event;
void print_status(alt_u32 control_base_address)
{
printf("--------------------------------------\n");
printf("LEVEL = %u\n", altera_avalon_fifo_read_level(control_base_address) );
printf("STATUS = %u\n", altera_avalon_fifo_read_status(control_base_address,
ALTERA_AVALON_FIFO_STATUS_ALL) );
printf("EVENT = %u\n", altera_avalon_fifo_read_event(control_base_address,
ALTERA_AVALON_FIFO_EVENT_ALL) );
printf("IENABLE = %u\n", altera_avalon_fifo_read_ienable(control_base_address,
ALTERA_AVALON_FIFO_IENABLE_ALL) );
printf("ALMOSTEMPTY = %u\n",
altera_avalon_fifo_read_almostempty(control_base_address) );
printf("ALMOSTFULL = %u\n\n",
altera_avalon_fifo_read_almostfull(control_base_address));
}
static void handle_input_fifo_wrclk_interrupts(void* context, alt_u32 id)
{
/* Cast context to input_fifo_wrclk_irq_event's type. It is important
* to declare this volatile to avoid unwanted compiler optimization.
*/
volatile int* input_fifo_wrclk_irq_event_ptr = (volatile int*) context;
/* Store the value in the FIFO's irq history register in *context. */
*input_fifo_wrclk_irq_event_ptr =
altera_avalon_fifo_read_event(INPUT_FIFO_IN_CSR_BASE, ALTERA_AVALON_FIFO_EVENT_ALL);
printf("Interrupt Occurs for %#x\n", INPUT_FIFO_IN_CSR_BASE);
print_status(INPUT_FIFO_IN_CSR_BASE);
/* Reset the FIFO's IRQ History register. */
altera_avalon_fifo_clear_event(INPUT_FIFO_IN_CSR_BASE,
ALTERA_AVALON_FIFO_EVENT_ALL);
}
/* Initialize the fifo */
static int init_input_fifo_wrclk_control()
{
int return_code = ALTERA_AVALON_FIFO_OK;
/* Recast the IRQ History pointer to match the alt_irq_register() function
* prototype. */
void* input_fifo_wrclk_irq_event_ptr = (void*) &input_fifo_wrclk_irq_event;
/* Enable all interrupts. */
/* Clear event register, set enable all irq, set almostempty and
almostfull threshold */
return_code = altera_avalon_fifo_init(INPUT_FIFO_IN_CSR_BASE,
0, // Disabled interrupts
ALMOST_EMPTY,
ALMOST_FULL);
/* Register the interrupt handler. */
alt_irq_register( INPUT_FIFO_IN_CSR_IRQ,
input_fifo_wrclk_irq_event_ptr, handle_input_fifo_wrclk_interrupts );
return return_code;
}