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

CC3200 SPI DMA pingpong 不能切换 ping | pong

初始化 部分代码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的时候 怎么样才能正确的接收的切换的指令, 谢谢!

Yonghua Pan:

关于SPI+DMA的,你可以参考一下https://github.com/yhpan0613/SimpleLink-CC3200/tree/mainstream_br/example/spi_udma_demo。

赞(0)
未经允许不得转载:TI中文支持网 » CC3200 SPI DMA pingpong 不能切换 ping | pong
分享到: 更多 (0)