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.

[参考译文] CCS/MSP432P401R:SPI 通信问题

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/595630/ccs-msp432p401r-spi-communication-problem

器件型号:MSP432P401R
主题中讨论的其他器件:ADS1191

工具/软件:Code Composer Studio

大家好、我已经使用 MSP432一段时间了、首先、我要感谢大家在这里提供的所有出色支持。

现在、我要对 ADS1191前端进行编程 首先、在测试中、我使用 ACLK 作为 SPI 协议的时钟源、工作正常。 现在、我尝试使用 SMLCK 作为时钟源、我将其编程为12MHz、因为我需要其他外设的该速度、 并且我在 SPI 的时钟分频器方面遇到了问题、因为我要使其以1MHz 的频率运行。 这是我用于时钟的代码。

void configCLK (void){
CS->KEY = CS_KEY_VAL;
CS->CTL0 = 0x00;
CS->CTL0 = CS_CTRL0_DCORSEL_4;
CS->CTL1 = CS_CTL1_SELA_2 | CS_CTL1_SELM_3 | CS_CTL1_3|CS_CLIN_3|CS_DISALESS_0_C_=
0x00;CS_CL_CL_CLIN_CL_CLINS = 0x00_CL_CLIN_CL_CLINS;CS_CLINDI


这里是我用于 SPI 协议的接口。
void configSPI (void){
EUSCI_B0->CTLW0 |= EUSCI_B_CTLW0_SWRST;
EUSCI_B0->CTLW0 = EUSCI_B_CTLW0_SWRST | EUSCI_B_CTLW0_MST |
EUSCI_B_CTLW0_SYNC | EUSCI_B_CTLW0_MSB;
EUSCI_B0->CTLW0 |= EUSCI_B_CTLW0_ssel_SMCLK;
//EUSCI_B0->BRW = 12;
EUSCI_B0->CTLW0 &=~EUSCI_B_CTLW0_SWRST;
EUSCI_B0->IFG &=~(EUSCI_B_IFG_TXIFG | EUSCI_B_IFG_RXIFG);
} 

如您所见、我对 BRW 指令进行了注释、因为它不起作用。 当我运行类似这样的代码时、通信没有问题、但我担心的是、ADS1191数据表显示最大时钟速度为2MHz、这就是我希望它在1MHz 时的原因。 但是、当我放置 BRW 寄存器的分频器时、通信甚至不会开始。 我通常会评论我的代码、但我来自墨西哥、因此我删除 了这些注释以便于解释。

感谢大家。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "不起作用"到底意味着什么? 无信号? 信号错误? 频率错误?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、根本没有信号。 Clemens 表示、通信甚至不会开始。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请显示从 ACLK 到 SMCLK 时所做的所有更改。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我刚才将 CTLW0中的位从
    EUSCI_B0->CTLW0 |= EUSCI_B_CTLW0_ssel_ACLK;
    至:
    EUSCI_B0->CTLW0 |= EUSCI_B_CTLW0_ssel_SMCLK;
    并添加了 BRW 寄存器的行。
    EUSCI_B0->BRW = 12;
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您如何确定输出端会发生什么情况? 您使用的是示波器还是逻辑分析仪?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    没错、我有用于 DE CLK、MOSI 和 MISO 的逻辑解串器。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    没有任何东西、即使在 CLK 线上也没有? 24MHz 是否起作用? 您是否尝试过其他 BRW 值?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、我这么做已经有一段时间了、我想我会更加困惑。 这是我的逻辑分析仪图片、其中 BRW 寄存器的值为30、因此我将得到大约390KHz 的时钟频率。

    它的工作原理是、这里有一张将 SMLCK 用作时钟源的图片、而 BRW 寄存器中没有分频器、这也很好。

    我很困惑、因为当值低于30时、我根本看不到任何信号、为什么它不能与这些值一起工作、而是全速工作?

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

    [引用 user="Andres Zamudio"]

    如您所见、我对 BRW 指令进行了注释、因为它不起作用。 当我运行类似这样的代码时、通信没有问题、但我担心 的是、ADS1191 数据表显示最大时钟速度为2MHz、这就是我希望它在1MHz 时的原因。 但是、当我放置 BRW 寄存器的分频器时、通信甚至不会开始。 我通常会评论我的代码、但我来自墨西哥、因此我删除 了这些注释以便于解释。

    感谢大家。

    [/报价]

    我相信 ADS1191的最大时钟速度实际上是20MHz 或15MHz、具体取决于 DVDD 范围。

    如果您唯一的担心是运行速度过于接近它允许的最大速度、那么您可能比您想象的更安全(如果我误解了、请纠正我的错误、但我认为您的数学可能会被10分之一取消、是吗?)

    我还会尝试为您解答有关代码的问题、但这可能会降低您的问题的相关程度(除非我的数学或理解不正确)?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    噢、我的错、我在那里犯了一个错误。 您是对的、是的、这可能有助于获得代码问题的答案、但正如您所说、我不太关心。 非常感谢!!!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    安德烈斯

    我不确定您的其余代码在做什么、但我可以使用 此处的示例代码 、插入 CS_Config 中的行、修改 UCB 寄存器并获取1MHz 时钟。

    以下是我的代码的外观(这些是我从示例中更改过的唯一行):

    CS->KEY = CS_KEY_VAL;

    CS->CTL0 = 0x00;

    CS->CTL0 = CS_CTL0_DCORSEL_4;

    CS->CTL1 = CS_CTL1_SELA_2 | CS_CTL1_SELM_3 | CS_CTL1_SELS_3 | CS_CTL1_DIVS__2;

    CS->KEY = 0x00;

    P1->OUT &=~BIT0;

    P1->DIR |= BIT0;//设置 P1.0 LED

    P1->SEL0 |= BIT5 | BIT6 | BIT7;//将 P1.5、P1.6和 P1.7设置为

    // SPI 引脚功能

    EUSCI_B0->CTLW0 |= EUSCI_B_CTLW0_SWRST;//将 eUSCI 状态机置位

    EUSCI_B0->CTLW0 = EUSCI_B_CTLW0_SWRST |//保持 eUSCI 状态机处于复位状态

    EUSCI_B_CTLW0_MST |//设置为 SPI 主设备

    EUSCI_B_CTLW0_SYNC |//设置为同步模式

    // EUSCI_B_CTLW0_CKPL |//将时钟极性设置为高电平

    EUSCI_B_CTLW0_MSB;// MSB 优先

    EUSCI_B0->CTLW0 |= EUSCI_B_CTLW0_ssel_SMCLK;// ACLK

    EUSCI_B0->BRW = 0x0C;///2、fBitClock = fBRCLK/(UCBRx+1)。

    EUSCI_B0->CTLW0 &=~EUSCI_B_CTLW0_SWRST;//初始化 USCI 状态机

    这里是我在逻辑分析仪上的输出