Hi all,
for information, the cal_uart is not performant unless you make some modifications. Actually, it works correctly in poll mode, not with interrupts. The reason for this is that the interrupts are not generated correctly, and can freeze the system (I use it mainly under uClinux, I don't know the HAL driver very well).
A first fix to this is to change
<cal_uart>/uart_pm.pl:l1933:rx_char_ready to rx_not_empty This will generate the IRQ properly (regarding to avalon spec), but will not take advantage of the FIFO (IRQ when 1 byte is in the FIFO, which is not optimized). I changed the VHDL to take full advantage of the FIFO, i.e. generate IRQ when FIFO is half full, or every xx ms if a char is present in FIFO.
All this is explained in the "cal_uart(with fifo) + NIOSserial.c" thread in uClinux forum.
Hope this helps,
Regards,
Pierre-Olivier