Post Go back to editing

BF548 SPI DMA receive

Hi All,

I am using BF548 SPI using DMA in master mode.

I have interfaced AD7357 with BF548. Everything is working properly.

I am continuously getting the sample data in buffer.

I want to analyse every sample when it is received apply some algorithm and save the data in DDRRAM and SD card.

As it is DMA transfer I am thinking where should I write the code for analyzing the samples.

As I want to use SPI at maximum speed, it is very difficult to sync with he speed.

Where should i write the codefor analysing each sample?

/******************************************************************************/

#define BUFFER_COUNT (4)

#define DATA_COUNT (2048)

static u16 Data[DATA_COUNT * BUFFER_COUNT];

static ADI_DEV_1D_BUFFER Buffer[BUFFER_COUNT];

static ADI_DEV_DEVICE_HANDLE SPIHandle;

  ADI_DEV_CMD_VALUE_PAIR SPIConfig[] = {

{ ADI_DEV_CMD_SET_DATAFLOW_METHOD, (void *)ADI_DEV_MODE_CHAINED_LOOPBACK }, // chained loopback

{ ADI_SPI_CMD_SET_BAUD_REG, (void *)0x12 }, // run at some rate

{ ADI_SPI_CMD_SET_WORD_SIZE, (void *)16 }, // word size 16 bits

{ ADI_SPI_CMD_ENABLE_SLAVE_SELECT, (void *)3 }, // device is on SS 4

{ ADI_SPI_CMD_SELECT_SLAVE, (void *)3 }, // enable the device

{ ADI_SPI_CMD_SET_CONTROL_REG, (void *)0x1122},

{ ADI_DEV_CMD_END, NULL }

};

Result = adi_dev_Open(adi_dev_ManagerHandle, &ADISPIDMAEntryPoint, 0, 0, &SPIHandle,

ADI_DEV_DIRECTION_INBOUND, adi_dma_ManagerHandle, NULL, &Callback);

Result = adi_dev_Control(SPIHandle, ADI_DEV_CMD_TABLE, SPIConfig);

for (i = 0; i < BUFFER_COUNT; i++) {

Buffer[i].Data = &Data[i * DATA_COUNT];

Buffer[i].ElementCount = DATA_COUNT;

Buffer[i].ElementWidth = 2;

Buffer[i].CallbackParameter = NULL;//&Buffer[i];

Buffer[i].pNext = &Buffer[i+1];

}

Buffer[i-1].pNext = NULL;

  Result = adi_dev_Read(SPIHandle, ADI_DEV_1D, (ADI_DEV_BUFFER *)Buffer);

 
Result = adi_dev_Control(SPIHandle, ADI_DEV_CMD_SET_DATAFLOW, (void *)TRUE);

while(1)

{

}

/****************************************************************************************************/

Data[8192] is the array in which I am receiving samples.

If I access all the elements from while(1) in a loop to write it into SD card, speed is not syncronising and shape of the waveform is distorted in excel sheet because of repeating/missing samples.

Can you help me with the same?

Thanks in advance.

Regards,

KP

Parents
  • Hi KP,

    You can do the processing of the received buffer in the callback function.For that you have to set the callback parameter of the buffer to any value other than NULL.After the buffer has been processed , the callback function is called. The callback parameter of the buffer  passed as third  argument to the callback function so that if there are more than one buffer, the buffer generating the callback can be identified.In callback function you can apply algorithm and save the received data in some other location.

    you can refer to SPI driver example in the VDSP installation directory.

    \Analog Devices\VisualDSP 5.0\Blackfin\Examples\ADSP-BF592 EZ-KIT Lite\Drivers\Spi

    Regards

    Sachin

Reply
  • Hi KP,

    You can do the processing of the received buffer in the callback function.For that you have to set the callback parameter of the buffer to any value other than NULL.After the buffer has been processed , the callback function is called. The callback parameter of the buffer  passed as third  argument to the callback function so that if there are more than one buffer, the buffer generating the callback can be identified.In callback function you can apply algorithm and save the received data in some other location.

    you can refer to SPI driver example in the VDSP installation directory.

    \Analog Devices\VisualDSP 5.0\Blackfin\Examples\ADSP-BF592 EZ-KIT Lite\Drivers\Spi

    Regards

    Sachin

Children
No Data