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.

[参考译文] MSP430F5438A:MSP430F5438A:MSP430ware SPI 示例项目 USCI_A_SPI_ex1_MASTER 将从器件输入主器件输出、并将 SPI 时钟设置为输入

Guru**** 2555630 points
Other Parts Discussed in Thread: MSP430F5438A

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/595807/msp430f5438a-msp430f5438a-msp430ware-spi-example-project-usci_a_spi_ex1_master-sets-the-slave-in-master-out-and-spi-clock-as-input

器件型号:MSP430F5438A

您好!

我在  MSP-TS430PZ5x100 目标开发板上使用 MSP430F5438A。

在示例项目 USCI_A_SPI_ex1_master 中、我发现 SPI 在3线模式下使用、并且我已经验证它是否正常工作。

我无法理解的是、从器件输入主器件输出和 SPI 时钟的各自 GPIO 为何设置为输入引脚、而这些 GPIO 显然应设置为输出引脚。

下面是代码的片段:

GPIO_setPeripheralModuleFunctionInputPin (
GPIO_PORT_P3、
GPIO_PIN5 + GPIO_PIN4 + GPIO_PIN0
);

谢谢、此致、

Ankit

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

    当引脚被连接至 USCI 外设模块时、方向位"无关"、并且方向实际上直接由模块控制。 (这是双向 μ I²C 工作所必需的。)

    如果您不想混淆代码的读卡器、没有任何东西会阻止您设置"正确"的方向…

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

    大家好、Clemens、

    感谢您的回复。 我修改了以下示例代码、我面临另一个问题:

    (下面是主函数的代码段;使用了 UCMODE_2;我看不到 UCA0STE 变为活动状态、因此没有 SPI 通信):

    void main (void)

    //停止看门狗计时器
    WDT_A_HOLD (WDT_A_base);

    //P3.5 UCA0SOMI 作为输入
    GPIO_setPeripheralModuleFunctionInputPin (
    GPIO_PORT_P3、
    GPIO_PIN5
    );
    //P3.0 UCA0CLK、P3.3 UCA0STE 和 P3.4 UCA0SIMO 作为输入
    GPIO_setPeripheralModuleFunctionOutputPin (
    GPIO_PORT_P3、
    GPIO_PIN0 + GPIO_PIN3 + GPIO_PIN4
    );

    //初始化主设备
    USCI_A_SPI_initMasterParam param ={0};
    param.selectClockSource = USCI_A_SPI_CLOCKSOURCE_SMCLK;
    param.clockSourceFrequency = UCS_getSMCLK();
    param.desiredSpiClock = SPICLK;
    param.msbFirst = USCI_A_SPI_MSB_FIRST;
    param.clockPhase = USCI_A_SPI_PHASE_DATA_Changed_ONFIRST_captured_on_next;
    param.clockPolarity = USCI_A_SPI_CLOCKPOLARITY_INACTION_HIGH;
    返回值= USCI_A_SPI_initMaster (USCI_A0_BASE、&param);

    if (STATUS_FAIL =返回值)

    返回;

    //启用 SPI 模块
    USCI_A_SPI_ENABLE (USCI_A0_BASE);

    //启用接收中断
    USCI_A_SPI_clearInterrupt (USCI_A0_BASE、
    USCI_A_SPI_Receive_interrupt);
    USCI_A_SPI_enableInterrupt (USCI_A0_BASE、
    USCI_A_SPI_Receive_interrupt);


    //等待从器件初始化
    _DELAY_CYCLES (100);

    //初始化数据值
    transmitData = 0x00;

    //CS 位于 UCMODE_2中、因此主器件的高电平有效
    GPIO_setOutputHighOnPin (
    GPIO_PORT_P3、
    GPIO_PIN3
    );

    //USCI_A0 TX 缓冲器准备好了吗?
    while (!USCI_A_SPI_getInterruptStatus (USCI_A0_BASE、
    USCI_A_SPI_Transmit 中断))


    //向从器件发送数据
    USCI_A_SPI_transmitData (USCI_A0_BASE、transmitData);

    //CPU 关闭、启用中断
    _bis_SR_register (LPM0_bits + GIE);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在 Jens-Michael Gross 的回复中、我在下面的主题中得到了我的答案。
    e2e.ti.com/.../254646