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.

[参考译文] 编译器/MSP430FR5969:SPI数据失败

Guru**** 2539500 points
Other Parts Discussed in Thread: MSP430FR5969

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/583040/compiler-msp430fr5969-spi-data-fail

部件号:MSP430FR5969

工具/软件:TI C/C++编译器

大家好。  

我`m在 MSP430FR5969中使用Driverlib来运行SPI,但我发现了一些问题。  

我可以使用轮询模式传输数据,但当我尝试发送0到255之间的序列 时,SPI错误地传输了大量数据。

 

我的代码是:  

主环路:

//I2C_ADDR_DATA_BUFFER_TX (0x53,BUFFER_TEST,6);
对于(ia=0;ia<=255;ia++)

//I2C_M24LR_write_page (buffer_test,4*ia);
buffer_test[0]= ia;
SPITXRX (BUFFER_TEST[0]);
__DELAY周期(500);
}

SPI初始化  

void spI_init(void)

/*用户代码开始(部分:EUSCI_A1_graceInit_prologueue)*/
/*用户初始化代码*/
/*用户代码结束(部分:EUSCI_A1_graceInit_prologueue)*/
//初始化主中继器

EUSCI_A_SPI_initMasterParam ={0};
param.selectClockSource = EUSCI_A_SPI_CLOCKSOURCE_SMCLK;
Param.clockSourceFrequency = CS_getSMCLK();
param.desiredSpiClock = 10万;
para.msbFirst = EUSCI_A_SPI_MSB_FIRST;
Param.clockPhase = EUSCI_A_SPI_PHASE DATA_Changed_ONFIRST_Captured_on_next;
Param.clockPolarity = EUSCI_A_SPI_CLOCKPOLARITY_INACILY_LOW;
PARAM.spin模式= EUSCI_A_SPI_3pin;
EUSCI_A_SPI_initMaster(EUSSCI_A1_base,&param);

/*启用eUSCI SPI */
EUSCI_A_SPI_EN能(EUSI_A1_base);

/*禁用eUSCI SPI传输中断*/
EUSCI_A_SPI_DisableInterrupt (EUSCI_A1_BASE,EUSCI_A_SPI_Transmit_Interrupt);

/*禁用eUSCI SPI接收中断*/
EUSCI_A_SPI_DisableInterrupt (EUSCI_A1_BASE,EUSCI_A_SPI_receive _interrupt);

/*用户代码开始(部分:EUSCI_A1_graceInit_nepogue)*/
/*用户代码*/
/*用户代码结束(部分:EUSCI_A1_graceInit_nepogue)*/
__DELAY周期(100);
INIT_SPICS();


}

SPI TRASMIT  
unsigned char SPITXRX (unsigned char datatx)


cs_low();
//
EUSCI_A_SPI_Spendata, EUSCI_A1_BASE,datatx);
while (EUSCI_A_SPI_isBusy (EUSCI_A1_BASE));
cs_high ();
返回0;


}

 

我的硬件和带有XTAL 14.7656MHZ的Launchpad显示相同的位错误。如何解决?

谢谢,顺祝商祺!  

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

    我已经测试过类似的东西,我看到了像你一样的零星结果。 然后,我创建了执行相同操作的注册级别代码,该问题不再存在。 我尚未缩小问题的范围,但它可能与Driverlib有关。 如果您可以提供时钟初始化代码,甚至是完整的代码,以便我在设置和调试时进行测试,这将非常有帮助。

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

    你好,Caleb,在我的代码下面。 阻止:

    我的时钟初始化已连接。 今天 早上,我检查了时钟,发现时钟不稳定,理论上说,WFP 3.4 应该把MCLK取出,SMCLK是MCLK的一个部门。 在14.5456MHz的情况下使用外部xtal,我 的时钟必须非常稳定,但在 WFP 3.4 输出中检测到时钟频率中的10 % 的渗透。 我`m努力解决 这个问题。  

     我不`m driverlib 是否运行良好,我在I2C上遇到了很大的问题,但现在已经解决了。 您可以在 下图中查看。 我配置SPI模式0 极性 =0和相位=0,但我的逻辑分析器( Logic Saleae 16 canais )正在 检测  极性1相位0的正确数据传输。  

    我真的不知道driverlib是正确的还是逻辑分析器。  

    e2e.ti.com/.../DEF_5F00_FRAM.ce2e.ti.com/.../DEF_5F00_FRAM.he2e.ti.com/.../CLK_5F00_SOURCES.ce2e.ti.com/.../CLK_5F00_SOURCES.h

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

    在您发布的图像中,代码显示数据在第一条边缘更改,在第二条边缘捕获。 换言之,这意味着代码在后缘上有效,这就是逻辑分析器使用所示设置正确解释代码的原因。

    您是否可以将SMCLK作为实验从DCO运行,以查看是否是时钟稳定性导致了问题?而不是使用外部xtal?

    此致,
    Caleb Overbay