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.

[参考译文] MSP430F47177:MSP430F47177中的 SPI 驱动器初始化

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/976871/msp430f47177-spi-driver-initialization-in-msp430f47177

器件型号:MSP430F47177
在我们的计量应用之一中、我们需要 MSP430F47177微控制器的 SPI 外设来与外部 IC 进行通信。
我们将 UCA1通道用于 SPI 通信。 它是 P1.6/UCA1TXD/UCA1SIMOP1.7/UCA1RXD/UCA1SOMI 和  P2.0/UCB1STE/UCA1CLK
 
初始化例程如下所示:-
MAIN ()
P1SEL |=(BIT6 | BIT7);                                          //选择备用外设功能、  //端口1.6–USIA1-SIMO、端口2.7 USCIA1-SOMI   
                      
P2SEL |= BIT0;                                                 //选择 USCIA0-SCLK  
UCA1CTL1 = UCSWRST;                                         //**将状态机置于重置中**
UCA1CTL0 |= UCCKPH | UCMST | UCSYNC | UCMSB | UCMODE_0;     //3引脚、8位 SPI 主器件、 UCSYNC 位选择同步模式(SPI 模式)
UCA1CTL1 |= UCSSEL_2;                                        //将 SMCLK 馈入 SPI SCLK
UCA1BR0 = 0x02;                                               // SMCLK/2   
UCA1BR1 = 0;                  
  
 
UCA1MCTL = 0;                                                //无调制   
UCA1CTL1 &=~UCSWRST;                                       //**初始化 USCI 状态机**   
UC1IE |= UCA1RXIE;                                            //启用 USCI_A1 RX 中断  
每隔5秒、UCA1TXBUF 就会加载数据并通过 SPI 发送数据
但在 SIMO/SOMI/SCLK 引脚上未观察到数据/时钟。
我们已经检查了 MSP430F47177示例代码(可在 TI 网站上找到)。  上述配置仅根据示例代码进行。
在这方面需要您的帮助。 在 SPI 外设配置中、我们是否缺少任何东西?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    这是完整的代码吗? 您是进入 LPM 模式还是保持在激活模式? 如果您进入 LPM3、SMCLK 可能会被关闭。 在中

    下面的代码示例应该适用于 UCA0、P2.4和 P2.5、它只通过进入 LPM0来打开 CPU。 这可能是您错过的东西。

    根据 Init、假设 UCMODE_0 =代表0x00真正进入3引脚模式、我不会看到一个大问题。 也许您可以在 TX 缓冲区被填满后发布寄存器设置(调试视图寄存器)。

    #include

    unsigned char MST_Data、SLV_Data;
    int 计数器;
    int main (空)

     volatile unsigned int i;

     WDTCTL = WDTPW+WDTHOLD;                  //停止看门狗计时器
     FLL_CTL0 |= XCAP11PF;                    //配置负载电容

     //等待 xtal 稳定
     操作
     {
       IFG1 &=~OFIFG;                          //清除 OSCFault 标志
       对于(I = 0x47FF;I > 0;I-);            //设置标志的时间
     }
     while ((IFG1 & OFIFG));                  // OSCFault 标志仍然置1?

     for (i=2100;i>0;i--);                     //现在具有稳定的 ACLK,请等待
                                               // DCO 稳定。
     P5OUT = BIT2;                            //针对 LED 和从器件复位的 P5设置
     P5DIR |= BIT1+BIT2;                           //

     P2SEL |= BIT4+BIT5;
     P3SEL |= BIT0;
     UCA0CTL0 |= UCMST+UCSYNC+UCCKPL+UCMSB;   //3引脚、8位 SPI 主器件
     UCA0CTL1 |= UCSSEL_2;                    // SMCLK
     UCA0BR0 = 0x0F;                          ///2
     UCA0BR1 = 0;                             //
     UCA0MCTL = 0;                            //无调制
     UCA0CTL1 &=~UCSWRST;                    //**初始化 USCI 状态机**
     IE2 |= UCA0RXIE;                         //启用 USCI_A0 RX 中断

     P5OUT &=~BIT2;                          //现在 SPI 信号已初始化、
     P5OUT |= BIT2;                           //复位从器件

     for (i=5000;i>0;i--);                       //等待从设备初始化

     MST_Data = 0x001;                        //初始化数据值
     SLV_Data = 0x000;                        //

     UCA0TXBUF = MST_Data;                    //发送第一个字符
     _bis_SR_register (LPM0_bits + GIE);      // CPU 关闭、启用中断


    #if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
    #pragma vector=USCIAB0RX_vector
    _interrupt void USCIA0RX_ISR (void)
    #Elif defined (_GNU_)
    void __attribute__((interrupt (USCIAB0RX_vector)) USCIA0RX_ISR (void)
    其他
    错误编译器不受支持!
    #endif

     volatile unsigned int i;

     while (!(IFG2 & UCA0TXIFG));             // USART1 TX 缓冲器准备就绪?
     if (UCA0RXBUF==SLV_Data)                 //测试正确的字符 RXd
       P5OUT |= BIT1;                         //如果正确,亮起 LED
     其他
       P5OUT &=~BIT1;                        //如果不正确,请清除 LED

     MST_Data++;                              //递增数据
     SLV_Data++;
     UCA0TXBUF = MST_Data;                    //发送下一个值

     for (i=30;i>0;i--);                       //将传输之间的时间添加到
    }   

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

    您好!

    以上帖子是否有助于解决您的问题? 如果不是、请告知我们、否则我将在2月12日之前关闭此主题。

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

    否  

    没有解决问题。

    我可以看到 SMCLK、但没有 SCLK

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

    您好!

    今天、我在 F41777示例上对 SPI_09示例进行了编程、如下所示、我可以在相应的引脚上看到数据输出和时钟信号(在下面放置示波器截图)。

    请检查 LFO 晶体是否已连接、以及是否跳过示例代码的故障标志例程。 如果无法正常工作、请发布硬件设置图片。

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

    您好!

    您是否有机会查看我的上一篇帖子? 您是否可以执行任何操作?