请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP432P401R
工具/软件:Code Composer Studio
您好!
我一直在尝试将 msp432p401r 的 SPI 配置为4线或 4引脚模式下的主器 件、并根据提供的3线主器件示例使用 B1而不是 B0。 但是我不能、我只想使用4线制模式将数据传输到从设备下面给出了我编辑的代码、请帮我解决。 我在第68行中遇到错误
/* MSP432 SPI - 3线主器件递增数据 * 此示例展示了 SPI 主器件如何使用3线模式与 SPI 从器件进行通信。 *主器件从0x01开始发送递增数据。 接收到的数据 *应与之前的传输相同。 eUSCI RX ISR 用于 *处理与 CPU 的通信、通常在 LPM0中。 由于 LPM0处于 ISR 中之后的所有执行*、初始化等待 DCO 相对于 * ACLK 稳定。 * *请注意、在此示例中、EUSCIB0用于 SPI 端口。 如果用户 *希望将 EUSCIA 用于 SPI 操作、则他们能够使用具有 EUSCI_Ax 参数的相同 API *。 * ** ACLK =~32.768kHz、MCLK = SMCLK = DCO 3MHz * **与 SPI 从站数据回显代码一起使用。 * * MSP432P401 * -------- * | | * | | * | | * | P1.6|->数据输出(UCB0SIMO) * | | * | P1.7|<-数据输入(UCB0SOMI) * | | * | P1.5|->串行时钟输出(UCB0CLK) *作者:Timothy Logan /* DriverLib 包括*/ #include "driverlib.h" /*标准包含*/ #include #include /* static */ static volatile uint8_t RXData = 0; static uint8_t TXData = 0; /* SPI 主配置参数*/ const eUSCI_SPI_MasterConfig spiMasterConfig = { EUSCI_B_SPI_CLOCKSOURCE_SMCLK、 // SMCLK 时钟源 3000000、 // SMCLK = DCO = 3MHz 50万、 // SPICLK = 500kHz EUSCI_B_SPI_MSB_FIRST、 // MSB 优先 EUSCI_B_SPI_PHASE_DATA_Changed_ONFIRST_Captured_On_Next、//相位 EUSCI_B_SPI_CLOCKPOLARITY_INACTION_HIGH、//高极性 EUSCI_SPI_4PIN_UCxSTE_ACTIVE_HIGH // 3线 SPI 模式 }; int main (void) { volatile uint32_t ii; /*停止 WDT */ WDT_A_HOLDTimer(); /*在 SPI 模式下选择 P1.5 P1.6和 P1.7 */ GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P6、 GPIO_PIN2 | GPIO_PIN3 | GPIO_PIN4 | GPIO_PIN5、GPIO_PRIMARY_MODULE_FUNCTION); /*在3线主控模式下配置 SPI */ //SPI_initMaster (EUSCI_B0_BASE、&spiMasterConfig); SPI_selectFourPinFunctionality (eUSCI_B1_base、eUSCI_SPI_ENABLE_SIGNAL for _4WIRE_SLAVE); /*启用 SPI 模块*/ SPI_enableModule (EUSCI_B1_BASE); /*启用中断*/ SPI_enableInterrupt (EUSCI_B1_base、EUSCI_B_SPI_Receive_interrupt); INTERRUPT_enableInterrupt (INT_EUSCIB1); interrupt_enableSlepOnIsrExit(); TXData = 0x05; /*轮询以查看 TX 缓冲区是否就绪*/ while (!(SPI_getInterruptStatus (EUSCI_B1_base、EUSCI_B_SPI_Transmit _interrupt))); /*向从设备发送数据*/ SPI_transmitData (EUSCI_B1_BASE、TXData); PCM_gotoLPM0 (); __NO_OPERAT(); }//********* // ////这是 EUSCI_B0中断矢量服务例程。 //// ********* void EUSCIB1_IRQHandler (void) { uint32_t status = SPI_getEnabledInterruptStatus (EUSCI_B1_BASE); uint32_t jj; SPI_clearInterruptFlag (EUSCI_B1_base、status); IF (STATUS 和 EUSCI_B_SPI_Receive_interrupt) { /* USCI_B0 TX 缓冲器准备好了吗? * while (!(SPI_getInterruptStatus (EUSCI_B1_base、EUSCI_B_SPI_Transmit _interrupt))); RXData = SPI_receiveData (EUSCI_B1_BASE); /*发送下一个数据包*/ SPI_transmitData (EUSCI_B1_BASE、TXData); /*从机处理信息的传输之间的延迟*/ for (jj=50;jjj<50;jjj++); } }