工具/软件:Code Composer Studio
大家好、我在 DMA 模式下的 SPI 端口有问题。 我将 SPI 端口与 EUSCI_B1模块搭配使用。
-我使用 CCS (TI 站点上的最后一个版本)。
- TI-RTOS 用于编程。
-使用了 Driverlib.h。
SPI 的配置是正确的、因为我可以在正常模式下发送数据。
只有 DMA 模式对我来说是个问题。 我在数据表中找到了通道和触发器的值。 代码的结构类似于我在 DMA 中测试 UART 模块时使用的结构、工作正常。
我要附上用于测试的代码。 voilà、我希望有人能告诉我、我的错误在哪里。
谢谢你。
#include
uint32_t RxSpiDmaAddr、TxSpiDmaAddr;
//
// main()
//
int main (空)
{
WDT_A_HOLD (WDT_A_base);//停止 WDT
PM5CTL0 &=~LOCKLPM5;
InitClockSysDefault();
init_gpio();
init_spi_B1 ();
/*启动 BIOS */
_enable_interrupt ();
BIOS_start();
返回(0);
}
//
//初始化 SPI EUSCI_B1_BASE
//
空 Init_SPI_B1 (空)
{
GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P5、
SPI_MOSI + SPI_MISO + SPI_CLK、
GPIO_PRIMARY_MODULE_FUNCTION);
//初始化主设备
EUSCI_B_SPI_initMasterParam param ={0};
param.selectClockSource = EUSCI_B_SPI_CLOCKSOURCE_SMCLK;
param.clockSourceFrequency = CS_getSMCLK();
param.desiredSpiClock = 50000;
param.msbFirst = EUSCI_B_SPI_MSB_FIRST;
param.clockPhase = EUSCI_B_SPI_PHASE_DATA_Captured_ONFIRST_Changed_ON_NEXT;
param.clockPolarity = EUSCI_B_SPI_CLOCKPOLARITY_INACT_LOW;
param.spiMode = EUSCI_B_SPI_3引脚;
EUSCI_B_SPI_initMaster (EUSCI_B1_BASE、¶m);
RxSpiDmaAddr = EUSCI_B_SPI_getReceiveBufferAddress (EUSCI_B1_BASE);
TxSpiDmaAddr = EUSCI_B_SPI_getTransmitBufferAddress (EUSCI_B1_BASE);
//启用 SPI 模块
EUSCI_B_SPI_ENABLE (EUSCI_B1_BASE);
///EUSCI_B_SPI_clearInterrupt (EUSCI_B1_base、EUSCI_B_SPI_Receive_Interrupt+EUSCI_B_SPI_Transmit 中断);
///EUSCI_B_SPI_enableInterrupt (EUSCI_B1_base、EUSCI_B_SPI_Receive_Interrupt+EUSCI_B_SPI_Transmit 中断);
}
//
// Init_DMA
//
空 InitDmaSpi_TXD (字符数据[])
{
DMA_initParam SpiDmaParam ={0}; //结构
SpiDmaParam.channelSelect = dma_channel_3; // voir 数据表
SpiDmaParam.transferModeSelect = dma_transfer_single;
SpiDmaParam.transferSize =(uint16_t) strlen (数据);
SpiDmaParam.triggerSourceSelect = dma_TRIGGERSOURCE_19; // voir 数据表
SpiDmaParam.transferUnitSelect = dma_size_SRCBYTE_DSTBYTE;
SpiDmaParam.triggerTypeSelect = DMA_TRIGGER_RISINGEDGE;
dma_init (SpiDmaParam);
dma_setSrcAddress (dma_channel_3、(uint32_t)&Data[0]、dma_direction 递增);
dma_setDstAddress (dma_channel_3、TxSpiDmaAddr、dma_direction 不变);
DMA_clearInterrupt (DMA_CHANNEL);
DMA_enableInterrupt (DMA_CHANNEL);
}
//
// SPI DMA TXD
//
空 SPI_DMA_TXD_Task (UARg arg0、UARg arg1)
{
while (1)
{
InitDmaSpi_TXD ("AZERTYUOP");
DMA_enableTransfers (DMA_CHANNEL);//启用 DMA 上的传输
Task_sleep (1000);
}
}
//