Всем привет!
Нужна ваша помощь. В QSys добавил uart, завел IRQ на процессор. При при этом прерываний нет, функция alt_ic_isr_register возвращает 0. Читал, что нужно использовать векторизированные прерывания (VIC). Может кто подскажет, что нужно сделать? Обязательно ли VIC подключать?
Вот мой пример кода:
static void UARTInterruptHandler(void* isr_context)
{
alt_u32 status = IORD_ALTERA_AVALON_UART_STATUS(UART_BASE);
IOWR_ALTERA_AVALON_UART_STATUS(UART_BASE, 0);
if (status & ALTERA_AVALON_UART_STATUS_RRDY_MSK | )
{
if ( status & ( ALTERA_AVALON_UART_STATUS_PE_MSK) )
{
asm("break");
return;
}
char ch = (char)IORD_ALTERA_AVALON_UART_RXDATA( UART_BASE );
}
}
static void uartInit()
{
alt_u32 control;
int divisor;
control = (ALTERA_AVALON_UART_CONTROL_TRDY_MSK | ALTERA_AVALON_UART_CONTROL_RRDY_MSK | ALTERA_AVALON_UART_CONTROL_E_MSK);
IOWR_ALTERA_AVALON_UART_CONTROL(UART_BASE, control);
divisor = (int) (50000000 / 9600 + 0.5);
IOWR_ALTERA_AVALON_UART_DIVISOR(UART_BASE, divisor);
alt_ic_isr_register(UART_IRQ_INTERRUPT_CONTROLLER_ID, UART_IRQ, UARTInterruptHandler, NULL, 0))
}
int main(void)
{
uartInit();
for (;;)
{
}
}
Еще заметил, что в сгенерированном "system.h" у всех уартов IRQ_INTERRUPT_CONTROLLER_ID равен нулю.