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

CC3235SF: cc3235使用SPI DMA与sl_send共用问题。

Part Number:CC3235SF

情况是这样,我使用CC3235的SPI_DMA,在中断中一次收数据32,在中断中直到收满1024个数据后,在系统中检测收满1024标志位使用sl_send发送出去。

我咋spi_dma中增加一个spiCount计数用于计数1024个数,在一个主程序中(其他线程没开)增加一个check计数,检测这个标志位执行多少次。

static void SpiIntHandler()
{

ulStatus = MAP_SPIIntStatus(GSPI_BASE,true); /* 获取SPI的中断状态 */
MAP_SPIIntClear(GSPI_BASE,SPI_INT_DMARX|SPI_INT_DMATX); /* 清除收发标志位 */
if(ulStatus & SPI_INT_DMARX) /* 中断收到 */
{
if(g_IsFreezed == 0) /* 解冻状态下 */
{
if(g_DMARcvBank == 0) {

UDMASetupTransfer(UDMA_CH30_GSPI_RX,UDMA_MODE_PINGPONG,TOTAL_DMA_ELEMENTS,
UDMA_SIZE_8,UDMA_ARB_8,
(void *)(GSPI_BASE + MCSPI_O_RX0),UDMA_SRC_INC_NONE,
(void *)&g_BeamBuff[g_BeamCount], UDMA_DST_INC_8);

g_DMARcvBank = 1;
}
else
{

UDMASetupTransfer(UDMA_CH30_GSPI_RX|UDMA_ALT_SELECT,UDMA_MODE_PINGPONG,TOTAL_DMA_ELEMENTS,
UDMA_SIZE_8,UDMA_ARB_8,
(void *)(GSPI_BASE + MCSPI_O_RX0),UDMA_SRC_INC_NONE,
(void *)&g_BeamBuff[g_BeamCount], UDMA_DST_INC_8);
g_DMARcvBank = 0;
}

g_BeamCount += TOTAL_DMA_ELEMENTS; /* 一次收32字节数据 */
if((g_BeamCount == (2*BEAM_SIZE)) || (g_BeamCount == (4*BEAM_SIZE)))
{
g_pBeamBuff = (g_BeamBank == 0) ? (&g_BeamBuff[0]) : (&g_BeamBuff[2*BEAM_SIZE]); /* 数据存储在“g_pBeamBuff”中 */
g_BeamBank = (g_BeamBank == 0) ? 1 : 0;
spiCount++;
g_BeamRcvOK = 1; /* 收集满1024就会置位表示接收到SPI数据了 */
}
if(g_BeamCount >= (4*BEAM_SIZE)) /* 满2048后,从新从0开始计数 */
g_BeamCount = 0;

}

主程序

while(1)

{

check++;

if(g_BeamRcvOK )

{

g_BeamRcvOK  =0

sl_Send(g_TcpSock.iNewSockDesc, g_pBeamBuff,1024, 0)

}

if(check %2000 == 1999)

{

UART_PRINT("%d %d \n\r",spiCount,check); 

}

}

check 计数完全不及spiCount的计数!!!

如果去掉sl_send速度就提升上来了。。。。。。

ning wang:

但是去掉sl_send 就没意义了啊!!!主程序竟然跑不过中断!!!

,

Cherry Zhou:

您好我们已收到您的问题并升级到英文论坛寻求帮助,如有答复将尽快回复您。谢谢!

,

Cherry Zhou:

您好,

您有考虑过使用 Simplelink SDK 中包含的 SPI 驱动程序吗? 这个会更简单明了:

dev.ti.com/…/node

,

ning wang:

那个例程试过了,接收到的SPI数据有错误,比如主机发送128个数据,从机接收数据不完整,而且接收到的数据有的是0,有的数据是正确的。

,

Cherry Zhou:

好的我们跟进给工程师看下哈。

,

Cherry Zhou:

您好,

您方便提供多一点信息吗?请问CC32xx 是从机还是主机? 如果是从机,您有没有验证过 SPI 极性和相位是否与系统usecase匹配? 这通常是接收不完整或错误数据的原因。 

ning wang said:

check 计数完全不及spiCount的计数!!!

如果去掉sl_send速度就提升上来了。。。。。。

ning wang said:但是去掉sl_send 就没意义了啊!!!主程序竟然跑不过中断!!!

能麻烦您clarify下这两句话吗?

赞(0)
未经允许不得转载:TI中文支持网 » CC3235SF: cc3235使用SPI DMA与sl_send共用问题。
分享到: 更多 (0)