请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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 主器件正常工作? 谢谢你。