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.

[参考译文] MSP430F1611:MSP430F1611 SPI 问题

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/743571/msp430f1611-msp430f1611-spi-problem

器件型号:MSP430F1611

我正在使用 MSP430F1611、我想在 MSP430F1611 (主器件)和 FPGA (从器件)之间执行 SPI 通信、我可以从 MSP430F1611成功发送数据到 FPGA、并在 U0RXBUF 和 RXBUF0中获取 MISO 数据、现在问题是如何在任何其他变量中存储来自(U0RXBUF 和 RXBUF0)的数据 请帮助我解决此问题。

谢谢

注意事项。

代码:

#include 
char MST_Data = 0x4F;
unsigned char MSD、msd1、msd2;

unsigned int j;
unsigned int i;
int main (void)
{


WDTCTL = WDTPW + WDTHOLD; //停止 WDT
P3DIR =0x001;

P3SEL = 0x00E; //设置 P3为 SPI 模式




// U0CTL = (0x0070u) /* USART 0 Control */
// char = (0x10) /*数据0:7位/1:8位*//
同步= (0x04) /* UART / SPI 模式*/
// mm = (0x02) /*主模式关闭/打开*/

U0CTL = char + SYNC + mm + SWRST; // 8位、SPI、主器件


U0TCTL = CKPH + SSEL1 + STC; //极性、SMCLK、3线


// U0BR0 = (0x0074u)/* USART 0波特率0 *//
U0BR0 = 0x064; // SPICLK = SMCLK/2

// U0BR1 = (0x0075u)/* USART 0波特率1 */
U0BR1 = 0x000;

// UMCTL0 = U0MCTL /* USART 0调制控制*/ reg 名称
U0MCTL = 0x000;



// ME1 = (0x0004u)/*模块使能1 */
ME1 = USPIE0; //模块启用
U0CTL &&~SWRST; // SPI 使能

IE1 |= URXIE0; //接收中断启用
__enable_interrupt (); //启用中断

// TXBUF0 = 0x00;
MSD = RXBUF0;
msd1 = U0RXBUF;
I = 50000; //延迟
DO (i---);
while (i!= 0);
MSD = RXBUF0;

msd1 = U0RXBUF;
{MSD = RXBUF0;
msd1 = U0RXBUF;

TXBUF0 = MST_Data; //发送第一个字符
LPM0; // CPU 关闭

}
MSD = RXBUF0;
msd1 = U0RXBUF;



} //结束主

代码#if defined (__TI_Compiler_version__)|| defined (__IAR_systems_ICC__)
#pragma vector=USART0RX_vector

__interrupt void SPI0_Rx (void)
#Elif defined (__GRx__)

void __attribute__((interrupt (USART0RX_vector)不

支持 void SPI0_R0!
#endif
{


J = 5000; //延迟
DO (j-);
while (j!= 0);

TXBUF0 = MST_Data;


//

J = 10000; //延迟
DO (j-);
while (j!= 0);

TXBUF0 = 0x34;

J = 10000; //延迟
DO (j-);
while (j!= 0);

TXBUF0 = 0x56;


J = 10000; //延迟
DO (j-);
while (j!= 0);

TXBUF0 = 0x78;


J = 10000; //延迟
DO (j-);
while (j!= 0);

TXBUF0 = 0x9A;


*



//TXBUF0 = 0xab;



// TXBUF0 =0xbb;

//P3OUT = 0x00;
}

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

    有关调试 SPI 问题、请参阅以下应用手册。

    http://www.ti.com/lit/slaa734

    有关此器件的 SPI 通信示例、请参阅以下内容。

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

     我只有一个小问题 、即如何从(U0RXBUF 和 RXBUF0)获取数据并存储在其他变量中、例如我使用变量 MSD 并使用 MSD = U0RXBUF 或 MAD = RXBUF0、但 MSD 的值为零。

    请告诉我如何解决这个问题...?

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

    Rizwan、您好!

    请查看我之前链接的 SPI 示例。 它们表现出类似的情况。 您只需在收到接收中断时为变量分配 RXBUFF 的值。 在上面的屏幕截图中、您尚未运行代码、因此变量中不会有任何内容。 此外、检查优化级别并将其关闭、就像将数据从缓冲区中取出到变量一样、从不将该变量用于任何用途、编译器会优化此代码。  

    伪代码

    Receive_bufferISR
    (
    
    var = rxbuff;
    
    }