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.

[参考译文] CCS/MSP430FR2433:从 SPI 读取 UCA0RXBUF 时出现 MSP430FR2433问题

Guru**** 2554530 points
Other Parts Discussed in Thread: MSP430FR2433

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/596972/ccs-msp430fr2433-msp430fr2433-problem-reading-uca0rxbuf-from-spi

器件型号:MSP430FR2433

工具/软件:Code Composer Studio

您好!  

我使用 MSP430FR2433作为 SPI 主器件从 SPI 从器件读取数据、从 UCA0RXBUF 获取的值为0x00、这与我从逻辑分析仪观察到的值不匹配。  

我将发送16位、第一个8位作为地址(0x06)发送到 SPI 从器件、第二个8位作为0x00的虚拟值。  在逻辑分析仪中、我在 SOMI 上观察到的值是0x52、这是正确的、但在 UCA0RXBUF 中看不到。  

请帮助。

#include

unsigned char RXData = 0xFF;
unsigned char TXData;

int main (空)
{  
    WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器

    PM5CTL0 &=~LOCKLPM5;//禁用 GPIO 上电默认高阻抗模式

P1DIR |= BIT7;
P1OUT |= BIT7;// CSn

P1SEL0 |= BIT4 | BIT4 | BIT6;//将3-SPI 引脚设置为第二功能

UCA0CTLW0 |= UCSWRST;//**将状态机置于复位状态**
UCA0CTLW0 |= UCMST|UCSYNC|UCCKPL|UCMSB|UCMODE_0;// 3引脚、8位 SPI 主器件
//时钟极性高,MSB
UCA0CTLW0 |= UCSSEL_SMCLK;// SMCLK
UCA0BR0 = 0x01;///2、fBitClock = fBRCLK/(UCBRx+1)。
UCA0BR1 = 0;//
UCA0MCTLW = 0;//无调制
UCA0CTLW0 &=~UCSWRST;//**初始化 USCI 状态机**
UCA0IE |= UCRXIE;

P1OUT &=~BIT7;
P1OUT |= BIT7;

while (1)

   UCA0IE |= UCTXIE;//启用 TX 中断
   P1OUT &=~BIT7;
   UCA0TXBUF = 0x06;
   while (!(UCA0IFG & UCTXIFG));// USCI_A0 TX 缓冲器准备就绪?
   RXData=UCA0RXBUF;//回显接收到的数据
   UCA0TXBUF = 0x00;
   while (!(UCA0IFG & UCTXIFG));// USCI_A0 TX 缓冲器准备就绪?  
   RXData=UCA0RXBUF;//回显接收到的数据

   _DELAY_CYCLES (5);//下次传输前延迟
   P1OUT |= BIT7;
  __DELAY_CYCLES (2000);//下次传输前延迟

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

    为什么要设置 RXIE 和 TXIE? 如果没有 GIE、这些位无效、并且没有中断处理程序。

    为了能够读取 RXBUF、必须等待 RXIFG 被置位。 (TXIFG 在 RXIFG 之前置位、因为要发送的字节在实际传输前被移动到内部移位寄存器、而接收到的字节只有在传输后才可用。)

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

    我进行此更改是为了监控 RXIFG 是否被置位、但仍然无法读取 RXBUF 值。
    我确实观察到 UCRXIFG 标志正在被置位、但仍然没有从 RXBUF 正确读取数据。 请更正我的代码并告诉我缺少的内容。


    while (1)

    P1OUT &=~BIT7;
    UCA0TXBUF = 0x06;
    while (!(UCA0IFG & UCTXIFG)); // USCI_A0 TX 缓冲器就绪?
    while (!(UCA0IFG & UCRXIFG)); // USCI_A0 RX 标志置1?
    RXData=UCA0RXBUF; //收到的数据
    UCA0TXBUF = 0x00;
    while (!(UCA0IFG & UCTXIFG)); // USCI_A0 TX 缓冲器就绪?
    while (!(UCA0IFG & UCRXIFG)); // USCI_A0 RX 标志置1?
    RXData=UCA0RXBUF; //收到的数据

    _DELAY_CYCLES (5); //下次传输前延迟
    P1OUT |= BIT7;
    _DELAY_CYCLES (2000); //下次传输前延迟
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您如何观察 RXData?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在这里放置一个断点
    __DELAY_CYCLES (2000);//下次传输前延迟

    并查看 RXData 中的值
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在断点处 RXData 观察到的值为0x00。 它应该是0x52、如逻辑分析仪上所示、但我没有得到它
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在连接到 MCU MOSI 引脚时发现硬件问题。 它是固定的。