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

 
 
 
Reply to this topicStart new topic
> Ошибка чтения по шине Avalon, Может в Nios II/f проблема?
Shevnnov
сообщение Jan 18 2011, 22:29
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 8-04-10
Из: Нижний Новгород
Пользователь №: 56 498



Есть рабочий проект (вернее был). В нем есть свой компонентс примитивным DMA, который по заданному адресу по команде читает из памяти sdram. До сегодняшнего дня всё работало, всё читалось. Но возникла проблема - в ходе работы компонента используется прерывание. А так как компонент, обрабатывает пакеты, приходящие из вне, то время задержки при обработке прерывания (т.н. latency) оказалось слишком большое (что-то порядка 11us, против желаемых 0,9us). Решил использовать векторный контроллер прерываний (VIC). Как я понял внешие прерывания обрабатываются только Nios II/f.
До этого проект в проекте использовался Nios II/s. Поменял процессор, выставли Interrupt Controller - External. Поправил IRQ у компонентов системы. Остальное всё оставил старое. И запустил на Model Sim. Получил картинку, приведенную ниже. Данные tx_data_readdata =32'hxxxxxxx.
Плохой результат было списал на то, что неправильно преывание внешнее обрабатываю (инициализация и ф-ия обработки осталась та же, что и была для Innternal IC). Во вкладке Nios II -> Advanced Features Поставил Interrupt Controller = Internal. Эффекта ноль. Временные диаграммы симуляции точно такие же.
Вопрос? В чем проблема?
Кода возвращаю назад Nios II/s то данные tx_data_readdata читаются.

И еще вопрос. Нужно ли переделывать инициализацию прерывания и обработчик прерывания компонента при замене IIC на EIC (внутреннего на внешний контроллер)? Если надо то как?
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 19 2011, 01:46
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(Shevnnov @ Jan 19 2011, 04:29) *
И еще вопрос. Нужно ли переделывать инициализацию прерывания и обработчик прерывания компонента при замене IIC на EIC (внутреннего на внешний контроллер)? Если надо то как?

это зависит от того какой API вы использовали. если legacy - то да, он поддерживает только IIC.
Go to the top of the page
 
+Quote Post
Shevnnov
сообщение Jan 19 2011, 07:32
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 8-04-10
Из: Нижний Новгород
Пользователь №: 56 498



Цитата(vadimuzzz @ Jan 19 2011, 04:46) *
это зависит от того какой API вы использовали. если legacy - то да, он поддерживает только IIC.


Нет, использовал Enhanced API.

Вопрос с чтение с щины Avalon остается открытым. В чем проблема?
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 19 2011, 08:11
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(Shevnnov @ Jan 19 2011, 13:32) *
Вопрос с чтение с щины Avalon остается открытым. В чем проблема?

из той картинки, что вы привели, выводы делать проблемно. надо идти по цепочке, начиная с tx_data_readdata

нашел у себя пример с VIC и таймером, может пригодится:
CODE

#include <stdio.h>
#include "system.h"
#include <sys/alt_irq.h>
#include "altera_avalon_timer_regs.h"

void timer_interrupt_latency_irq()
{
IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_0_BASE,0);
alt_ic_irq_disable(TIMER_0_IRQ_INTERRUPT_CONTROLLER_ID, TIMER_0_IRQ);
printf("Hello from timer!\n");
alt_ic_irq_enable(TIMER_0_IRQ_INTERRUPT_CONTROLLER_ID, TIMER_0_IRQ);
}

int main()
{
IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_0_BASE,0);
printf("Hello from Nios II!\n");
/* Register the interrupt */
alt_ic_isr_register(TIMER_0_IRQ_INTERRUPT_CONTROLLER_ID, TIMER_0_IRQ, timer_interrupt_latency_irq, TIMER_0_BASE, NULL);
/* Start timer */
IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER_0_BASE,1000);
IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_0_BASE, ALTERA_AVALON_TIMER_CONTROL_ITO_MSK
| ALTERA_AVALON_TIMER_CONTROL_CONT_MSK
| ALTERA_AVALON_TIMER_CONTROL_START_MSK);
while (1);//Event Loop
return 0;
}
Go to the top of the page
 
+Quote Post
Shevnnov
сообщение Jan 19 2011, 10:19
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 8-04-10
Из: Нижний Новгород
Пользователь №: 56 498



Суть в том, что был проект - в котором работало всё (и работает, если поставить Nios II/s) и запустить на симуляторе. Но если в нём заменяю на проц Nios II/f пересобираю систему, перегенерирую BSP - то получаю такую картину.
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Jan 19 2011, 10:44
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(Shevnnov @ Jan 19 2011, 16:19) *
Суть в том, что был проект - в котором работало всё (и работает, если поставить Nios II/s) и запустить на симуляторе. Но если в нём заменяю на проц Nios II/f пересобираю систему, перегенерирую BSP - то получаю такую картину.

по таймингам эти процессоры сильно разные. грубо, на порядок. причина может быть в этом. у вас же все инструменты под рукой, пройдитесь моделсимом, откуда эти иксы взялись
Go to the top of the page
 
+Quote Post
Shevnnov
сообщение Jan 19 2011, 11:56
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 8-04-10
Из: Нижний Новгород
Пользователь №: 56 498



Вопрос с Иксами решился. В Nios II/f есть кеширование данных. Отключил его - всё стало нормально, данные считываются как надо, без иксов. Буду разбираться с VIC
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 21:09
Рейтинг@Mail.ru


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