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

AWR 1642 的SPI通信

请问我在使用的是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:

好的 谢谢

赞(0)
未经允许不得转载:TI中文支持网 » AWR 1642 的SPI通信
分享到: 更多 (0)