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

tms320c6748 spi中断+edma3的数据传输问题?

我是参照c6748中spi_edma的例程来改动我现在的代码,前期已经采用了spi的中断来发送过数据,后来我加入edma3想加快传输的速度,但是采用edma3的方式发送数据是真确的但是接收回来的数据有问题,请问该怎么解决呢?

Tony Tang:

我想这需要具体问题具体分析,比如接收的数据是如何的不对,对端接的是什么设备?是不是它的传输不能及时提供有效数据等。

user3726176:

回复 Tony Tang:

您好

那个我现在的现象和这个帖子里面的出现的问题差不多

http://www.deyisupport.com/question_answer/dsp_arm/c6000_dsp/f/32/p/30494/348954.aspx#348954

就是会在接收数据的时候SPIBUF的RXOVR置1了

user3726176:

回复 Tony Tang:

Tony Tang

后来我把代码重新写了一下就是没有spi的中断了,按照官方的spi_edma的例程来写了,以下是我出现问题的地方

uint8 IINCHIP_SpiSendData(uint8 dat) { //   return(SPI_FLASH_SendByte(dat)); unsigned char *p; W5500_tx_len = 1; W5500_rx_len = 1; //SPIDat1Config(SOC_SPI_0_REGS, SPI_DATA_FORMAT0, 0);

 /***发送与接收的地址***/ W5500_p_tx = &dat; W5500_p_rx = p; //CacheWB((unsigned int) W5500_p_tx, 1); SpiTxEdmaParamSet(EDMA3_CHA_SPI0_TX, EDMA3_CHA_SPI0_TX, &dat,   W5500_tx_len); cb_Fxn[EDMA3_CHA_SPI0_TX] = &callback_spi;  SpiRxEdmaParamSet(EDMA3_CHA_SPI0_RX, EDMA3_CHA_SPI0_RX, p,    W5500_rx_len, FALSE);  cb_Fxn[EDMA3_CHA_SPI0_RX] = &callback_spi;

    //HWREG(SOC_SPI_0_REGS + SPI_SPIINT0) |= 0x00010000; SPIDat1Config(SOC_SPI_0_REGS, (SPI_CSHOLD | SPI_DATA_FORMAT0), 8);    SPIIntEnable(SOC_SPI_0_REGS, SPI_DMA_REQUEST_ENA_INT);

  while ((0 == flagTx) || (0 == flagRx)) ;  flagTx = 0;  flagRx = 0;

 SPIDat1Config(SOC_SPI_0_REGS, SPI_DATA_FORMAT0, 8);

 //W5500_SpiTransfer(); return (*p);}

就是我现在必须在while ((0 == flagTx) || (0 == flagRx)) ;之前的 SpiRxEdmaParamSet和SpiTxEdmaParamSet设置一下断点才能通过,不设置断点的话就通不过去,是不是通过edma传输发送后不能及时收到以太网口芯片(w5500)发送过来的数据呢?

如果是这种情况的话该怎么解决呢?

user3726176:

回复 Tony Tang:

Tony Tang

后来我把代码重新写了一下就是没有spi的中断了,按照官方的spi_edma的例程来写了,以下是我出现问题的地方

uint8 IINCHIP_SpiSendData(uint8 dat) { //   return(SPI_FLASH_SendByte(dat)); unsigned char *p; W5500_tx_len = 1; W5500_rx_len = 1; //SPIDat1Config(SOC_SPI_0_REGS, SPI_DATA_FORMAT0, 0);

 /***发送与接收的地址***/ W5500_p_tx = &dat; W5500_p_rx = p; //CacheWB((unsigned int) W5500_p_tx, 1); SpiTxEdmaParamSet(EDMA3_CHA_SPI0_TX, EDMA3_CHA_SPI0_TX, &dat,   W5500_tx_len); cb_Fxn[EDMA3_CHA_SPI0_TX] = &callback_spi;  SpiRxEdmaParamSet(EDMA3_CHA_SPI0_RX, EDMA3_CHA_SPI0_RX, p,    W5500_rx_len, FALSE);  cb_Fxn[EDMA3_CHA_SPI0_RX] = &callback_spi;

    //HWREG(SOC_SPI_0_REGS + SPI_SPIINT0) |= 0x00010000; SPIDat1Config(SOC_SPI_0_REGS, (SPI_CSHOLD | SPI_DATA_FORMAT0), 8);    SPIIntEnable(SOC_SPI_0_REGS, SPI_DMA_REQUEST_ENA_INT);

  while ((0 == flagTx) || (0 == flagRx)) ;  flagTx = 0;  flagRx = 0;

 SPIDat1Config(SOC_SPI_0_REGS, SPI_DATA_FORMAT0, 8);

 //W5500_SpiTransfer(); return (*p);}

就是我现在必须在while ((0 == flagTx) || (0 == flagRx)) ;之前的 SpiRxEdmaParamSet和SpiTxEdmaParamSet设置一下断点才能通过,不设置断点的话就通不过去,是不是通过edma传输发送后不能及时收到以太网口芯片(w5500)发送过来的数据呢?

如果是这种情况请问该如何解决呢?

赞(0)
未经允许不得转载:TI中文支持网 » tms320c6748 spi中断+edma3的数据传输问题?
分享到: 更多 (0)