跳到主要内容

SPI触发DMA

1年前

SPI触发DMA

张贴了kidmose.0分 1回复
0旋转

你好,

我有一个用来通过和外部ADC触发DMA。

配置:

------------------------

DA14585.

外部ADC,SPI总线

DMA:2个通道,一个用于SPI RX的SPI TX

要求的功能

---------------------

每次样本准备好时,ADC都会设置SPI_Output低,然后必须传输32位数据。为此,我已将DMA配置为由外围设备触发。

问题

----------------------------

DMA开始触发,但在接收到第一个样本后,它不会等待SPI_Output在再次请求数据之前。因此,从ADC再次发送相同的样本。如果我将其编程到1024个样本,它可以快速读取数据,因为它可以等待下一个数据。所以DMA开始被正确触发,但我期待它与SPI_ouput同步。

更多信息:

ADC在连续模式下在1024个样品/秒时采样。因此,当我想要1024个样本时,我期望需要一秒钟。然而,它更快,问题是DMA刚刚以全速读取相同的样本。

当前配置如下,但我也试图拥有TX Lengt = 1和循环启用。

DMA Config.

------------------------

DMA_setup ti_ads1018_spidma_cnf [TI_ADS1018_DMA_TX + 1] = {{// RX .channel_number = DMA_CHANNEL_0,.bus_width = DMA_BW_HALFWORD,.irq_enable = DMA_IRQ_STATE_ENABLED,.irq_nr_of_trans = 0,.dreq_mode = DMA_DREQ_TRIGGERED,.a_inc = DMA_AINC_FALSE,.b_inc = DMA_BINC_TRUE,.circular= DMA_MODE_NORMAL,.dma_prio = DMA_PRIO_7,.dma_idle = DMA_IDLE_BLOCKING_MODE,.dma_init = DMA_INIT_AX_BX_AY_BY,.dma_req_mux = DMA_TRIG_SPI_RXTX,.dma_sense = DMA_SENSE_LEVEL_SENSITIVE,.src_address = SPI_RX_TX_REG0,.dest_address = SPI_DATA,。长度= 1024,.callback = NULL,.user_data= NULL,},{// TX .channel_number = DMA_CHANNEL_1,.bus_width = DMA_BW_HALFWORD,.irq_enable = DMA_IRQ_STATE_DISABLED,.irq_nr_of_trans = 0,.dreq_mode = DMA_DREQ_TRIGGERED,.a_inc = DMA_AINC_FALSE,.b_inc = DMA_BINC_FALSE,.circular = DMA_MODE_NORMAL。dma_prio = dma_prio_7,.dma_idle = dma_idle_blocking_mode,.dma_init = dma_init_ax_bx_ay_by,.dma_req_mux = dma_trig_spi_rxtx,.dma_sense = dma_sense_level_siscy,.src_address =null,.dest_address = spi_rx_tx_reg0,.length = 1024,.callback = null,.user_data = null,}};

附件 尺寸
ADC.PDF. 42.08 KB.

1年前

PM_DIALOG.

嗨Kidmose,

我们会尽快在注册的电子邮件地址与您联系。

谢谢,PM_DIALOG.