Цитата(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)
{