Hi BadOmen... It's me again...
I do feed signal generator to ADC -> then processed by FFT -> read by mSGDMA ST-MM with nios task (double buffered)
void ReadStreamTask() {
INT8U err;
reset_dispatcher(MSGDMA_RX_CSR_BASE);
alt_ic_isr_register(MSGDMA_RX_CSR_IRQ_INTERRUPT_CONTROLLER_ID,
MSGDMA_RX_CSR_IRQ, msgdma_rx_complete_isr, NULL, NULL);
enable_global_interrupt_mask(MSGDMA_RX_CSR_BASE);
Semaphore = OSSemCreate(1);
Semaphore = OSSemCreate(2);
while (1) {
if(msgdma_int_rx == 0) {
msgdma_int_rx = 1;
do{
storage_ptr = (storage_ptr + 1) % 2;
OSSemPend(Semaphore, 2, &err);
}while(err == OS_ERR_TIMEOUT);
IOWR_ALTERA_AVALON_PIO_DATA(PERIPHERAL_SUBSYSTEM_LED_PIO_BASE, 0xff - storage_ptr - 1);
construct_standard_st_to_mm_descriptor(desc_rx_ptr, SGDMAMemory, 4*NCELL,
DESCRIPTOR_CONTROL_TRANSFER_COMPLETE_IRQ_MASK | DESCRIPTOR_CONTROL_END_ON_EOP_MASK);
write_standard_descriptor(MSGDMA_RX_CSR_BASE, MSGDMA_RX_DESCRIPTOR_SLAVE_BASE, desc_rx_ptr);
}
else if(msgdma_int_rx == 2) {
msgdma_int_rx = 0;
int i;
err = OSSemPost(Semaphore);
OSTimeDlyHMSM(0, 0, 0, 5);
}
}
/*
* Should not be here as long as while = 1
*/
destruct_sgdma();
}
After transferred through ethernet, by simple TCP IP program to draw FFT graph. I've got only some partial data.
do {
read_ptr = (read_ptr + 1) % 2;
OSSemPend(Semaphore, 2, &err);
} while(err == OS_ERR_TIMEOUT);
// printf("------------------------------------------\n%d\n------------------------------------------\n", sizeof(iNetworkRadarData.data));
// printf("Send package 1\n");
length = sizeof(SGDMAMemory)/2;
error_code = send(conns->fd, (char*) &length, sizeof(length), 0);
error_code = send(conns->fd, (char*) &SGDMAMemory, length, 0);
// printf("Send package 2\n");
error_code = send(conns->fd, (char*) &length, sizeof(length), 0);
error_code = send(conns->fd, (char*) &SGDMAMemory + length, length, 0);
construct_standard_mm_to_st_descriptor(desc_tx_ptr, SGDMAMemory, 4*512,
DESCRIPTOR_CONTROL_GENERATE_SOP_MASK | DESCRIPTOR_CONTROL_GENERATE_EOP_MASK);
write_standard_descriptor(MSGDMA_TX_CSR_BASE,
MSGDMA_TX_DESCRIPTOR_SLAVE_BASE,
desc_tx_ptr);
// memset(SGDMAMemory, 0, sizeof(SGDMAMemory));
err = OSSemPost(Semaphore);
OSTimeDlyHMSM(0,0,0,5);
Please see the following picture
Thank you...