用ADS1256与STM32F1用SPI通信,再用DMA将采集到的数据搬运到内存。问一下大家:
1.如果使用SPI+DMA给AD发送指令的话,发送指令是要写在ADC_DATASIZE吗,还是写什么呢?
DMA_DeInit(DMA1_Channel5);
DMA_InitStructure.DMA_PeripheralBaseAddr = 0x4000380C;
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)ADC_Data;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
DMA_InitStructure.DMA_BufferSize = ADC_DATASIZE;
如果是的话,那我该如何处理单独使用SPI时发送指令时,不同时间段发送的问题,如下所示:
CS_0();
while(ADS1256_DRDY==0);//µ±ADS1256_DRDYΪµÍʱ²ÅÄÜд¼Ä´æÆ÷
SPI2_ReadWriteByte(ADS1256_CMD_RREG | (regaddr & 0x0F));
delay_us(10); //min=50*(1/fCLKIN)=50*(1/7.68MHZ)=6500ns;max=whatever
SPI2_ReadWriteByte(0);//дÈë¶ÁÈ¡Êý¾ÝµÄ¸öÊýn-1
delay_us(20); //min=50*(1/fCLKIN)=50*(1/7.68MHZ)=6500ns;max=whatever
r=SPI2_ReadWriteByte(regaddr); //¶Á³öregaddrµØÖ·Ö¸ÏòµÄ¼Ä´æÆ÷Êý¾Ý
CS_1();
2、因为“1”的问题,所以我想着可不可以只用SPI发送,接收用SPI+DMA。但是最近在网上找资料发现看到“STM32的SPI主机模式下,无法只使用DMA接收,而不发送。原因是没有触发SPI的DMA接收的信号。”不知道是不是真的?
3、如果“2”是真的话,各位大哥有没有解决方法呢?
还望各位大哥不吝赐教,本人小菜一枚,不胜感激!困扰好久了,谢谢了
|