Intel® Quartus® Prime Software
Intel® Quartus® Prime Design Software, Design Entry, Synthesis, Simulation, Verification, Timing Analysis, System Design (Platform Designer, formerly Qsys)
Intel Support hours are Monday-Fridays, 8am-5pm PST, except Holidays. Thanks to our community members who provide support during our down time or before we get to your questions. We appreciate you!

Need Forum Guidance? Click here
Search our FPGA Knowledge Articles here.





This is my first use of Software drivers. I'm working with the Quartus standard version 16.0.


when I used the "altera_avalon_uart_write" and "altera_avalon_uart_read" functions, things go right.. but when trying to use FD (altera_avalon_uart_write_fd and altera_avalon_uart_read_fd) , the parameter SP points to a false base address although the file has been correctly opened, it returns a valid value (!=NULL).


my code is :


int main()


 altera_avalon_uart_state* sp_UART_0;

  altera_avalon_uart_state* sp_UART_1;


  sp_UART_0->base = UART_0_BASE;

  sp_UART_1->base = UART_1_BASE;


  char tx_buffer[8] = "BITBANG";

  char rx_buffer[8];


   alt_fd* fp_uart_1;

   alt_fd* fp_uart_0;


   fp_uart_1= open ("/dev/uart_1", O_RDWR); //Open file for reading and writing

   fp_uart_0= open ("/dev/uart_0",O_RDWR); //Open file for reading and writing


   printf("call init uart\n");

   altera_avalon_uart_init(sp_UART_1, UART_1_IRQ_INTERRUPT_CONTROLLER_ID,UART_1_IRQ);

   altera_avalon_uart_init(sp_UART_0, UART_0_IRQ_INTERRUPT_CONTROLLER_ID,UART_0_IRQ);


   int wr = altera_avalon_uart_write_fd (fp_uart_1,tx_buffer,sizeof(tx_buffer)) ;

   printf("wr = %d\n",wr);

   alt_busy_sleep(1000000); / delay 1us /// 1 s


   int rd = altera_avalon_uart_read_fd (fp_uart_0,rx_buffer,sizeof(tx_buffer)) ;

   alt_busy_sleep(1000000); / delay 1us /// 1 s

   printf(" rd = %d\n",rd);


   printf("rx_buffer = '%s'\n\n",rx_buffer);


   printf("sp_UART_0 base = 0x%08X \n", sp_UART_0->base);

   printf("sp_UART_0 ctrl = 0x%08X \n", sp_UART_0->ctrl);

   printf("sp_UART_0 tx_buf = '%s' \n", sp_UART_0->tx_buf);

   printf("sp_UART_0 rx_buf = '%s' \n\n\n", sp_UART_0->rx_buf);


   printf("sp_UART_1 base = 0x%08X \n", sp_UART_1->base);

   printf("sp_UART_1 ctrl = 0x%08X \n", sp_UART_1->ctrl);

   printf("sp_UART_1 tx_buf = '%s' \n", sp_UART_1->tx_buf);

   printf("sp_UART_1 rx_buf = '%s' \n\n", sp_UART_1->rx_buf);


   printf(" rx_buffer = %s\n",rx_buffer);


  altera_avalon_uart_close (fp_uart_1) ;

  altera_avalon_uart_close (fp_uart_0) ;





 return 0;




I'm not sure if I'm missing or using things wrong, any help would be much appreciated. Thank you in advance


0 Kudos
0 Replies