请问我在使用的是1642的SPIB进行通信,请问有什么方法可以使程序不用扫描的方式接收传输来的数据 ,我设置了回调函数,但始终无法进入该函数中,具体代码如下:
void driver_spi_init(void)
{
SPI_Params spiParams;
DMA_Params dmaParams;
int32_t retVal;
int32_t errCode;
Pinmux_Set_OverrideCtrl(SOC_XWR16XX_PIND13_PADAD, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);/* SPIA_MOSI */
Pinmux_Set_FuncSel(SOC_XWR16XX_PIND13_PADAD, SOC_XWR16XX_PIND13_PADAD_SPIA_MOSI);
Pinmux_Set_OverrideCtrl(SOC_XWR16XX_PINE14_PADAE, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);/* SPIA_MISO */
Pinmux_Set_FuncSel(SOC_XWR16XX_PINE14_PADAE, SOC_XWR16XX_PINE14_PADAE_SPIA_MISO);
Pinmux_Set_OverrideCtrl(SOC_XWR16XX_PINE13_PADAF, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);/* SPIA_CLK */
Pinmux_Set_FuncSel(SOC_XWR16XX_PINE13_PADAF, SOC_XWR16XX_PINE13_PADAF_SPIA_CLK);
Pinmux_Set_OverrideCtrl(SOC_XWR16XX_PINC13_PADAG, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);/* SPIA_CS */
Pinmux_Set_FuncSel(SOC_XWR16XX_PINC13_PADAG, SOC_XWR16XX_PINC13_PADAG_SPIA_CSN);
Pinmux_Set_OverrideCtrl(SOC_XWR16XX_PINP13_PADAA, PINMUX_OUTEN_RETAIN_HW_CTRL, PINMUX_INPEN_RETAIN_HW_CTRL);/* SPI_HOST_INTR – not used, reference code */
Pinmux_Set_FuncSel(SOC_XWR16XX_PINP13_PADAA, SOC_XWR16XX_PINP13_PADAA_SPI_HOST_INTR);
/* Enable output control for SPIB */
if(SOC_SPIOutputCtrl(gMmwMssMCB.socHandle, 1U, 1U, &errCode) < 0)
{
/* Debug Message: */
System_printf ("Debug: SOC_SPIOutputCtrl failed with Error [%d]\n", errCode);
}
System_printf ("Debug: MibSPI Driver Test Application begin \n");
/* Init SYSDMA params */
DMA_Params_init(&dmaParams);
/* Open DMA driver instance 0 for SPI test */
gMmwMssMCB.gDmaHandle = DMA_open(0, &dmaParams, &retVal);
if( gMmwMssMCB.gDmaHandle == NULL)
{
System_printf("Open DMA driver failed with error=%d\n", retVal);
}
SPI_init();
/* Setup the default spi Parameters */
SPI_Params_init(&spiParams);
spiParams.mode = SPI_MASTER;
spiParams.u.masterParams.bitRate = 40000000;
spiParams.u.masterParams.numSlaves = 1;
spiParams.u.masterParams.slaveProf[0].chipSelect = 0;
spiParams.u.masterParams.slaveProf[0].ramBufLen = MIBSPI_RAM_MAX_ELEM;
spiParams.u.masterParams.slaveProf[0].dmaCfg.txDmaChanNum =1U;
spiParams.u.masterParams.slaveProf[0].dmaCfg.rxDmaChanNum =0U;
/* Enable DMA and set DMA channels */
spiParams.dmaEnable = 1;
spiParams.dataSize = 16;
spiParams.dmaHandle = gMmwMssMCB.gDmaHandle;
// spiParams.frameFormat = SPI_POL0_PHA0;
// spiParams.shiftFormat = SPI_MSB_FIRST;
spiParams.frameFormat = SPI_POL1_PHA0;
spiParams.shiftFormat = SPI_LSB_FIRST;
spiParams.pinMode = SPI_PINMODE_4PIN_CS;
spiParams.eccEnable = 1;
gMmwMssMCB.gSpiHandle = SPI_open(0, &spiParams);
if (gMmwMssMCB.gSpiHandle == NULL)
{
System_printf("Error: Unable to open the SPI Instance\n");
return;
}
System_printf("SPI open successful..\n");
}
上面是可以使用扫描方式进行接收 ,请问我要开启SPI回调函数的配置是什么 谢谢
Annie Liu:
请您具体描述一下您提及的“扫描的方式”。
如果您正在寻找SPI传输的中断处理程序,那么请查找mibspi_dma.c:MIBSPI_ISR();
user5879181:
回复 Annie Liu:
我使用另一块MCU使用DMA不停的给给AWR1642 SPI发送数据,AWR1642按照如上配置。
当我在任务中调用SPI_Transfer()时才能接收到数据,但是这样的方式在我接收大量数据时就会有遗漏。所以我的问题是:1.如果使用DMA中断方式接收,我上面的代码加入spiParams.transferMode = SPI_MODE_CALLBACK;spiParams.transferCallbackFxn = Spi_CallBack;在我的理解看来,收到数据后,SPI的DMA中断会去调用Spi_CallBack(),但是没有,我甚至都不知道我应该如何接收数据。2.如果使用SPI中断方式接收,我上面的代码就不初始化dma,加入spiParams.transferMode = SPI_MODE_CALLBACK;spiParams.transferCallbackFxn = Spi_CallBack;这样也没起作用,当我调用SPI_Transfer()时,程序甚至还无法正常运行下去。
谢谢。
Annie Liu:
回复 user5879181:
如果您访问ti / drivers / spi / spi.h,那么SDK会提到不支持回调。
目前,即使为SPI驱动程序启用了DMA,驱动程序也会在内部等待DMA传输完成,之后只返回应用程序。Mibspi_dma.c: MIBSPI_transfer() -> SemaphoreP_pend(ptrMibSpiDriver->transferCompleteSem,…)Mibspi_dma.c: MIBSPI_sysDmaIntHandler
user5879181:
回复 Annie Liu:
非常感谢您的解答。
我使用的SDK版本是 : mmwave_sdk_01_01_00_02
我在SDK中看到callback是调用了的。
Annie Liu:
回复 user5879181:
每当调用'MIBSPI_sysDmaIntHandler'时,都会调用回调。 我们尝试了SDK 3.2 SPI测试应用程序,它能够击中这个中断处理程序。所以建议您检查SPI测试应用程序,以验证是否正在调用DMA中断处理程序。
user5879181:
回复 Annie Liu:
可以麻烦您把SDK3.2的下载链接发我一下吗,我现在使用的是SDK1.1的,所以可以这个SDK1.1的不支持,谢谢
Annie Liu:
回复 user5879181:
您可以在此链接中找到所有mmWave SDK版本:
http://www.ti.com/tool/MMWAVE-SDK
SDK 3.2的下载链接为:
http://software-dl.ti.com/ra-processors/esd/MMWAVE-SDK/latest/index_FDS.html
user5879181:
回复 Annie Liu:
好的 谢谢