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.

[参考译文] MSP430FR5869:主 SPI 配置

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/918234/msp430fr5869-master-spi-configuration

器件型号:MSP430FR5869

您好!  

我正在尝试将 MSP430FR5869用作 SPI 主器件。 我正在为 MISO 和 MOSI 数据传输配置 UCB0端口。 我遵循了下面给出的示例代码

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

//配置 GPIO
P1SEL1 |= BIT5; //配置 SPI 引脚
P2SEL1 |= BIT0 | BIT1;
PJSEL0 |= BIT4 | BIT4; //对于 XT1

//禁用 GPIO 上电默认高阻抗模式以激活
//先前配置的端口设置
PM5CTL0 &=~LOCKLPM5;

// XT1设置
CSCTL0_H = CSKEY >> 8; //解锁 CS 寄存器
CSCTL1 = DCOFSEL_0; //将 DCO 设置为1MHz
CSCTL1 &=~DCORSEL;
CSCTL2 = SELA_LFXTCLK | SELESS__DCOCLK | SELM_DCOCLK;
CSCTL3 = DIVA__1 | DIVM_1; //设置所有分频
器 CSCTL4 &=~LFXTOFF;
执行
{
CSCTL5 &=~LFXTOFFG; //清除 XT1故障标志
SFRIFG1 &=~OFIFG;
} while (SFRIFG1&OFIFG); //测试振荡器故障标志
CSCTL0_H = 0; //锁定 CS 寄存器

//为 SPI 操作配置 USCI_A0
UCA0CTLW0 = UCSWRST; //**将状态机复位**
UCA0CTLW0 |= UCSYNC | UCCKPL | UCMSB; // 3引脚、8位 SPI 从器件
//时钟极性高,MSB
UCA0CTLW0 |= UCSSEL_SMCLK; // ACLK
UCA0BR0 = 0x02; ///2
UCA0BR1 = 0; //
UCA0MCTLW = 0; //无调制
UCA0CTLW0 &=~UCSWRST; //**初始化 USCI 状态机**
UCA0IE |= UCRXIE; //启用 USCI_A0 RX 中断

__bis_SR_register (LPM0_bits | GIE); //输入 LPM0、启用中断
}

#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=USCI_A0_Vector
__interrupt void USCI_A0_ISR (void)
#Elif defined (__G_)
void __attribute__(((nuc_A0) USCI_AULT_A0

)#if Compiler (void UCI_A0)#ifor_A0!
#endif
{
while (!(UCA0IFG&UCTXIFG)); // USCI_A0 TX 缓冲器就绪?
UCA0TXBUF = UCA0RXBUF; //回显接收到的数据
} 

我没有在代码中添加突出显示部分、因为我不需要配置时钟、因为我将使用默认 SMCLK。 但是、当我测试程序时、MOSI 引脚上没有输出。 我是否必须包含时钟配置部分才能使 SPI 主器件正常工作? 谢谢你。

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

    您好!

    原则上、SPI 还应能够使用其他时钟设置。 我从粘贴的代码中看到的是、您只启用 SPI RX 中断。 只有在相应的 ISR 中、您才会在 RX SPI 中断 SPI 传输时触发。 因此、如果您的代码首先需要触发初始 RXIE、那么器件会在 ISR 中发出一个传输。

    此致

    Peter