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.

[参考译文] CCS/MSP432P401R:将 msp432p401r 配置为4线 SPI 模式

Guru**** 2344370 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/743986/ccs-msp432p401r-configure-msp432p401r-in-4-wire-spi-mode

器件型号: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++);
}

}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您具有错误的4引脚功能参数(第2个参数)

    在第68行中、我们有:

    SPI_selectFourPinFunctionality (eUSCI_B1_base、eUSCI_SPI_ENABLE_SIGNAL for _4WIRE_SLAVE); 

    而我们应在何时:

    SPI_selectFourPinFunctionality (eUSCI_B1_base、eUSCI_B_SPI_ENABLE_SIGNAL for _4WIRE_SLAVE); 

    在运行此更改时、我不会看到任何编译错误。 我不确定为什么您遇到第二个错误、抱怨  EUSCI_B_SPI_select4PinFunctionality ()调用、但我在结尾看不到这一点

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Bob 的帮助。 它的工作方式就像一种魅力。