请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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、¶m); //启用 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); 中断; 默认值: 中断; } }
谢谢你。
