微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI WIFI设计交流 > CC3200 SPI DMA pingpong 不能切换 ping | pong

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。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top