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.

[参考译文] MSP432P401R:MSP432作为从SPI通信问题

Guru**** 2609895 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/656086/msp432p401r-msp432-as-a-slave-spi-communication-problem

部件号:MSP432P401R

大家好,

   我正在尝试  通过SPI在MSP432 (作为从属设备)和TMS320F2.8027万-C2000启动2000启动板(作为主设备)之间进行通信。

-SPI从机(msp432) 使用4线模式与SPI主机(F2.8027万)进行对话,并 启用从机选择。在代码中,主机将0x81数据传输到从机。 如果从主中继器接收到的数据为0x81,则从中继器将向主中继器发送0x88,否则将发送0xAA。

  当我调试代码时,msp432不能接收数据0x81,而是接收虚拟数据0xFF和传输0xFF。当我暂停代码数据在缓冲区中传输时,0xAA是正确的,因为条件不满足。 但在示波器上,它在miso线上显示0xFF。

我要附上一个代码以供参考:-

MSP432P401R (从机):-

静态uint8_t RXDATA = 0;

void InitSPI(void)

P10->SEL0 || BIT0 | BIT1 | BIT2 | BIT3;//将4-SPI引脚设置为第二个函数

EUSCI_B3->CTLW0 |= EUSCI_B_CTLW0_SWRST;//将状态机置于复位状态
EUSCI_B3->CTLW0 = EUSCI_B_CTLW0_SWRST |
EUSCI_B_CTLW0_SYNC |//同步模式
EUSCI_B_CTLW0_CKPL |//时钟极性高
EUSCI_B_CTLW0_MSB |// MSB优先
EUSCI_B_CTLW0_MODE_1 |// 4引脚SPI模式
EUSCI_B_CTLW0_STEM;// STE模式选择
EUSCI_B3->CTLW0 |= EUSCI_B_CTLW0_sel__SMCLK;// ACLK
EUSCI_B3->BRW = 0x01;///2,fBitClock = fBRCLK/(UCBRx+1)。
EUSCI_B3->CTLW0 &=~EUSCI_B_CTLW0_SWRST;//初始化USCI状态机
EUSCI_B3->IE |= EUSCI_B_IE_RXIE;//启用USI_B3 RX中断


//在NVIC模块中启用eUSI_B3中断
NVIC->ISER[0]=1<<(EUSIB3_IRQn)和31);

}

// SPI中断服务例程
void EUSCIB3_IRQHandler (void)

IF (EUSCI_B3->IFG和EUSCI_B_IFG_RXIFG)

// USI_B0 TX缓冲器准备就绪?
while (!(EUSSCI_B3->IFG & EUSCI_B_IFG_TXIFG));

//回显接收到的数据
RXDATA=EUSI_B3->RXBUF;

如果(RXDATA = 0x81)

// USI_B0 TX缓冲器准备就绪?
while (!(EUSSCI_B3->IFG & EUSCI_B_IFG_TXIFG));

//回显接收到的数据
EUSCI_B3->TXBUF = 0x88;
}
否则

// USI_B0 TX缓冲器准备就绪?
while (!(EUSSCI_B3->IFG & EUSCI_B_IFG_TXIFG));

//回显接收到的数据
EUSCI_B3->TXBUF =0xAA;
}
//清除接收中断标志
EUSCI_B3->IFG &=~EUSCI_B_IFG_RXIFG;

}
}

F2.8027万 (主):-

UINT16_t RDATA;      //收到的数据     
     sdata=0x81;
     SpiaRegs.SPICTL.bit.Talk = 1;//启用传输路径
     SPI_xmit (sdata << 8);//主中继器传输数据
     while (SpiaRegs.SPISTS.bit.BUFFULL_FLAG == 1);//等待数据接收
     虚拟= SpiaRegs.SPIRXBUF;
     delay_loop();
     SpiaRegs.SPICTL.Bit.Talk = 0;
     //禁用传输路径
     while (SpiaRegs.SPISTS.bit.BUFFULL_FLAG == 1);
     SPI_xmit (sdata <<8);//发送虚拟启动TX
     //注意:由于Talk = 0,数据不会发送到SPISIMOA引脚上
     while (SpiaRegs.SPISTS.bit.INT_flag !=1){}//等待数据接收
     RDATA = SpiaRegs.SPIRXBUF;
     RDATA=RDATA<<8;//
     delay_loop();
F2.8027万在DSO上检查时成功传输值0x81。 为什么msp432中不接收数据81?

 

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

    此选项将STE (芯片选择)指定为活动高电平(根据SLAU356H表25-12;MODE_2为活动低电平)。 我不能说这是错误的,但这是不寻常的。 这是主中继器的配置方式吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好Sayali,如果芯片选择的极性正确,您能评论或提供任何反馈吗?

    此致,
    Chris