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.

[参考译文] MSP430FR2155:SPI 通信和 SPI 时钟频率设置

Guru**** 2512055 points
Other Parts Discussed in Thread: MSP430G2553, MSP430FR2155

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1016376/msp430fr2155-spi-communication-and-spi-clock-frequency-setting

器件型号:MSP430FR2155
主题中讨论的其他器件:MSP430G2553

您好!

我正在尝试使用 MSP430FR2155微控制器将 SPI 频率设置为8MHz 来实现 SPI 通信。 但我无法实现它。 我找到了一些与 MSP430G2553微控制器相关的 SPI 代码、该代码在 MSP430G2XL 上运行良好。

但我想在 MSP430FR2155上实现它。 我已经通过更改 SPI 引脚声明和一些寄存器尝试过相同的代码、但现在它可以正常工作。

是否有人知道 MSP430G2553和 MSP430FR2155寄存器编码有何不同?  

这是 MSP430G2553的工作代码。 请告诉我、在使用 MSP430FR2155时需要进行哪些更改。

#include
unsigned char MST_Data、;
int main (空)

volatile unsigned int i;
WDTCTL = WDTPW + WDTHOLD;//停止看门狗计时器
P1OUT = 0x00;//针对 LED 和复位输出设置 P1
P1DIR |= BIT0 + BIT5;//
P1SEL = BIT1 + BIT2 + BIT4;
P1SEL2 = BIT1 + BIT2 + BIT4;
UCA0CTL0 |= UCCKPL + UCMSB + UCMST + UCSYNC;// 3引脚、8位 SPI 主器件
UCA0CTL1 |= UCSSEL_2;
UCA0BR0 |= 0x02;///2
UCA0BR1 = 0;//
UCA0MCTL = 0;//无调制
UCA0CTL1 &=~UCSWRST;//**初始化 USCI 状态机**
P1OUT &=~BIT4;//现在 SPI 信号已初始化、
P1OUT |= BIT5;//复位从器件
_DELAY_CYCLES (75);//等待从器件初始化
MST_Data = 0xAA;//初始化数据值
while (1)

UCA0TXBUF = MST_Data;//发送第一个字符
_DELAY_CYCLES (50000);


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

    您好、Balaji、

    您是否在 IO 引脚上看到任何切换问题? 还是以错误的频率运行?

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

    您好、Dennis、感谢您的回复。

    否、我在 GPIO 引脚(SPI 时钟引脚)上没有看到任何内容。 我已经使用示波器检查过它。 但我看不到任何东西。 频率也未显示。

    但在 SPI MOSI 引脚上、我可以根据程序查看数据(0xAA)。

    我所面临的唯一问题是频率。

    您能告诉我可能会出现什么问题吗?

    如果将 SMCLK 设置为 SPI 时钟频率。 SPI 点击频率是多少?

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

    您好、Balaji、

    检查 FR2155数据表后、我看到您尝试使用的 SPI 位于 P1.1 (UCB0CLK)、P1.2 (UCB0SIMO)和 P1.3 (UCB0SOMI)上、因此您写入的寄存器不同。  

    要将时钟系统配置为1MHz 默认值以外的值、TI Resource Explorer (TIREX)中提供了一个示例、展示了如何执行此操作。

    尝试附加的修改代码示例。

    int main(void)
    {
        volatile unsigned int i;
        
        WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
        // Set MCLK = 16MHz
        // Configure one FRAM waitstate as required by the device datasheet for MCLK
        // operation beyond 8MHz _before_ configuring the clock system.
        FRCTL0 = FRCTLPW | NWAITS_1;
        
        __bis_SR_register(SCG0);    // disable FLL
        CSCTL3 |= SELREF__REFOCLK;  // Set REFO as FLL reference source
        CSCTL0 = 0;                 // clear DCO and MOD registers
        CSCTL1 &= ~(DCORSEL_7);     // Clear DCO frequency select bits first
        CSCTL1 |= DCORSEL_5;        // Set DCO = 16MHz
        CSCTL2 = FLLD_0 + 487;      // set to fDCOCLKDIV = (FLLN + 1)*(fFLLREFCLK/n) = (487 + 1)*(32.768 kHz/1) = 16 MHz
        __delay_cycles(3);
        __bic_SR_register(SCG0);                        // enable FLL
        while(CSCTL7 & (FLLUNLOCK0 | FLLUNLOCK1));      // FLL locked
        
        P1OUT = 0x00; // P1 setup for LED & reset output
        P1DIR |= BIT0 + BIT5; //
        P1SEL0 = BIT1 + BIT2 + BIT3;
        
        UCB0CTLW0 &= ~UCSWRST;
        UCB0CTLW0 |= UCCKPL | UCMSB | UCMST | UCSYNC | UCSSEL__SMCLK; // 3-pin, 8-bit SPI master
        UCB0CTLW1 |= UCSSEL_2;
        UCB0BRW = 0x02;     // Assumes SMCLK = MCLK = 16MHz so divide by 2
        UCB0CTLW0 &= ~UCSWRST; // **Initialize USCI state machine**
        
        P1OUT &= ~BIT5; // Now with SPI signals initialized,
        P1OUT |= BIT5; // reset slave
        __delay_cycles(75); // Wait for slave to initialize
        MST_Data = 0xAA; // Initialize data values
        
        while(1)
        {
            UCB0TXBUF = MST_Data; // Transmit first character
            __delay_cycles(50000);
        }
    }

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

    您好、Balaji、

    我们已经听过您的介绍、现在已经有一段时间了、因此我将假定您能够继续推进您的项目。
    我将此帖子标记为已解决,但如果不是这种情况,请单击“这不能解决我的问题”按钮,并使用更多信息回复此主题。
    如果此主题已锁定、请单击"提出相关问题"按钮、然后在新主题中描述您的问题的当前状态以及您可能需要帮助我们帮助解决您的问题的任何其他详细信息。