CC3200 SPI DMA pingpong 不能切换 ping | pong
时间:10-02
整理:3721RD
点击:
初始化 部分代码 MAP_SPIReset(GSPI_BASE); UDMAInit(); UDMAChannelSelect(UDMA_CH30_GSPI_RX, NULL); MAP_SPIConfigSetExpClk(GSPI_BASE,MAP_PRCMPeripheralClockGet(PRCM_GSPI), SPI_IF_BIT_RATE,mode,SPI_SUB_MODE_0, (SPI_HW_CTRL_CS| SPI_4PIN_MODE | SPI_TURBO_OFF | SPI_CS_ACTIVELOW | SPI_WL_16)); MAP_SPIIntRegister(GSPI_BASE,interrupt_handler); MAP_SPIWordCountSet(GSPI_BASE, 3*LINE_SIZE/2); MAP_SPIFIFOLevelSet(GSPI_BASE, 1, 1); MAP_SPIFIFOEnable(GSPI_BASE, SPI_RX_FIFO); UDMASetupTransfer(UDMA_CH30_GSPI_RX, UDMA_MODE_PINGPONG, (3*LINE_SIZE*8)/DMA_WIDTH, UDMA_SIZE_16, UDMA_ARB_1, (void *)(GSPI_BASE + MCSPI_O_RX0), UDMA_CHCTL_SRCINC_NONE, (void *)a, UDMA_CHCTL_DSTINC_16); UDMASetupTransfer(UDMA_CH30_GSPI_RX|UDMA_ALT_SELECT, UDMA_MODE_PINGPONG, (3*LINE_SIZE*8)/DMA_WIDTH, UDMA_SIZE_16, UDMA_ARB_1, (void *)(GSPI_BASE + MCSPI_O_RX0), UDMA_CHCTL_SRCINC_NONE, (void *)b, UDMA_CHCTL_DSTINC_16);
功能启动和handle挂载
MAP_SPIDmaEnable(GSPI_BASE,SPI_RX_DMA);
MAP_SPIIntEnable(GSPI_BASE, SPI_INT_RX_FULL);
MAP_SPIEnable(GSPI_BASE);
handle 回调
pControlTable = MAP_uDMAControlBaseGet(); UART_PRINT("InFo %08x %08x %08x\n\r",uDMAErrorStatusGet(),MAP_uDMAIntStatus(), SPIIntStatus(GSPI_BASE,true)); SPIIntClear(GSPI_BASE, SPI_INT_RX_FULL); pControlTable = MAP_uDMAControlBaseGet(); UART_PRINT("uDMAControlBaseGet() = %08x\n\r", MAP_uDMAControlBaseGet()); UART_PRINT("uDMATable = %08x %08x\n\r", pControlTable[ulPrimaryIndexTx].ulControl,\ pControlTable[ulAltIndexTx].ulControl);
回调中, 我无法正确读取到 MAP_uDMAIntStatus() 参考datasheet
红色部分 我换了 所以的选项好像都不对。
InFo 00000000 40003000 00000008
uDMAControlBaseGet() = 2002ec00
uDMATable = 00000000 00000000
请问,我做pingpong的时候 怎么样才能正确的接收的切换的指令, 谢谢!
关于SPI+DMA的,你可以参考一下https://github.com/yhpan0613/SimpleLink-CC3200/tree/mainstream_br/example/spi_udma_demo。