大家好~
我不住在一个讲英语的国家。
因此,即使语法不正确,也请理解:)
首先, 我很难开发 SPI 从属模式通信代码。
我的硬件信息如下所示。
大师 从属
(SPC5748G B/D) (MSP430FR2355 B/D)
----- -----
西莫 | ----- >>| SIMO (P1.2)
SCK | ----- >>| SCK (P1.1)
接地 | ----- >| 接地
VCC | ----- >>| VCC
----- -----
主 SPI 的设置信息为波特率200kHz, 主频极性为活动高,主频相位为第一边缘,msbFirst。
从主从通过两条线进行单向通信。
但是,从主中继器发送的数据在从中继器处无法正确接收
主中继器发送的数据为“0x04”,但从中继器接收的数据完全不同,如“0x0D”............
就在这种情况下,我连接了 Master (SPC5748G B/D)和 Arduino Uno (SPI 从属模式)并对其进行了测试,Master 确认他们正确发送数据
我会在下面留下我的代码供您检查。
-----
#include "driverlib.h"
UINT8_t 传输数据= 0x01
UINT8_t 接收数据[100]={0};
主无效(无效)
{
//停止监视计时器
WDT_A_HOLD (WDT_A_BASE);
GPIO 设置外围模块功能输入引脚(
GPIO 端口 P1,
GPIO 引脚1 + GPIO 引脚2 + GPIO 引脚3,
GPIO 主模块功能
);
PMM_unlockLPM5();
//Initialize Slave to MSB first,inactive high clock polity 和3线 SPI
EUSCI_B_SPI_initSlaveParam ={0};
Param.msb 第一个= EUSCI_B_SPI_MSB_FIRST;
Param.clockPhase = EUSCI_B_SPI_PHASE 数据已更改_ONFIRST_captured_ON_NEXT;
Param.clockPolarity = EUSCI_B_SPI_CLOCKPOLARITY_INNOTE_HIGH;
Param.spiMode = EUSCI_B_SPI_3pin;
EUSCI_B_SPI_initSlave (EUSCI_B0_BASE,¶m);
//启用 SPI 模块
EUSCI_B_SPI_ENABLE (EUSCI_B0_BASE);
EUSCI_B_SPI_ClearInterrupt (EUSCI_B0_BASE,
EUSCI_B_SPI_receive_interrupt
);
//启用接收中断
EUSCI_B_SPI_enableInterrupt (EUSCI_B0_BASE,
EUSCI_B_SPI_receive_interrupt
);
__bis_SR_register (GIE);//启用中断
While (1)(同时)
{
}
}
//**********************************************
//
//这是 USCI_B0中断向量服务例程。
//
//**********************************************
#IF 定义(__TI_Compiler_version__)||定义(__IAR_SYSTEMS _ICC__)
#pragma vector=USCI_B0_vector
中断
#Elif Defined (__GNUC _)
__attribute__(中断(USCI_B0_Vector))
#endif
USCI_B0_ISR 无效(无效)
{
receiveData[index]= EUSCI_B_SPI_receiveData (EUSCI_B0_BASE);
index++;
IF (索引>= 100)
{
索引=0;
}
}
-----
如果你能帮我,我会很高兴。
谢谢。