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

Проблема с Nios

Добрый день.

 

Прошу сразу сильно не пинать. Понимаю тема скорее всего пережована и выплюнута. Проект ГОРИТ.

 

перед сдачей вылез баг но где не найду

 

программирую плис циклон второй. Сиситема с процом. Программирую - После перезапуска работает не корректно - заливаю поверх sof на все встает как надо. Голову сломал. То есть сам проц и система запускается но работают не правильно.

 

Quartus 12.0.

 

в чем может быть причина?

 

спасибо.

 

p.s.

 

в какой то момент пошел косяк. до этого все было нормально.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 artem79

надо бы побольше деталей...

Кстати, пересборку с нуля всего пробовали ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 artem79

надо бы побольше деталей...

Кстати, пересборку с нуля всего пробовали ?

 

все что нужно могу выложить.

 

Да пробовал.

 

Добавлю. Первоначально проект делался под 9.1 потом был перенесен на 12.0

 

тот же соф что и при прошивке заливаешь и все как часы ....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может где-то нет сброса на регистрах при штатной загрузке?

А когда заливается sof, то эти регистры становятся нулями и все ок.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

все что нужно могу выложить.

Ну, "все" может быть и не надо :)

Из какой памяти процессор стартует?

Где находится сегмент кода?

Куда указывают вектора сброса и исключения?

Каковы настройки bsp (alt_load и т.п.)?

 

Для начала...

 

Добавлю. Первоначально проект делался под 9.1 потом был перенесен на 12.0

Т.е. из SOPC Builder'a в Qsys?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну, "все" может быть и не надо :)

Из какой памяти процессор стартует?

Где находится сегмент кода?

Куда указывают вектора сброса и исключения?

Каковы настройки bsp (alt_load и т.п.)?

 

Для начала...

 

прикладываю скрины

 

прикладываю скрины

 

 

нет не переводил. SOPC остался

 

Прошивка на флеш. Работает из on_chip. Покрайней мере так было... в 9-ке

 

вкладка драйверов.

нет драйвера для on_chip_memr ???

 

 

 

 

Так понимаю что проблема довольно глубоко...

 

Может где-то нет сброса на регистрах при штатной загрузке?

А когда заливается sof, то эти регистры становятся нулями и все ок.

 

 

Думал об этом. Проверял. Не нашел. Фишка в том что все рабочее было...

post-24091-1418720810_thumb.jpg

post-24091-1418720823_thumb.jpg

post-24091-1418720832_thumb.jpg

post-24091-1418722505_thumb.jpg

post-24091-1418722910_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

прикладываю скрины

Сдается мне, что у Вас сегменты .rodata и .rwdata стартапом не инициализируются...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сдается мне, что у Вас сегменты .rodata и .rwdata стартапом не инициализируются...

 

Что с этим делать?..

 

может быть проблема в железе?

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что с этим делать?..

Изучать матчасть! :laughing:

 

В зависимости от того, как написан Ваш сишный код, в настройках BSP Editor взведите "enable alt_load", "enable alt_load_copy_rodata", "enable alt_load_copy_rwdata".

 

 

может быть проблема в железе?

Если при закрузке исполняемого кода из эклипса все работает, то причем тут железо?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Изучать матчасть! :laughing:

 

В зависимости от того, как написан Ваш сишный код, в настройках BSP Editor взведите "enable alt_load", "enable alt_load_copy_rodata", "enable alt_load_copy_rwdata".

 

 

 

Если при закрузке исполняемого кода из эклипса все работает, то причем тут железо?

 

 

Спасибо большое. Обязательно пройдусь по настройкам, особенно которые ранее на трогал.

 

Но проблема все таки была в железе. На втором девайсе все работает. кристал инициализируется неправильно

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо большое. Обязательно пройдусь по настройкам, особенно которые ранее на трогал.

 

Но проблема все таки была в железе. На втором девайсе все работает. кристал инициализируется неправильно

 

