Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с Nios
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
artem79
Добрый день.

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

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

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

Quartus 12.0.

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

спасибо.

p.s.

в какой то момент пошел косяк. до этого все было нормально.
Kuzmi4
2 artem79
надо бы побольше деталей...
Кстати, пересборку с нуля всего пробовали ?
artem79
Цитата(Kuzmi4 @ Dec 16 2014, 11:32) *
2 artem79
надо бы побольше деталей...
Кстати, пересборку с нуля всего пробовали ?


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

Да пробовал.

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

тот же соф что и при прошивке заливаешь и все как часы ....
warrior-2001
Может где-то нет сброса на регистрах при штатной загрузке?
А когда заливается sof, то эти регистры становятся нулями и все ок.
Stewart Little
Цитата(artem79 @ Dec 16 2014, 11:45) *
все что нужно могу выложить.

Ну, "все" может быть и не надо sm.gif
Из какой памяти процессор стартует?
Где находится сегмент кода?
Куда указывают вектора сброса и исключения?
Каковы настройки bsp (alt_load и т.п.)?

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

Цитата(artem79 @ Dec 16 2014, 11:45) *
Добавлю. Первоначально проект делался под 9.1 потом был перенесен на 12.0

Т.е. из SOPC Builder'a в Qsys?
artem79
Цитата(Stewart Little @ Dec 16 2014, 11:55) *
Ну, "все" может быть и не надо sm.gif
Из какой памяти процессор стартует?
Где находится сегмент кода?
Куда указывают вектора сброса и исключения?
Каковы настройки bsp (alt_load и т.п.)?

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


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

Цитата(artem79 @ Dec 16 2014, 12:07) *
прикладываю скрины



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

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

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




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

Цитата(warrior-2001 @ Dec 16 2014, 11:54) *
Может где-то нет сброса на регистрах при штатной загрузке?
А когда заливается sof, то эти регистры становятся нулями и все ок.



Думал об этом. Проверял. Не нашел. Фишка в том что все рабочее было...
Stewart Little
Цитата(artem79 @ Dec 16 2014, 13:30) *
прикладываю скрины

Сдается мне, что у Вас сегменты .rodata и .rwdata стартапом не инициализируются...
artem79
Цитата(Stewart Little @ Dec 16 2014, 13:54) *
Сдается мне, что у Вас сегменты .rodata и .rwdata стартапом не инициализируются...


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

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


Stewart Little
Цитата(artem79 @ Dec 16 2014, 13:57) *
Что с этим делать?..

Изучать матчасть! laughing.gif

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


Цитата(artem79 @ Dec 16 2014, 14:04) *
может быть проблема в железе?

Если при закрузке исполняемого кода из эклипса все работает, то причем тут железо?
artem79
Цитата(Stewart Little @ Dec 16 2014, 14:05) *
Изучать матчасть! laughing.gif

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



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



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

Но проблема все таки была в железе. На втором девайсе все работает. кристал инициализируется неправильно
artem79
Цитата(artem79 @ Dec 16 2014, 15:57) *
Спасибо большое. Обязательно пройдусь по настройкам, особенно которые ранее на трогал.

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


причина пока не выянена. Буду дальше смотреть. На одном кристале пошло на 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[i] = 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)
{
artem79
что может быть по коду? не скажите?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.