関連記事 FPGA
関連記事 Nios
関連記事 Quartus
関連記事 第1回 NiosにUART(RS-232 Serial Port)を実装してみる
第1回の記事で、UARTのTXDとRXDをショートさせた状態で、NiosでUART通信をやってみました。
その後、もう少しまともなUART通信プログラムができたので、まとめておきます。
![]() | 新品価格 |

Nios II Software Build Tools for Eclipseの設定変更
soft_test_bsp -> Nios II -> BSP Editorを開きます。
次にSettings -> Commonを選択します。
第1回ではstdinとstdoutをuart_0にしましたが、今回はjtag_uartを選択します。

これでBSP Editorの設定は終了です。
ソースコード
今回もNiosがTXDからデータを送信し、それをNiosのRXDで受信します。
今回は、割込みを使ってUART受信をやってみました。
#include "sys/alt_stdio.h" #include "system.h" #include <stdio.h> #include <string.h> #include "altera_avalon_uart_regs.h" #include "sys/alt_irq.h" void uart_irq_handler() { unsigned char prompt; prompt = IORD_ALTERA_AVALON_UART_RXDATA(UART_0_BASE); *(volatile unsigned char *) LED_OUTPUT_BASE = prompt; } int main() { int i=0; int reg; int context_uart1; alt_printf("Hello World !! \n"); *(volatile unsigned char *) LED_OUTPUT_BASE = 0x00; alt_ic_isr_register(UART_0_IRQ_INTERRUPT_CONTROLLER_ID, UART_0_IRQ,uart_irq_handler,&context_uart1,0x0 ); alt_ic_irq_enable(UART_0_IRQ_INTERRUPT_CONTROLLER_ID, UART_0_IRQ); while(1){ reg = *(volatile unsigned char *) SW_INPUT_BASE; IOWR_ALTERA_AVALON_UART_TXDATA(UART_0_BASE, i); if(i>=255) i=0; else i++; usleep(100000); } return (0); }
ネットで色々サンプルプログラムを検索し、最終的に上のようなソースコードになりました。
main()のIOWR_ALTERA_AVALON_UART_TXDATA()でデータ送信をしています。
uart_irq_handler()が割込み関数で、IORD_ALTERA_AVALON_UART_RXDATA()でデータ受信をして、その値に応じてLEDを制御しています。
IOWR_ALTERA_AVALON_UART_TXDATA()とIORD_ALTERA_AVALON_UART_RXDATA()は、サンプルプログラムをそのまま流用させてもらいました。なので、詳しいことはまだ理解できていません。
あと、割込みの設定をするalt_ic_isr_register()とalt_ic_irq_enable()という関数も使っています。
これらの関数は”Nios II Software Developer Handbook”に説明がありました。
ソフトウェアのことはあまり詳しくはなく、Handbookも英語なので、これについても詳しいことは理解できませんでしたが、割込みの設定をやってるのは間違いないかと。
まとめ
第1回ではputchar()とgetchar()を使ってUARTの送受信を行いましたが、今回はそれよりもまともなソースコードになったかなと。
データシートを読んでさらに勉強をしようと思いつつ、altera(intel)のデータシートは大量にあり過ぎてなかなか理解が進まず。
![]() | アドウィン ADWIN AKE-1104S キットで学ぶ!シリーズNo.4 FPGAチャレンジャー入門編:ALTERA版 キット+CDセット AKE1104S 価格:36,897円 |
