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.

[参考译文] MSP430FR2676:MSP430 SPI 从器件未获取 Rx ISR

Guru**** 2539500 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/850390/msp430fr2676-msp430-spi-slave-not-getting-rx-isr

器件型号:MSP430FR2676

我已将 MSP430配置为 SPI 从器件。  作为测试、在接收数据时、我希望从器件反转位并发回字节。

我在逻辑分析仪上看到主器件传输、但从器件没有响应。  我们不接收 SPI 中断(尽管启用了中断并且其他中断正常工作)。  所有这些似乎都非常简单、因此我想知道我可能错过了什么。

我已使用示例项目 eusci_a_spi_ex1_slave 作为执行此操作的指南、仅更改为使用 SCI A1 (根据 CapTIvate 示例中已采用的方法、我的端口配置在 BSP 中执行)。

下面是 SPI 端口 A1的 BSP 配置:

// port2
// P2.0:XOUT
// P2.1:XIN
// P2.2:输入。
// P2.3:输入。
// P2.4:SCK。
// P2.5:MISO。
// P2.6:MOSI。
// P2.7:输入。
P2OUT =(0);
P2DIR =(0);
P2SEL0 =(GPIO_PIN0 | GPIO_PIN1 | GPIO_PIN4 | GPIO_PIN5 | GPIO_PIN6);//设置引脚0、1、4、5、6的主要功能。
P2SEL1 =(0);

//
清除端口锁定
//
PM5CTL0 &=~LOCKLPM5;

下面是初始化 SPI 和 ISR 的代码。

void uC_SPI_Init (void)
{
//停止看门狗计时器
WDT_A_HOLD (WDT_A_base);

//Initialize slave to MSB first、inactive highclock polarity 和3线 SPI
EUSCI_A_SPI_initSlaveParam param ={0};
param.msbFirst = EUSCI_A_SPI_MSB_FIRST;
param.clockPhase = EUSCI_A_SPI_PHASE_DATA_Changed_ONFIRST_capted_on_next;
param.clockPolarity = EUSCI_A_SPI_CLOCKPOLARITY_INACT_LOW;
param.spiMode = EUSCI_A_SPI_3引脚;
EUSCI_A_SPI_initSlave (EUSCI_A1_base、&param);

//启用 SPI 模块
EUSCI_A_SPI_ENABLE (EUSCI_A1_BASE);

EUSCI_A_SPI_clearInterrupt (EUSCI_A1_base、
EUSCI_A_SPI_Receive_interrupt
);
//启用接收中断
EUSCI_A_SPI_enableInterrupt (EUSCI_A1_BASE、
EUSCI_A_SPI_Receive_interrupt
);
}

#if defined (__TI_Compiler_version__)|| defined (__IAR_systems_ICC__)
#pragma vector=USCI_A1_vector
__interrupt
#elif defined (__GNU__)
__attribute__(INTERRUPT (USCI_A1_vector)))#endif USCI_A1_vector (

void ISR (_USC_A1_void)
)
开关(__evo_in_range (UCA1IV、USCI_SPI_UCTXIFG))
{
USCI_SPI_UCRXIFG 案例: // UCRXIFG
while (!eUSCI_A_SPI_getInterruptStatus (eUSCI_A1_base、
EUSCI_A_SPI_Transmit 中断
));

//向主设备发送数据
EUSCI_A_SPI_transmitData (EUSCI_A1_base、
传输数据
);

//从主设备接收数据
receiveData = EUSCI_A_SPI_receiveData (EUSCI_A1_BASE);

//出于测试目的,只需将我们收到的值按位反向发送回来。
transmitData =(~receiveData);
中断;
默认值:
中断;
}
}

谢谢你。

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

    您好 Jason、

    我们提供了一些可能有所帮助的 SPI 代码示例(链接如下)。 请查看这些示例、并使用我们的示例仔细检查您的配置设置。 如果您仍有问题、请告诉我。

    谢谢、

    Mitch

      

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

    谢谢。  已解决。