主题中讨论的其他器件:SysConfig、 C2000WARE
工具与软件:
大家好、我使用 SPI_Ex5_loopback_dma 实现我的架构:DSP 作为从器件、PC 作为主机。 目前、SPI_DMA 接收到 DMA 接收完成中断中的一个字节;SPI_DMA 发送可变字节。 具体实施如下:
1) SPI DMA 接收一个字节进入 DMA 完全中断------- ---- ---- -----软件触发发送;
2) SPI 的 DMA 将数据发送给调用函数------------------------------------------------------- SPI_DMA_StartTransaction (uint16_t * Data、uint16_t spibase、uint16_t length、uint16_t txdly)
//*数据代表发送数组
//spibase 表示 SPI 基址
//长度表示要发送的数据的长度
//txdly 表示发送延迟
void SPI_DMA_StartTransaction (uint16_t * Data、uint16_t spibase、uint16_t length、uint16_t txdly)
{
//有关以下函数的说明、请参阅 dma.c。
//
/ /
// SPI 配置
/ /
SPI_setcharLength (spibase、16);
//将 TX/RX FIFO 缓冲器复位为默认状态
SPI_disableFIFO (spibase);//禁用 FIFO 寄存器
SPI_enableFIFO (spibase);//启用 FIFO 寄存器
//配置 FIFO 发送延迟
SPI_setTxFifoTransmitDelay (spibase、txdly);
uint16_t burst_size = 0;
uint16_t transfer_size = 1;
//根据要发送/接收的字数确定16级字的数量
uint16_t numofSixteenWords = length / SPI_FIFO_TXFULL;
//根据要发送/接收的字数确定剩余字的数量
uint16_t remainingWords =长度% SPI_FIFO_TXFULL;
if (numofSixteenWords)
{
SPI_setFIFOInterruptLevel (spibase、SPI_FIFO_TXEMPTY、SPI_FIFO_RXFULL);
burst_size = 16u;
transfer_size = numofSixteenWords;
}
设计
{
SPI_setFIFOInterruptLevel (spibase、SPI_FIFO_TXEMPTY、(SPI_RxFIFOLevel) remainingWords);
burst_size = remainingWords;
TRANSFER_SIZE = 1;
}
//SPI_enableInterrupt (spibase、SPI_INT_RXFF);
//初始化 DMA
DMA_initController ();
/ /
// DMA TX 通道配置
/ /
断言(DMA_isBaseValid (DMA_CH5_BASE));
dma_startChannel (dma_ch5_BASE);
INTERRUPT_ENABLE (DMA_CH5_BASE);
INTERRUPT_REGISTER (DMA_CH5_BASE、&INT_mySPI0_TX_DMA_ISR);
uint16_t * psrcAddr =数据;
uint16_t * pdestAddr =(uint16_t *)(spibase + SPI_O_TXBUF);
DMA_configAddresses (DMA_CH5_base、pdestAddr、psrcAddr);
DMA_configBurst (DMA_CH5_BASE、BURST_SIZE、1、0);
DMA_configTransfer (DMA_CH5_BASE、TRANSFER_SIZE、1、0);
DMA_CONFIGMode (DMA_CH5_BASE、DMA_TRIGGER_SOFTWARE、DMA_CFG_Oneshot_disable | DMA_CFG_CONTINUOUS_ENABLE |
DMA_CFG_SIZE_16BIT);
DMA_setInterruptMode (DMA_CH5_BASE、DMA_INT_AT_END);
DMA_enableInterrupt (DMA_CH5_BASE);
DMA_disableOverrunInterrupt (DMA_CH5_BASE);
DMA_enableTrigger (DMA_CH5_BASE);
DMA_forcestrigger (DMA_CH5_BASE);
}
接收配置





问题:
1.我可以询问专家此配置是否正确吗?
如果 SPI_DMA 的接收优先级大于 SPI_DMA 的发送优先级、则 SPI_DMA 的接收优先级为 DMA_CH1_BASE、SPI_DMA 的发送优先级为 DMA_CH5_BASE。
如果 DSP 的 SPI 用作从机、则只需要更改 SPI 模式、请勿更改它





























