TI中文支持网
TI专业的中文技术问题搜集分享网站

CC3200 SPI DMA 传输数据错误

您好:

       在用SPI DMA  SLAVE 方式与设备传输时,大概率出现数据传输错误,感觉像是CLK不匹配导致。现在MASTER SPI CLK是12M,SLAVE方式时CLK 应该与MASTER同步。cc3200对时钟有什么要求么?需要连续时钟吗?有没有特殊的同步机制。下面是spi的初始化代码,麻烦帮忙看看有什么问题,谢谢。

    

MAP_SPIConfigSetExpClk(GSPI_BASE,MAP_PRCMPeripheralClockGet(PRCM_GSPI),
SPI_IF_BIT_RATE,mode,SPI_SUB_MODE_3,
(chip_select |
SPI_4PIN_MODE |
SPI_TURBO_OFF |
SPI_CS_ACTIVELOW |
SPI_WL_8)); MAP_SPIIntRegister(GSPI_BASE,interrupt_handler);
MAP_SPIFIFOLevelSet(GSPI_BASE, 1, 1);
MAP_SPIFIFOEnable(GSPI_BASE, SPI_RX_FIFO);
MAP_SPIFIFOEnable(GSPI_BASE, SPI_TX_FIFO); MAP_SPIDmaEnable(GSPI_BASE,SPI_RX_DMA);
MAP_SPIDmaEnable(GSPI_BASE,SPI_TX_DMA);
MAP_SPIWordCountSet(GSPI_BASE, SPI_DMA_MAX_LENGTH);
MAP_SPIIntEnable(GSPI_BASE, SPI_INT_EOW);
MAP_SPIEnable(GSPI_BASE);

SPI_DMA_MAX_LENGTH 为1024;

Transfer的设置:

MAP_SPIDisable(GSPI_BASE);
UDMASetupTransfer(UDMA_CH30_GSPI_RX, UDMA_MODE_BASIC, dma_size, UDMA_SIZE_8,
UDMA_ARB_1, (void *) (GSPI_BASE + MCSPI_O_RX0), UDMA_SRC_INC_NONE, rx,
UDMA_DST_INC_8);
UDMASetupTransfer(UDMA_CH31_GSPI_TX, UDMA_MODE_BASIC, dma_size, UDMA_SIZE_8,
UDMA_ARB_1, tx, UDMA_SRC_INC_8, (void *) (GSPI_BASE + MCSPI_O_TX0),
UDMA_DST_INC_NONE);
MAP_SPIEnable(GSPI_BASE);

gaoyang9992006:

作为主机模式应该没有大问题吧?是全错误呢,还是偶尔错误。你降低一下CLK试试有没有改观。

其中TI给的有那个例程,看看有没有类似的例子,我知道有个主机模式的例子。没试过从机,最近重装没安装那个软件。

user4707877:

回复 gaoyang9992006:

谢谢,dma可以跑通,最后查出来是飞线干扰的问题

user4707877:

回复 Terry Han:

谢谢,dma可以跑通,最后查出来是飞线干扰的问题

赞(0)
未经允许不得转载:TI中文支持网 » CC3200 SPI DMA 传输数据错误
分享到: 更多 (0)