本需求要周期性采集4个ADC的数据,4片ADC共享同一个SPI, 使用几个CS来编码片选。SPI数据长度设置为8bit, 每读取一个adc数据时,需要发送1个命令加3个clock来获取数据。
现在想采用DMA获取数据方式,把 TX standard mode连在DMA CH0上, RX standard mode 连在DMA CH1上,因为要使用CS进行片选,所以设置数据长度为32bit,发送和接受packet设置分别如下:
g_dmaCTRL dmaCtrl_tran = {
( uint32 ) &***[0], // initial source address
( uint32 ) &spiREG1->DAT1, // initial destination address
DMA_CH1, // next ctrl packet to be trigger + 1
4, // frame count
4, // element count
0, // element destination offset
4, // element source offset
0, // frame destination offset
16, // frame source offset
0x04, // dma port
ACCESS_32_BIT, // read element size
ACCESS_32_BIT, // write element size
1, // trigger type – frame/block
ADDR_OFFSET, // addresssing mode for source
0, // addresssing mode for destination
0, // auto-init mode
NO_CHANNEL, // uint32 COMBO; // next ctrl packet trigger(Not used)
};
g_dmaCTRL dmaCtrl_rec= {
( uint32 ) &spiREG1->BUF, // initial source address
( uint32 ) Spi1DmaRevData, // initial destination address
DMA_CH0, // next ctrl packet to be trigger + 1
4, // frame count
4, // element count
4, // element destination offset
0, // element source offset
16, // frame detination offset
0, // frame source offset
0x04, // dma port
ACCESS_32_BIT, // read element size
ACCESS_32_BIT, // write element size
1, // trigger type – frame/block
0, // addresssing mode for source
ADDR_OFFSET, // addresssing mode for destination
0, // auto-init mode
NO_CHANNEL, // next ctrl packet trigger(Not used)
};
目前读取数据不成功, 观察示波器波形,每周期仅仅送出了两个byte的数据,第一个cs片选只选中了第一个byte的数据,按照设计,应该要送出16 byte的clock,每个cs应该要片选上4个byte的数据。但是spiControlData数组用来进行spi 中断来传输数据片选是没有问题的。
请问以上我的配置有问题吗?该如何使用DMA来进行spi数据传送呢?
谢谢!
Susan Yang:
很抱歉,对RM44L920这款芯片不熟悉,建议您去英文E2E发帖询问以获取更好的支持
e2e.ti.com/…/312