Доброго времени суток! работаю на процессоре AT91sam9G45 в режиме standalone, компилятор IAR, стоит задача оцифровки сигналов маленькой частоты, быстрыми АЦП (нужно иметь большое кол-во точек на период для того что бы применить нужный математический метод). Так вот проблема в том что при оцифровке сигналов в памяти неполучается держать больше чем 1300 точек, если число точек больше то всё, проц виснет намертво, догадываюсь что записываю данные в память процессора, и её там не очень много. На борту у платы так же имею ОЗУ DDR2 64 мб и NAND память 256 Мб. Подскажите пожалуйста как писать отсчеты напрямую в ОЗУ или NAND, если не сложно дайте пример кода.....
CODE
volatile int i, j, DATA_A[16], DATA_B[16], DATA_A1[1300], DATA_B1[1300];
char Text;
//-----------------------------Настойка интефейса UART--------------------------
TRACE_CONFIGURE(DBGU_STANDARD, 256000, BOARD_MCK);
//--------------------------------Настойка линий вывода-------------------------
AT91C_BASE_PIOE->PIO_OER=(LED_A|LED_B);
AT91C_BASE_PIOE->PIO_PER=(LED_A|LED_B);
AT91C_BASE_PIOE->PIO_PPUDR = (LED_A|LED_B);
AT91C_BASE_PIOC->PIO_OER=(LED_C);
AT91C_BASE_PIOC->PIO_PER=(LED_C);
AT91C_BASE_PIOC->PIO_PPUDR = (LED_C);
AT91C_BASE_PIOE->PIO_CODR=LED_A;
AT91C_BASE_PIOE->PIO_SODR=LED_B;
AT91C_BASE_PIOE->PIO_SODR=LED_C;
AT91C_BASE_PIOC->PIO_OER= CS;
AT91C_BASE_PIOC->PIO_PER= CS;
AT91C_BASE_PIOC->PIO_PPUDR = CS;
AT91C_BASE_PIOE->PIO_OER= SCK;
AT91C_BASE_PIOE->PIO_PER= SCK;
AT91C_BASE_PIOE->PIO_PPUDR = SCK;
AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_PIOC);
AT91C_BASE_PIOC->PIO_ODR = MISO;
AT91C_BASE_PIOC->PIO_PER = MISO;
AT91C_BASE_PIOC->PIO_IFER = MISO;
//--------------------------------Цикл получения данных-------------------------
while(1)
{
Text = DBGU_GetChar();
//---------------------------------Цикл измерений-------------------------------
if(Text=='w')
{
for (j = 0; j<1300; j++)
{
AT91C_BASE_PIOC->PIO_CODR=CS;
for (i = 0; i<16; i++)
{
AT91C_BASE_PIOE->PIO_CODR=SCK;
if(AT91C_BASE_PIOC->PIO_PDSR & MISO){DATA_A[i]=1;}else{DATA_A[i]=0;}
AT91C_BASE_PIOE->PIO_SODR=SCK;
}
for (i = 0; i<16; i++)
{
AT91C_BASE_PIOE->PIO_CODR=SCK;
if(AT91C_BASE_PIOC->PIO_PDSR & MISO){DATA_B[i]=1;}else{DATA_B[i]=0;}
AT91C_BASE_PIOE->PIO_SODR=SCK;
}
AT91C_BASE_PIOC->PIO_SODR=CS;
DATA_A1[j] = (
(DATA_A[2]<<11)
|((DATA_A[3]<<10)
|((DATA_A[4]<<9)
|((DATA_A[5]<<8)
|((DATA_A[6]<<7)
|((DATA_A[7]<<6)
|((DATA_A[8]<<5)
|((DATA_A[9]<<4)
|((DATA_A[10]<<3)
|((DATA_A[11]<<2)
|((DATA_A[12]<<1)
|((DATA_A[13])
))))))))))));
DATA_B1[j] = (
(DATA_B[2]<<11)
|((DATA_B[3]<<10)
|((DATA_B[4]<<9)
|((DATA_B[5]<<8)
|((DATA_B[6]<<7)
|((DATA_B[7]<<6)
|((DATA_B[8]<<5)
|((DATA_B[9]<<4)
|((DATA_B[10]<<3)
|((DATA_B[11]<<2)
|((DATA_B[12]<<1)
|((DATA_B[13])
))))))))))));
}
}
//----------------Вывод полученных данных во внешний поток----------------------
if(Text=='r')
{
for(j =0; j<1300; j++)
{
printf("%dn",DATA_A1[j]);
}
printf("e");
}
if(Text=='t')
{
for(j =0; j<1300; j++)
{
printf("%dn",DATA_B1[j]);
}
printf("e");
}
}
}
Сообщение отредактировал IgorKossak - May 18 2012, 20:19
Причина редактирования: [codebox] для длинного кода!