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

12.4.1. HALシステム・ライブラリーのサポート

インテルで提供しているドライバーは、HALキャラクター・モードのデバイスドライバーを実装しています。これは、 Nios® IIシステムのHALシステム・ライブラリーに統合されます。HALユーザーは、JTAG UARTレジスターにアクセスするのではなく、広く利用されているHAL APIおよびANSI C標準ライブラリーを介してJTAG UARTにアクセスします。ioctl() 要求が定義されているため、HALユーザーはJTAG UARTのハードウェアに依存する側面を制御することができます。

注: インテルが提供しているHALデバイスドライバーをプログラムで使用し、JTAG UARTハードウェアにアクセスしている場合、デバイスのレジスターに直接アクセスすると、ドライバーの正しい動作が妨げられます。

Nios® IIプロセッサーのユーザーに対して、HALシステム・ライブラリーのAPIは、JTAG UARTコアの機能への完全なアクセスを提供します。Nios IIのプログラムは、JTAG UARTコアをキャラクター・モードのデバイスとして扱い、ANSI C標準ライブラリー関数のgetchar()printf() などを使用してデータを送受信します。

次の「文字をstdoutとしてJTAG UARTコアに出力」の例は、printf() を使用してstdoutにメッセージを出力する最も簡単な使用法を示しています。この例では、プラットフォーム・デザイナー・システムにJTAG UARTコアが含まれており、HALシステム・ライブラリーはこのJTAG UARTデバイスをstdoutに使用するようにコンフィグレーションされています。

表 99.  例: 文字をstdoutとしてJTAG UARTコアに出力

#include <stdio.h>

int main ()

{

printf("Hello world.\n");

return 0;

}

次のJTAG UARTコアへの文字の送信の例では、C標準ライブラリーを使用してJTAG UARTコアから文字を読み出し、JTAG UARTコアにメッセージを送信しています。この例では、プラットフォーム・デザイナー・ システムにjtag_uartと名付けられているJTAG UARTコアが含まれています。これは必ずしもstdoutデバイスとしてコンフィグレーションされるわけではありません。この場合、プログラムはデバイスをHALファイルシステム内の他のノードと同様に扱います。

表 100.  例: JTAG UARTコアへの文字の送信

/* A simple program that recognizes the characters 't' and 'v' */

#include <stdio.h>

#include <string.h>

int main ()

{

char* msg = "Detected the character 't'.\n";

FILE* fp;

char prompt = 0;

fp = fopen ("/dev/jtag_uart", "r+"); //Open file for reading and writing

if (fp)

{

while (prompt != 'v')

{ // Loop until we receive a 'v'.

prompt = getc(fp); // Get a character from the JTAG UART.

if (prompt == 't')

{ // Print a message if character is 't'.

fwrite (msg, strlen (msg), 1, fp);

}

if (ferror(fp)) // Check if an error occurred with the file
 clearerr(fp); // If so, clear it.

}

fprintf(fp, "Closing the JTAG UART file handle.\n");

fclose (fp);

}

return 0;

}

この例では、ferror(fp) を使用し、JTAG UART接続でJTAG接続の切断などのエラーが発生していないかを確認します。この場合、ドライバーはJTAG接続の切断を検出し、エラー (EIO) を報告後、後続のトランザクションのデータを破棄します。このエラーが発生した場合は、clearerr() 関数で明示的にそれをクリアするまで、Cライブラリーは値をラッチします。

HALシステム・ライブラリーの詳細に関しては、NiosII Software Developer's Handbookを参照してください。

Nios® IIエンベデッド・デザイン・スイート (EDS) では、JTAG UARTコアを使用する多数のソフトウェア・デザイン例を提供しています。