This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320C6748: 请问下,使用EDMA3 spi出现传输数据错误,发现传输数据都变0了,不知道哪里有存在问题?

Part Number: TMS320C6748
Other Parts Discussed in Thread: SYSBIOS, OMAP-L138

请问下,使用EDMA3 spi出现传输数据错误,发现传输数据都变0了,不知道哪里有存在问题?

EDMA3初始化:
void Init(void)
{
// 使能 EDMA3CC_0
PSCModuleControl(SOC_PSC_0_REGS, HW_PSC_CC0, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);

// 使能 EDMA3TC_0
PSCModuleControl(SOC_PSC_0_REGS, HW_PSC_TC0, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);

EDMA3Init(SOC_EDMA30CC_0_REGS, EVT_QUEUE_NUM);

/* Request DMA Channel and TCC for SPI1 Transmit*/
EDMA3RequestChannel(SOC_EDMA30CC_0_REGS, EDMA3_CHANNEL_TYPE_DMA, \
EDMA3_CHA_SPI1_TX, EDMA3_CHA_SPI1_TX, EVT_QUEUE_NUM);

/* Request DMA Channel and TCC for SPI1 Receive*/
EDMA3RequestChannel(SOC_EDMA30CC_0_REGS, EDMA3_CHANNEL_TYPE_DMA, \
EDMA3_CHA_SPI1_RX, EDMA3_CHA_SPI1_RX, EVT_QUEUE_NUM);

}

spi 初始化如下:
void Spi1Init(void)
{
unsigned char cs = 0x00;
unsigned char dcs = 0x01;
unsigned int val = SIMO_SOMI_CLK;

// CS HIGH
SPI1_CS1_HIGH();
SPI1_CS2_HIGH();

DevSpi_PowerClockSet();

DevSpi_PinMuxSet();

#if USE_SPI1

SPIReset(SOC_SPI_1_REGS);

SPIOutOfReset(SOC_SPI_1_REGS);

SPIModeConfigure(SOC_SPI_1_REGS, SPI_MASTER_MODE);

SPIClkConfigure(SOC_SPI_1_REGS, SPI_MODULE_CLK, SPI1_COM_CLK, SPI_DATA_FORMAT0);

SPIPinControl(SOC_SPI_1_REGS, 0, 0, &val);

SPIDefaultCSSet(SOC_SPI_1_REGS, dcs);

// 配置 SPI 数据格式
DevSpi1_DataFormatConfig(SPI_DATA_FORMAT0);

// 配置 SPI 数据格式及片选信号
SPIDat1Config(SOC_SPI_1_REGS, SPI_DATA_FORMAT0, cs);

// 使能 SPI
SPIEnable(SOC_SPI_1_REGS);
#endif
}


spi test函数如下:
void DevSpi_test(unsigned int tx_length)
{
// unsigned char temp[10];
unsigned int cnt =0;
volatile char dummy;
volatile char TxData[100];

for (cnt = 0; cnt < tx_length*2 ; ++cnt)
{
TxData[cnt] = cnt;
}

Spi1TxParamSet(EDMA3_CHA_SPI1_TX, EDMA3_CHA_SPI1_TX, TxData, tx_length);

/* Registering Callback Function for Transmission. */
cb_Fxn[EDMA3_CHA_SPI1_TX] = &SpiCallBack;

/* Configure the PaRAM registers in EDMA for Reception.*/
Spi1RxParamSet(EDMA3_CHA_SPI1_RX, EDMA3_CHA_SPI1_RX,&dummy, tx_length, FALSE);

/* Registering Callback Function for Reception. */
cb_Fxn[EDMA3_CHA_SPI1_RX] = &SpiCallBack;

/* Assert the CSHOLD line corresponding to the SPI Flash. */
SPI1_CS1_LOW();
// SPIDat1Config(SOC_SPI_1_REGS, SPI_DATA_FORMAT_USER, 0x01);

/* Enable SPI controller to generate DMA events */
SPIIntEnable(SOC_SPI_1_REGS, SPI_DMA_REQUEST_ENA_INT);

/* Wait until both the flags are set to 1 in the callback function. */
Semaphore_pend(g_spiEdmaSem1, 10);
Semaphore_pend(g_spiEdmaSem2, 10);

SPIIntDisable(SOC_SPI_1_REGS, SPI_DMA_REQUEST_ENA_INT);

/* Deassert the CSHOLD line corresponding to the SPI Flash. */
SPI1_CS1_HIGH();

}