Перейти к содержанию
    

arpa-net

Участник
  • Постов

    7
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Посетители профиля

519 просмотров профиля
  1. Возможно в 11-м квартусе неправильно генерируется bsp. Я бы вам рекомендовал уставновить quartus 15.1 web edition, он бесплатный. Для вашего hello world вполне сойдет. Попробуйте для начала читать и менять скорость c помощью HAL драйверов. Можете загрузить ваш qsys проект, могу глянуть что не так. Если ваш altera avalon uart не справляется c приемом, то можете использовать fifo uart с altera wiki: http://www.alterawiki.com/wiki/FIFOed_Avalon_Uart Он использует теже самые регистры, так что работа с ним ничем не отличается от стандартного. Нужно только скопировать его в папку с альтеровскими ip корками.
  2. Вот так делитель считается: int divisor = (int) ( UART_FREQ / baud + 0.5);
  3. мне сейчас главное uboot со второго rom загрузить, дальше можно по сети через tftp все нужные файлы подтянуть.
  4. Они с завода приходят уже напаянные. На самом деле есть возможность подключить sd-карту и загрузить линукс в ram, и там уже с eMMC работать. В общем хочется делать все через jtag, т.к. в продакшене замучаешься флешку перетыкать.
  5. Всем привет! Я сейчас занимаюсь прошивкой eMMC. Проблема в том, что eMMC пустая, на плате sd-карты и QSPI флешки тоже нет. Сейчас прелодер грузится с rom fpga-памяти, SPL прелодер(u-boot) тоже хочется разместить на другой ROM. Только в bsp editor нет варианта загрузки SPL с ROM. Кто-нибудь знает как заставить его грузиться со второй RAM памяти на FPGA?
  6. Всем спасибо за ответы. Проблема была в том, что альтеровский HAL-драйвер перехватывал мой IRQ
  7. Всем привет! Нужна ваша помощь. В 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 равен нулю.
×
×
  • Создать...