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.
工具/软件:Code Composer Studio
我成功运行了"dma_eusci_spi_loopback_MSP_EXP432P401R_nortos_ccs"示例。 但是、在我将 SPI 主器 件从 eUSCI_B0模块(端口1 PIN8-11)更改为 eUSCI_B3模块(端口10引脚0-3)后、SPI 信号不会正确生成。
症状是:STE 和 SCLK 变为高电平、并在 MAP_SPI_enableModule (EUSCI_B3_base)之后卡在那里。 (STE 应该为低电平)
代码片段如下所示。 我们提前感谢您的帮助。
const eUSCI_SPI_MasterConfig spiMasterConfig =
{// EUSCI_B_SPI_CLOCKSOURCE_SMCLK、12000000、1000000、
EUSCI_B_SPI_CLOCKSOURCE_SMCLK、48000000、6000000、
EUSCI_B_SPI_MSB_FIRST、
EUSCI_B_SPI_PHASE_DATA_Captured_ONFIRST_Changed_ON_NEXT、
EUSCI_B_SPI_CLOCKPOLARITY_INACTIVE_HIGH、EUSCI_B_SPI_4PIN_UCxSTE_ACTIVE_LOW | EUSCI_B_CTLW0_STEM};
.
MAP_GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P10、
GPIO_PIN0 | GPIO_PIN1 | GPIO_PIN2、GPIO_PRIMARY_MODULE_FUNCTION);// GPIO_PIN0至 TEST /CE
MAP_GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P10、
GPIO_PIN3、GPIO_PRIMARY_MODULE_FUNCTION);
/*配置从 CLK、MOSI 和 SPMI (EUSCI_B2)*/
MAP_GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P3、
GPIO_PIN5 | GPIO_PIN6 | GPIO_PIN7、
GPIO_PRIMARY_MODULE_FUNCTION);
/*配置 SPI 模块*/
MAP_SPI_initSlave (EUSCI_B2_base、&spiSlaveConfig);
MAP_SPI_initMaster (EUSCI_B3_base、&spiMasterConfig);//为 SPI3 EUSCI_B3使用 base
/*启用 SPI 模块*/
MAP_SPI_enableModule (EUSCI_B2_base);
MAP_SPI_enableModule (EUSCI_B3_base);//为 SPI3 EUSCI_B3使用 base
/*配置 DMA 模块*/
map_dma_enableModule();
MAP_DMA_setControlBase (MSP_EXP432P401RLP_DMAControlTable);
/*将 DMA 通道0分配给 EUSCI_B0_TX0、将通道1分配给 EUSCI_B0_RX0 *
MAP_DMA_赋 值通道(DMA_CH4_EUSCIB2TX0);
MAP_DMA_赋 值通道(DMA_CH5_EUSCIB2RX0);
MAP_DMA_assignChannel (DMA_CH0_EUSCIB3TX1);//将 DMA CH0用于 SPI3 EUSCI_B3 TX
MAP_DMA_assignChannel (DMA_CH1_EUSCIB3RX1);//将 DMA CH1用于 SPI3 EUSCI_B3 RX
/*设置 TX 传输特性和缓冲器*/
MAP_DMA_setChannelControl (DMA_CH0_EUSCIB3TX1 | UDMA_PRI_SELECT、
UDMA_SIZE_8 | UDMA_SRC_INC_8 | UDMA_DST_INC_NONE | UDMA_ARB_1);
MAP_DMA_setChannelTransfer (DMA_CH0_EUSCIB3TX1 | UDMA_PRI_SELECT、
UDMA_MODE_BASIC、mstxData、
(空*) MAP_SPI_getTransmitBufferAddressForDMA (EUSCI_B3_base)、
MAP_SPI_MSG_LENGTH);
/*设置 RX 传输特性和缓冲器*/
MAP_DMA_setChannelControl (DMA_CH1_EUSCIB3RX1 | UDMA_PRI_SELECT、
UDMA_SIZE_8 | UDMA_SRC_INC_NONE | UDMA_DST_INC_8 | UDMA_ARB_1);
MAP_DMA_setChannelTransfer (DMA_CH1_EUSCIB3RX1 | UDMA_PRI_SELECT、
UDMA_MODE_BASIC、
(空*) MAP_SPI_getReceiveBufferAddressForDMA (EUSCI_B3_base)、
msrxData、
MAP_SPI_MSG_LENGTH);
/*从机设置*/
MAP_DMA_setChannelControl (DMA_CH4_EUSCIB2TX0 | UDMA_PRI_SELECT、
UDMA_SIZE_8 | UDMA_SRC_INC_8 | UDMA_DST_INC_NONE | UDMA_ARB_1);
MAP_DMA_setChannelTransfer (DMA_CH4_EUSCIB2TX0 | UDMA_PRI_SELECT、
UDMA_MODE_BASIC、sltxData、
(空*) MAP_SPI_getTransmitBufferAddressForDMA (EUSCI_B2_base)、
MAP_SPI_MSG_LENGTH);
/*设置 RX 传输特性和缓冲器*/
MAP_DMA_setChannelControl (DMA_CH5_EUSCI2RX0 | UDMA_PRI_SELECT、
UDMA_SIZE_8 | UDMA_SRC_INC_NONE | UDMA_DST_INC_8 | UDMA_ARB_1);
MAP_DMA_setChannelTransfer (DMA_CH5_EUSCI2RX0 | UDMA_PRI_SELECT、
UDMA_MODE_BASIC、
(void *) map_SPI_getReceiveBufferAddressForDMA (EUSCI_B2_base)、
slrxData、
MAP_SPI_MSG_LENGTH);
/*启用 DMA 中断*/
MAP_DMA_赋 值中断(INT_DMA_INT1、1);
// map_dma_clearInterruptFlag (dma_CH1_EUSCIB0RX0 & 0x0F);
MAP_DMA_clearInterruptFlag (DMA_CH1_EUSCIB3RX1和0x0F);
/*分配/启用中断*/
MAP_Interrupt_enableInterrupt (INT_DMA_INT1);
MAP_DMA_enableInterrupt (INT_DMA_INT1);
MAP_DMA_enableChannel (5);
MAP_DMA_enableChannel (4);
/*延迟40个周期以使主器件赶上从器件*/
for (ii = 0;ii < 50;ii +);
MAP_DMA_enableChannel (1);
MAP_DMA_enableChannel (0);
/*轮询以查看主器件接收是否完成*/
while (1)
{
如果(isrCounter >0)
{
__no_operation();
}
}