реклама на сайте
подробности

 
 
> Работа с прерываниями UART Nios II.
arpa-net
сообщение Apr 14 2016, 21:31
Сообщение #1





Группа: Участник
Сообщений: 7
Регистрация: 14-04-16
Пользователь №: 91 285



Всем привет!
Нужна ваша помощь. В QSys добавил uart, завел IRQ на процессор. При при этом прерываний нет, функция alt_ic_isr_register возвращает 0. Читал, что нужно использовать векторизированные прерывания (VIC). Может кто подскажет, что нужно сделать? Обязательно ли VIC подключать?

Вот мой пример кода:

CODE
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 равен нулю.

Сообщение отредактировал arpa-net - Apr 14 2016, 20:50
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 23:13
Рейтинг@Mail.ru


Страница сгенерированна за 0.20492 секунд с 7
ELECTRONIX ©2004-2016