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.

[参考译文] MSP430G2230:SPI 上的第一个字节提供9个时钟、而不是8个时钟?

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/702548/msp430g2230-first-byte-on-spi-gives-9-clocks-not-8

器件型号:MSP430G2230

您好!

我的 SPI 通信有问题:使用示波器测量的第一个传输字节错误:我使用示波器0x104 (0b100000100)读取(9个时钟周期!!!) 非0x04 (0b00000100)(8个时钟)

这是 main():

WDTCTL = WDTPW | WDTCNTCL; //看门狗开启

P1REN = 0x1B; //正确终止不可用的 Port1引脚(P1.0/1/3/4),在启用下拉的情况下配置为输入
BCSCTL3 |= LFXT1S_2; //选择 VLO 作为低频率时钟


BCSCTL2 |= DIVS_1; // SMCLK = 0.5 MCLK 0 WD 每隔64ms 复位一次

P1OUT |= BIT2;
P1DIR |= BIT2 | BIT5 | BIT6 | BIT7; //设置端口1输出


USICTL0 |= USIPE7 | USIPE6 | USIPE5 | USIMST | USIOE; //端口、SPI 主器件
USICTL1 |= USICKPH; //设置相位
USICKCTL = USIDIV_1 | USISSEL_2; // SPI clk =/2 SMCLK、低时钟极性
USICTL0 &=~(USISWRST); //释放 USI 以进行操作

// USISRL = 0x04; //数据寄存器地址
USICNT = 8; //重载计数器
_DELAY_CYCLES (40); //在传输之间添加时间以确保从机可以处理信息
*/

P1OUT &=~BIT2; // CS DAC
_DELAY_CYCLES (4);

USISRL = 0x04; //数据寄存器地址
USICNT = 8; //重载计数器
_DELAY_CYCLES (40); //在传输之间添加时间以确保从机可以处理信息

USISRL = 0xA0; //数据
USICNT = 8; //重载计数器
_DELAY_CYCLES (40); //在传输之间添加时间以确保从机可以处理信息

USISRL = 0x0; //数据
USICNT = 8; //重载计数器
_DELAY_CYCLES (40); //在传输之间添加时间以确保从机可以处理信息

P1OUT |= BIT2; // CS DAC


_bis_SR_register (LPM0_bits + GIE); //输入带中断的 LPM0 

当我在 芯片选择线路处于非活动状态时添加虚拟写入(代码的注释部分)时、通信工作正常。 有什么想法、为什么 MSP 一开始就添加一个时钟?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    已报告错误
    www.ti.com/.../slaz416h.pdf
    勘误表中的绕过错误-第一个位始终以"1"的形式传输。 这对我来说很好:
    USICNT = 1;
    _DELAY_CYCLES (6);
    P1OUT &=~BIT2; // CS DAC
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Tomasz、您好!

    很棒的地方! 感谢您对问题的解决方案采取后续行动。 我相信这将帮助我们社区中可能面临同样问题的其他人。

    此致、

    James

    MSP 客户应用