Dear Sir/Madam,
I am trying following,
1. Avoiding SPIM transfer interrupt handler.
I am performing following steps,
1. nrf_drv_spi_init() for Handler parmater 'NULL' is passed .
2. If SPIM is free next transfer is intiated. SPIM busy is indentifed using nrf_drv_spi_end_event_get
3. No SPIM Handler used which is mentioned by flag NRF_DRV_SPI_FLAG_NO_XFER_EVT_HANDLER in nrf_drv_spi_xfer.
My SPIM transfer function looks like this,
void spi_transferx(uint8_t * p_tx_buffer,uint8_t tx_buffer_length,uint8_t * p_rx_buffer, uint8_t rx_buffer_length)
{
while( nrf_drv_spi_end_event_get() == BUSY);
nrf_drv_spi_xfer(&spi,p_xfer_desc,NRF_DRV_SPI_FLAG_NO_XFER_EVT_HANDLER);
nrf_drv_spi_transfer(&spi, p_tx_buffer, tx_buffer_length, p_rx_buffer, rx_buffer_length));
}
These steps are on correct path?
I have another question,
1. Through SPIM EasyDMA I want to collect my sensor data in buffer without manually incrementing the buffer ptr & without using SPIM INTR handler.
I am trying to performing following steps,
1. After initializing my sensor , EasyDMA buffers are initialized.
typedef struct accel_sample_list
{
uint8_t accel_sample[TOTAL_READ_BYTES];
} accel_sample_t;
accel_sample_t accel_buff[10];
void spi_dma_buffer_initi(void)
{
NRF_SPIM0->RXD.MAXCNT = TOTAL_READ_BYTES;
NRF_SPIM0->RXD.PTR = &accel_buff;
NRF_SPIM0->RXD.LIST = 1;
nrf_drv_spi_xfer(&spi,p_xfer_desc,( NRF_DRV_SPI_FLAG_NO_XFER_EVT_HANDLER |
NRF_DRV_SPI_FLAG_RX_POSTINC |
NRF_DRV_SPI_FLAG_HOLD_XFER);
}
My Sensor gives data ready on physical INTR line.
In my INTR handler I do the following,
void sensor_interrupt_handler(void)
{
uint8_t tx_buffer[1];
tx_buffer[0] = KX_13X_1211_BUF_READ_ADDR | KX13X_SPI_RD_MASK;
while( nrf_drv_spi_end_event_get() == BUSY);
nrf_spim_task_trigger(p_spim, NRF_SPIM_TASK_START);
}
These steps are on correct path?