причина пока не выянена. Буду дальше смотреть. На одном кристале пошло на 2 других нет(((

 

кусок кода с в ниосе. делал на базе тестового примера.

 

#include "system.h"

#include "altera_avalon_pio_regs.h"

#include "altera_avalon_uart_regs.h"

#include "altera_avalon_timer_regs.h"

#include "altera_avalon_uart.h"

#include "altera_avalon_timer.h"

#include <stdio.h>

#include <stdlib.h>

 

void send_proc();

void save_proc();

void reset_proc();

void send_uart(unsigned int data_send);

 

volatile unsigned long send, time_int, kadr, count_kadr;

volatile unsigned int temp;

volatile unsigned char count_uart, buf_uart[9];

 

void ISR_timer_0( void * context, alt_u32 id )

{

IOWR_ALTERA_AVALON_TIMER_CONTROL (TIMER_0_BASE, 8);

IOWR_ALTERA_AVALON_TIMER_STATUS (TIMER_0_BASE, 0);

// count_uart = 0;

/// reset_proc();

}

 

void timerinit_int( void )

{

IOWR_ALTERA_AVALON_TIMER_CONTROL (TIMER_0_BASE,8);

IOWR_ALTERA_AVALON_TIMER_PERIODL(TIMER_0_BASE, 0xD4C0);

IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER_0_BASE, 0x02);

alt_irq_register (TIMER_0_IRQ, (void*)TIMER_0_BASE, ISR_timer_0);

}

 

static void handle_uart_rx_interrupt(void* context, alt_u32 id)

{

count_uart++;

if (count_uart == 1)

{

IOWR_ALTERA_AVALON_TIMER_PERIODL(TIMER_0_BASE, 0xD4C0);

IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER_0_BASE, 0x02);

IOWR_ALTERA_AVALON_TIMER_CONTROL (TIMER_0_BASE, 7);

IOWR_ALTERA_AVALON_TIMER_STATUS (TIMER_0_BASE, 0);

}

volatile int* edge_capture_ptr = (volatile int*) context;

buf_uart[count_uart-1] = IORD_ALTERA_AVALON_UART_RXDATA(UART_BASE);

IOWR_ALTERA_AVALON_UART_CONTROL(UART_BASE, 0x80);

 

if (count_uart == 9)

{

 

IOWR_ALTERA_AVALON_TIMER_CONTROL (TIMER_0_BASE, 8);

IOWR_ALTERA_AVALON_TIMER_STATUS (TIMER_0_BASE, 0);

count_uart = 0;

count_kadr = 0;

time_int = 16777216*buf_uart[3] + 65536*buf_uart[2] + 256*buf_uart[1] + buf_uart[0];

kadr = 16777216*buf_uart[7] + 65536*buf_uart[6] + 256*buf_uart[5] + buf_uart[4];

 

if (kadr == 0xFFEEFFCC)

{

reset_proc();

return;

}

else

{

save_proc();

send_proc();

}

}

}

 

static void init_uart_interrupts()

{

void* edge_capture_ptr = (void*) UART_BASE;

IOWR_ALTERA_AVALON_UART_CONTROL(UART_BASE, 0x80);

alt_irq_register( 0, edge_capture_ptr, handle_uart_rx_interrupt );

}

 

int main(void) //int main(void)

{

volatile long divisor = ((ALT_CPU_FREQ/2048000)-1);

IOWR_ALTERA_AVALON_UART_DIVISOR(UART_BASE,divisor);

volatile unsigned int i, h;

send = 0;

count_uart = 0;

count_kadr = 0;

for(i=0;i<9;i++) {buf_uart = 0;}

init_uart_interrupts();

// timerinit_int();

IOWR_ALTERA_AVALON_PIO_DATA(READY_PIO_BASE, 0x00);

IOWR_ALTERA_AVALON_PIO_DATA(STR_PIO_BASE, 0x00);

IOWR_ALTERA_AVALON_PIO_DATA(ADC_ADDR_PIO_BASE, 0);

IOWR_ALTERA_AVALON_PIO_DATA(DATA_CLK_PIO_BASE, 0x00);

IOWR_ALTERA_AVALON_PIO_DATA(RESET_PIO_BASE, 0x00);

 

while(1)

{

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...