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.

[参考译文] MSP430G2553:SPI 写入不符合预期

Guru**** 2539500 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/897722/msp430g2553-spi-writes-not-as-expected

器件型号:MSP430G2553

对于以下代码、我期望得到 的 SIMO 为8位0x0F、8位0x5F。

相反、我得到的是0x09的8位、后跟0x00的8位。  请参见下面的示波器迹线、其中顶部迹线为 SCLK、底部迹线为 SIMO。

代码有什么问题?

我将 SPI 写入放在一个循环中、以便我可以更轻松地在示波器上进行捕获;通常我只会向每个地址写入一次。

 

 

 

#include

int main (空)

volatile unsigned int i;

WDTCTL = WDTPW + WDTHOLD;//停止看门狗计时器

P1DIR |= BIT0 ++BIT2 + BIT3 + BIT4;// nCS_BD、nRST_BD、SIMO、SCLK 为输出

P2DIR |= BIT6;// nPWM1_BD 是输出

P1SEL = BIT1 + BIT2 + BIT4;// SOMI、SIMO SCLK 为 SPI

P1SEL2 = BIT1 + BIT2 + BIT4;// ditto

P2SEL &=~BIT6;//使 P2.6 (nPWM1_BD)不是 XIN

UCA0CTL0 |= UCSWRST;// eUSCI 逻辑保持在复位状态

UCA0CTL0 |= UCMSB+UCMST+UCSYNC+ UCCKPH;// 3引脚8位 SPI 主器件 PH=1、PL=0

UCA0CTL1 |= UCSSEL_2;// SMCLK

UCA0BR0 |= 0x02;///2

UCA0BR1 = 0;//位时钟预分频器设置

UCA0MCTL = 0;//无调制

UCA0CTL1 &=~UCSWRST;//**初始化 USCI 状态机**

P1OUT |= BIT3;// nRST_BD 至高电平(BD 未处于复位状态)

while (1){

P1OUT &=~BIT0;//将 nSC_BD 设置为低电平

_DELAY_CYCLES (10);

UCA0TXBUF = 0x0F;//发送地址0x0F (BD 使能寄存器)

while (!(IFG2 & UCA0TXIFG));//等待 TX 缓冲区完成

//__delay_cycles (10);

UCA0TXBUF = 0x5F;//发送数据0x5F 全部使能

while (!(IFG2 & UCA0TXIFG));//等待 TX 缓冲区

_DELAY_CYCLES (10);

P1OUT |= BIT0;//将 nSC_DRV 设置为高电平

_DELAY_CYCLES (10);

    }