您好:
在用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可以跑通,最后查出来是飞线干扰的问题